This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: SUBREG related reload fix


Hello Jan,

	mips-sgi-irix6.5 gcc 3.1 builds started failing in
gcc/simplify-rtx.c's simplify_gen_subreg() this morning.  You seem to
know the most about recent changes to this code.  Would you please
investigate the difficulty?

	To reproduce the problem, create a mips-sgi-irix6.5
cross-compiler for gcc 3.1.  Then use cc1 to compile the attached
file, e.g., "./cc1 genrecog.i".

Thank you for your help,
Jeffrey D. Oldham
oldham@codesourcery.com
# 53 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
# 1 "hconfig.h" 1
# 1 "auto-host.h" 1
# 2 "hconfig.h" 2

# 1 "/users/joldham/pooma/dev4/gcc/include/ansidecl.h" 1
# 4 "hconfig.h" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris6.h" 1
# 30 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris6.h"
# 1 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris5.h" 1
# 26 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris5.h"
# 1 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris3.h" 1
# 27 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris5.h" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h" 1
# 29 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
extern char *asm_file_name;
extern char call_used_regs[];
extern int may_call_alloca;
extern char **save_argv;
extern int target_flags;




enum cmp_type {
  CMP_SI,
  CMP_DI,
  CMP_SF,
  CMP_DF,
  CMP_MAX
};


enum delay_type {
  DELAY_NONE,
  DELAY_LOAD,
  DELAY_HILO,
  DELAY_FCMP
};






enum processor_type {
  PROCESSOR_DEFAULT,
  PROCESSOR_R3000,
  PROCESSOR_R3900,
  PROCESSOR_R6000,
  PROCESSOR_R4000,
  PROCESSOR_R4100,
  PROCESSOR_R4300,
  PROCESSOR_R4600,
  PROCESSOR_R4650,
  PROCESSOR_R5000,
  PROCESSOR_R8000
};
# 93 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
extern int mips_abi;




enum mips_abicalls_type {
  MIPS_ABICALLS_NO,
  MIPS_ABICALLS_YES
};







enum block_move_type {
  BLOCK_MOVE_NORMAL,
  BLOCK_MOVE_NOT_LAST,
  BLOCK_MOVE_LAST
};

extern char mips_reg_names[][8];
extern char mips_print_operand_punct[];
extern const char *current_function_file;
extern int num_source_filenames;
extern int inside_function;
extern int ignore_line_number;
extern int file_in_function_warning;
extern int sdb_label_count;
extern int sdb_begin_function_line;
extern int mips_section_threshold;
extern int g_switch_value;
extern int g_switch_set;
extern int sym_lineno;
extern int set_noreorder;
extern int set_nomacro;
extern int set_noat;
extern int set_volatile;
extern int mips_branch_likely;
extern int mips_dbx_regno[];
extern struct rtx_def *branch_cmp[2];
extern enum cmp_type branch_type;
extern enum processor_type mips_cpu;
extern enum mips_abicalls_type mips_abicalls;
extern int mips_isa;
extern int mips16;
extern int mips16_hard_float;
extern int mips_entry;
extern const char *mips_cpu_string;
extern const char *mips_isa_string;
extern const char *mips_abi_string;
extern const char *mips_entry_string;
extern const char *mips_no_mips16_string;
extern const char *mips_explicit_type_size_string;
extern int mips_split_addresses;
extern int dslots_load_total;
extern int dslots_load_filled;
extern int dslots_jump_total;
extern int dslots_jump_filled;
extern int dslots_number_nops;
extern int num_refs[3];
extern struct rtx_def *mips_load_reg;
extern struct rtx_def *mips_load_reg2;
extern struct rtx_def *mips_load_reg3;
extern struct rtx_def *mips_load_reg4;
extern struct rtx_def *embedded_pic_fnaddr_rtx;
extern int mips_string_length;
extern struct rtx_def *mips16_gp_pseudo_rtx;


extern void rdata_section (void);
extern void sdata_section (void);
extern void sbss_section (void);
# 1646 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
extern char mips_hard_regno_mode_ok[][76];
# 1770 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
enum reg_class
{
  NO_REGS,
  M16_NA_REGS,
  M16_REGS,
  T_REG,
  M16_T_REGS,
  GR_REGS,
  FP_REGS,
  HI_REG,
  LO_REG,
  HILO_REG,
  MD_REGS,
  HI_AND_GR_REGS,
  LO_AND_GR_REGS,
  HILO_AND_GR_REGS,
  ST_REGS,
  ALL_REGS,
  LIM_REG_CLASSES
};
# 1856 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
extern enum reg_class mips_regno_to_class[];
# 1926 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
extern enum reg_class mips_char_to_class[];
# 2148 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
struct mips_frame_info
{
  long total_size;
  long var_size;
  long args_size;
  long extra_size;
  int gp_reg_size;
  int fp_reg_size;
  long mask;
  long fmask;
  long gp_save_offset;
  long fp_save_offset;
  long gp_sp_offset;
  long fp_sp_offset;
  int initialized;
  int num_gp;
  int num_fp;
  long insns_len;
};

extern struct mips_frame_info current_frame_info;
# 2488 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/mips.h"
typedef struct mips_args {
  int gp_reg_found;
  unsigned int arg_number;
  unsigned int arg_words;
  unsigned int fp_arg_words;
  int last_arg_fp;
  int fp_code;
  unsigned int num_adjusts;




  struct rtx_def *adjust[4*2];
} CUMULATIVE_ARGS;
# 28 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris5.h" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris4.h" 1
# 29 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris5.h" 2
# 31 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris6.h" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/abi64.h" 1
# 97 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/abi64.h"
union tree_node;

extern struct rtx_def *mips_function_value (union tree_node *, union tree_node *);
# 32 "/users/joldham/pooma/dev4/gcc/gcc/config/mips/iris6.h" 2
# 5 "hconfig.h" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/defaults.h" 1
# 6 "hconfig.h" 2
# 54 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 1
# 33 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "include/stdarg.h" 1 3
# 43 "include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 110 "include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 34 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 47 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "include/stddef.h" 1 3
# 147 "include/stddef.h" 3
typedef int ptrdiff_t;
# 199 "include/stddef.h" 3
typedef unsigned int size_t;
# 288 "include/stddef.h" 3
typedef int wchar_t;
# 48 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2


# 1 "include/stdio.h" 1 3
# 14 "include/stdio.h" 3
# 1 "include/stdarg.h" 1 3
# 15 "include/stdio.h" 2 3





#ident "$Revision: 1.76 $"
# 50 "include/stdio.h" 3
# 1 "/usr/include/standards.h" 1 3
# 19 "/usr/include/standards.h" 3
#ident "$Id: standards.h,v 1.19 1997/12/15 21:30:25 jph Exp $"
# 51 "include/stdio.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 19 "/usr/include/sgidefs.h" 3
#ident "$Revision: 1.11 $"
# 136 "/usr/include/sgidefs.h" 3
typedef int __int32_t;
typedef unsigned __uint32_t;
# 183 "/usr/include/sgidefs.h" 3
typedef long long __int64_t;
typedef unsigned long long __uint64_t;
# 219 "/usr/include/sgidefs.h" 3
typedef __int32_t __psint_t;
typedef __uint32_t __psunsigned_t;
# 241 "/usr/include/sgidefs.h" 3
typedef __int32_t __scint_t;
typedef __uint32_t __scunsigned_t;
# 52 "include/stdio.h" 2 3
# 67 "include/stdio.h" 3
typedef int ssize_t;
# 76 "include/stdio.h" 3
typedef __int64_t fpos_t;
# 86 "include/stdio.h" 3
typedef __int64_t off64_t;
# 96 "include/stdio.h" 3
typedef __int64_t off_t;
# 108 "include/stdio.h" 3
typedef __int64_t fpos64_t;
# 117 "include/stdio.h" 3
typedef char *__not_va_list__;
# 187 "include/stdio.h" 3
typedef struct
# 197 "include/stdio.h" 3
__file_s

{

        int _cnt;




        unsigned char *_ptr;
        unsigned char *_base;





        unsigned char _flag;
        unsigned char _o_file;
        unsigned short _file;




} FILE;

extern FILE __iob[100];

extern FILE *_lastbuf;
extern unsigned char *_bufendtab[];
extern unsigned char _sibuf[], _sobuf[];


extern int remove(const char *);
extern int rename(const char *, const char *);
extern FILE *tmpfile(void);
extern char *tmpnam(char *);
extern int fclose(FILE *);
extern int fflush(FILE *);
extern FILE *fopen(const char *, const char *);
extern FILE *freopen(const char *, const char *, FILE *);
extern void setbuf(FILE *, char *);
extern int setvbuf(FILE *, char *, int, size_t);

extern int fprintf(FILE *, const char *, ...);

extern int fscanf(FILE *, const char *, ...);

extern int printf(const char *, ...);

extern int scanf(const char *, ...);


extern int snprintf(char *, size_t, const char *, ...);


extern int sprintf(char *, const char *, ...);

extern int sscanf(const char *, const char *, ...);
extern int vfprintf(FILE *, const char *, __gnuc_va_list);
extern int vprintf(const char *, __gnuc_va_list);

extern int vsnprintf(char *, size_t, const char *, __gnuc_va_list);

extern int vsprintf(char *, const char *, __gnuc_va_list);
# 271 "include/stdio.h" 3
extern int fgetc(FILE *);
extern char *fgets(char *, int, FILE *);
extern int fputc(int, FILE *);
extern int fputs(const char *, FILE *);
extern int getc(FILE *);
extern int getchar(void);
extern char *gets(char *);
extern int putc(int, FILE *);
extern int putchar(int);
extern int puts(const char *);
extern int ungetc(int, FILE *);
extern size_t fread(void *, size_t, size_t, FILE *);
#pragma int_to_unsigned fread
extern size_t fwrite(const void *, size_t, size_t, FILE *);
#pragma int_to_unsigned fwrite
extern int fgetpos(FILE *, fpos_t *);
extern int fseek(FILE *, long, int);
extern int fsetpos(FILE *, const fpos_t *);
extern long ftell(FILE *);
extern void rewind(FILE *);
extern void clearerr(FILE *);
extern int feof(FILE *);
extern int ferror(FILE *);
extern void perror(const char *);

extern int __filbuf(FILE *);
extern int __flsbuf(int, FILE *);



extern FILE *fdopen(int, const char *);
extern int fileno(FILE *);




extern void flockfile(FILE *);
extern int ftrylockfile(FILE *);
extern void funlockfile(FILE *);
extern int getc_unlocked(FILE *);
extern int putc_unlocked(int, FILE *);
extern int getchar_unlocked(void);
extern int putchar_unlocked(int);



extern FILE *popen(const char *, const char *);
extern int pclose(FILE *);



# 1 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 1 3
# 36 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 3
extern char *optarg;
# 50 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 3
extern int optind;




extern int opterr;



extern int optopt;
# 82 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 3
struct option
{

  const char *name;





  int has_arg;
  int *flag;
  int val;
};
# 112 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 3
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);
# 323 "include/stdio.h" 2 3
extern char *ctermid(char *);
extern char *cuserid(char *);
extern char *tempnam(const char *, const char *);
extern int getw(FILE *);
extern int putw(int, FILE *);





extern char *mktemp(char *);
extern int mkstemp(char *);
extern int setbuffer(FILE *, char *, int);
extern int setlinebuf(FILE *);
extern int system(const char *);




extern off_t ftello(FILE *);
extern int fseeko(FILE *, off_t, int);




extern int fgetpos64(FILE *, fpos64_t *);
extern FILE *fopen64(const char *, const char *);
extern FILE *freopen64(const char *, const char *, FILE *);
extern int fseek64(FILE *, __int64_t, int);
extern int fseeko64(FILE *, off64_t, int);
extern int fsetpos64(FILE *, const fpos64_t *);
extern __int64_t ftell64(FILE *);
extern off64_t ftello64(FILE *);
extern FILE *tmpfile64(void);



extern int __semputc(int, FILE *);
extern int __semgetc(FILE *);
extern int __us_rsthread_stdio;



extern char *ctermid_r(char *);
# 51 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 85 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/users/joldham/pooma/dev4/gcc/include/safe-ctype.h" 1
# 44 "/users/joldham/pooma/dev4/gcc/include/safe-ctype.h"
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
};


extern const unsigned short _sch_istable[256];
# 94 "/users/joldham/pooma/dev4/gcc/include/safe-ctype.h"
extern const unsigned char _sch_toupper[256];
extern const unsigned char _sch_tolower[256];
# 86 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2






# 1 "include/sys/types.h" 1 3
# 36 "include/sys/types.h" 3
#ident "$Revision: 3.141 $"

# 1 "/usr/include/standards.h" 1 3
# 39 "include/sys/types.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 40 "include/sys/types.h" 2 3


typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;



# 1 "/usr/include/sys/pthread.h" 1 3
# 11 "/usr/include/sys/pthread.h" 3
typedef unsigned int pthread_t;


typedef struct { long __D[5]; } pthread_attr_t;
typedef struct { long __D[8]; } pthread_mutex_t;
typedef struct { long __D[2]; } pthread_mutexattr_t;
typedef struct { long __D[8]; } pthread_cond_t;
typedef struct { long __D[2]; } pthread_condattr_t;
typedef struct { long __D[16]; } pthread_rwlock_t;
typedef struct { long __D[4]; } pthread_rwlockattr_t;
typedef int pthread_key_t;
typedef int pthread_once_t;
# 50 "include/sys/types.h" 2 3



typedef char * addr_t;
typedef char * caddr_t;

typedef __int64_t daddr_t;



typedef long pgno_t;
typedef __uint32_t pfn_t;
typedef short cnt_t;
typedef unsigned long basictime_t;
typedef __int64_t micro_t;




typedef __int32_t pgcnt_t;

typedef enum { B_FALSE, B_TRUE } boolean_t;
# 83 "include/sys/types.h" 3
typedef long id_t;
# 96 "include/sys/types.h" 3
typedef ulong_t major_t;
typedef ulong_t minor_t;
# 115 "include/sys/types.h" 3
typedef ushort_t o_mode_t;
typedef short o_dev_t;
typedef ushort_t o_uid_t;
typedef o_uid_t o_gid_t;
typedef short o_nlink_t;
typedef short o_pid_t;
typedef __uint32_t o_ino_t;


typedef unsigned long mode_t;
typedef unsigned long dev_t;
typedef long uid_t;
typedef long gid_t;
typedef unsigned long nlink_t;
typedef long pid_t;
# 140 "include/sys/types.h" 3
typedef int tid_t;

typedef dev_t vertex_hdl_t;


typedef __uint64_t ino_t;



typedef __uint64_t ino64_t;
# 169 "include/sys/types.h" 3
typedef __scint_t __scoff_t;

typedef __scoff_t scoff_t;




typedef __int64_t blkcnt64_t;
typedef __uint64_t fsblkcnt64_t;
typedef __uint64_t fsfilcnt64_t;



typedef __int64_t blkcnt_t;
typedef __uint64_t fsblkcnt_t;
typedef __uint64_t fsfilcnt_t;






typedef long swblk_t;
typedef unsigned long paddr_t;
typedef unsigned long iopaddr_t;
typedef int key_t;
typedef unsigned char use_t;
typedef long sysid_t;
typedef short index_t;

typedef signed short nasid_t;
typedef signed short cnodeid_t;
typedef signed char partid_t;
typedef signed short moduleid_t;
typedef signed short cmoduleid_t;
typedef uchar_t clusterid_t;

typedef unsigned int lock_t;
typedef signed short cpuid_t;
typedef unsigned char pri_t;
typedef __uint64_t accum_t;
typedef __int64_t prid_t;
typedef __int64_t ash_t;
typedef short cell_t;
typedef int credid_t;
typedef __int64_t jid_t;
# 247 "include/sys/types.h" 3
typedef long time_t;
# 257 "include/sys/types.h" 3
typedef long clock_t;
# 288 "include/sys/types.h" 3
typedef int clockid_t;



typedef int timer_t;
# 301 "include/sys/types.h" 3
typedef unsigned int useconds_t;






typedef __scunsigned_t bitnum_t;
typedef __scunsigned_t bitlen_t;


typedef int processorid_t;
typedef int toid_t;
typedef long *qaddr_t;
typedef __uint32_t inst_t;
# 324 "include/sys/types.h" 3
typedef __uint64_t machreg_t;
# 334 "include/sys/types.h" 3
typedef __uint64_t fpreg_t;
# 345 "include/sys/types.h" 3
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef signed short int16_t;
typedef unsigned short uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef __int64_t int64_t;
typedef __uint64_t uint64_t;
typedef __int64_t intmax_t;
typedef __uint64_t uintmax_t;
typedef signed long int intptr_t;
typedef unsigned long int uintptr_t;






typedef unsigned char u_int8_t;
typedef unsigned short u_int16_t;
typedef __uint32_t u_int32_t;
# 388 "include/sys/types.h" 3
typedef long hostid_t;
# 403 "include/sys/types.h" 3
# 1 "/usr/include/sys/bsd_types.h" 1 3
# 21 "/usr/include/sys/bsd_types.h" 3
#ident "$Revision: 1.2 $"






typedef struct { int r[1]; } * physadr;
typedef unsigned char unchar;
typedef unsigned char u_char;
typedef unsigned short ushort;
typedef unsigned short u_short;
typedef unsigned int uint;
typedef unsigned int u_int;
typedef unsigned long ulong;
typedef unsigned long u_long;
typedef struct _quad { long val[2]; } quad;






# 1 "/usr/include/sys/select.h" 1 3
# 29 "/usr/include/sys/select.h" 3
#ident "$Revision: 1.17 $"





# 1 "/usr/include/standards.h" 1 3
# 36 "/usr/include/sys/select.h" 2 3
# 55 "/usr/include/sys/select.h" 3
typedef long fd_mask_t;
typedef unsigned long ufd_mask_t;
# 67 "/usr/include/sys/select.h" 3
typedef struct fd_set {



        fd_mask_t fds_bits[(((1024)+(((int)(sizeof(fd_mask_t) * 8))-1))/((int)(sizeof(fd_mask_t) * 8)))];
} fd_set;







# 1 "/usr/include/string.h" 1 3





#ident "$Revision: 1.41 $"
# 38 "/usr/include/string.h" 3
# 1 "/usr/include/standards.h" 1 3
# 39 "/usr/include/string.h" 2 3
# 67 "/usr/include/string.h" 3
extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);
extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);
extern void *memccpy(void *, const void *, int, size_t);
extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);

extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);

extern size_t strcspn(const char *, const char *);
#pragma int_to_unsigned strcspn

extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);

extern size_t strspn(const char *, const char *);
#pragma int_to_unsigned strspn

extern char *strstr(const char *, const char *);

extern char *strtok(char *, const char *);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
#pragma int_to_unsigned strlen


extern int ffs(int);

extern int strcasecmp(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);



extern char *strdup(const char *);



extern char *strtok_r(char *, const char *, char **);
# 81 "/usr/include/sys/select.h" 2 3
# 117 "/usr/include/sys/select.h" 3
typedef long fd_mask;
# 45 "/usr/include/sys/bsd_types.h" 2 3
# 404 "include/sys/types.h" 2 3



typedef __uint64_t k_sigset_t;
# 93 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2

# 1 "/usr/include/errno.h" 1 3





#ident "$Revision: 1.28 $"
# 36 "/usr/include/errno.h" 3
# 1 "/usr/include/sys/errno.h" 1 3
# 13 "/usr/include/sys/errno.h" 3
#ident "$Revision: 3.44 $"
# 35 "/usr/include/sys/errno.h" 3
# 1 "/usr/include/standards.h" 1 3
# 36 "/usr/include/sys/errno.h" 2 3
# 37 "/usr/include/errno.h" 2 3




extern char * sys_errlist[];
extern int sys_nerr;

extern int oserror(void);
extern int setoserror(int);
extern int goserror(void);
# 60 "/usr/include/errno.h" 3
extern int errno;
# 95 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2






# 1 "/usr/include/string.h" 1 3
# 102 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 1 "/usr/include/strings.h" 1 3
# 9 "/usr/include/strings.h" 3
#ident "$Revision: 1.12 $"




# 1 "/usr/include/standards.h" 1 3
# 15 "/usr/include/strings.h" 2 3
# 1 "include/sys/types.h" 1 3
# 16 "/usr/include/strings.h" 2 3



# 1 "/usr/include/string.h" 1 3
# 20 "/usr/include/strings.h" 2 3
# 28 "/usr/include/strings.h" 3
extern int bcmp(const void *, const void *, size_t);
extern void bcopy(const void *, void *, size_t);
extern void bzero(void *, size_t);
extern char *index(const char *, int);
extern char *rindex(const char *, int);
# 103 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 114 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "include/stdlib.h" 1 3
# 15 "include/stdlib.h" 3
#ident "$Revision: 1.78 $"
# 43 "include/stdlib.h" 3
# 1 "/usr/include/standards.h" 1 3
# 44 "include/stdlib.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 45 "include/stdlib.h" 2 3
# 99 "include/stdlib.h" 3
typedef struct {
         int quot;
         int rem;
        } div_t;

typedef struct {
         long quot;
         long rem;
        } ldiv_t;
# 162 "include/stdlib.h" 3
# 1 "/usr/include/locale_attr.h" 1 3
# 16 "/usr/include/locale_attr.h" 3
# 1 "/usr/include/sgidefs.h" 1 3
# 17 "/usr/include/locale_attr.h" 2 3




#ident "$Revision: 1.4 $"
# 44 "/usr/include/locale_attr.h" 3
typedef struct {

    unsigned int _class [ 257 ];
    signed short _lower [ 257 ];
    signed short _upper [ 257 ];

    char _cswidth [ 7 ];
    char _fill [ 1 ];



} __ctype_t;


typedef int (*__isset_func_t)(int);




        typedef long wint_t;






typedef int (*__iscodeset_func_t)(int, wint_t);


typedef struct __attr {

    __ctype_t * _ctype_tbl;

    struct _csinfo {
        unsigned char _eucwidth[3];
        unsigned char _scrwidth[3];
        unsigned char _mb_cur_max;
    } _csinfo;

    struct _euc_func {
        int _is_euc;
        __isset_func_t _isset2;
        __isset_func_t _isset3;
        __iscodeset_func_t _iscodeset;
    } _euc_func;

    struct _collate_res {
        unsigned char _coll_as_cmp;
    } _collate_res;

    void * _fill[15];
} __attr_t;




extern __attr_t __libc_attr;
# 163 "include/stdlib.h" 2 3
# 173 "include/stdlib.h" 3
extern double atof(const char *);
extern int atoi(const char *);
extern long int atol(const char *);
extern double strtod(const char *, char **);
extern long int strtol(const char *, char **, int);
extern unsigned long int strtoul(const char *, char **, int);
extern int rand(void);
extern void srand(unsigned int);
extern void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);







extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);




extern char *getenv(const char *);
extern int system(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t,
        int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
        int (*)(const void *, const void *));







extern int abs(int);






extern div_t div(int, int);
extern long int labs(long);




extern ldiv_t ldiv(long, long);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(const char *, size_t);
extern int wctomb(char *, wchar_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);



extern int putenv(const char *);
extern double drand48(void);
extern double erand48(unsigned short [3]);
extern long lrand48(void);
extern long nrand48(unsigned short [3]);
extern long mrand48(void);
extern long jrand48(unsigned short [3]);
extern void srand48(long);
extern void lcong48(unsigned short int [7]);
extern void setkey(const char *);
extern unsigned short * seed48(unsigned short int [3]);




extern long a64l(const char *);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *gcvt(double, int, char *);
extern int getsubopt(char **, char * const *, char **);
extern int grantpt(int);
extern char *initstate(unsigned int, char *, size_t);
extern char *l64a(long);
extern char *mktemp(char *);
extern int mkstemp(char *);
extern char *ptsname(int);
extern long random(void);
extern char *realpath(const char *, char *);
extern char *setstate(const char *);
extern void srandom(unsigned);
extern int ttyslot(void);
extern int unlockpt(int);
extern void *valloc(size_t);







extern int rand_r(unsigned int *);




# 1 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 1 3
# 280 "include/stdlib.h" 2 3
extern int atcheckpoint(void (*)(void));
extern int atrestart(void (*)(void));
extern int dup2(int, int);
extern int getpw(int, char *);
extern char *getcwd(char *, size_t);
extern char *getlogin(void);
extern char *getpass(const char *);
extern int isatty(int);
extern void l3tol(long *, const char *, int);
extern void ltol3(char *, const long *, int);
extern void *memalign(size_t, size_t);
# 300 "include/stdlib.h" 3
extern long double atold(const char *);
extern long double strtold(const char *nptr, char **endptr);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *ecvtl(long double, int, int *, int *);
extern char *fcvtl(long double, int, int *, int *);
extern char *gcvtl(long double, int, char *);
# 320 "include/stdlib.h" 3
typedef struct {
         __int64_t quot;
         __int64_t rem;
        } lldiv_t;

extern __int64_t atoll(const char *);
extern __int64_t strtoll(const char *, char **, int);
extern __uint64_t strtoull(const char *, char **, int);
extern __int64_t llabs(__int64_t);




extern lldiv_t lldiv(__int64_t, __int64_t);







extern char *ecvt_r(double, int, int *, int *, char *);
extern char *fcvt_r(double, int, int *, int *, char *);

extern char *qecvt_r(long double, int, int *, int *, char *);
extern char *qfcvt_r(long double, int, int *, int *, char *);
extern char *ecvtl_r(long double, int, int *, int *, char *);
extern char *fcvtl_r(long double, int, int *, int *, char *);
# 115 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 137 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "include/unistd.h" 1 3
# 15 "include/unistd.h" 3
#ident "$Revision: 1.137 $"
# 39 "include/unistd.h" 3
# 1 "/usr/include/standards.h" 1 3
# 40 "include/unistd.h" 2 3
# 286 "include/unistd.h" 3
# 1 "include/sys/types.h" 1 3
# 287 "include/unistd.h" 2 3
# 1 "/usr/include/sys/unistd.h" 1 3
# 288 "include/unistd.h" 2 3




extern int access(const char *, int);
extern unsigned alarm(unsigned);
extern int chdir(const char *);
extern int chown(const char *, uid_t, gid_t);
extern int close(int);
extern char *ctermid(char *);
extern char *cuserid(char *);
extern int dup(int);
extern int dup2(int, int);
extern int execl(const char *, const char *, ...);
extern int execle(const char *, const char *, ...);
extern int execlp(const char *, const char *, ...);
extern int execv(const char *, char *const *);
extern int execve(const char *, char *const *, char *const *);
extern int execvp(const char *, char *const *);
extern void _exit(int);
extern pid_t fork(void);
extern long fpathconf(int, int);

extern char *getcwd(char *, size_t);
extern gid_t getegid(void);
extern uid_t geteuid(void);
extern gid_t getgid(void);



extern int getgroups(int, gid_t *);

extern char *getlogin(void);



extern pid_t getpgrp(void);

extern pid_t getpid(void);
extern pid_t getppid(void);
extern uid_t getuid(void);
extern int isatty(int);

extern int link(const char *, const char *);
extern int linkfollow(const char *, const char *);
# 344 "include/unistd.h" 3
extern off_t lseek(int, off_t, int);
extern long pathconf(const char *, int);
extern int pause(void);
extern int pipe(int *);
extern ssize_t read(int, void *, size_t);
extern int rmdir(const char *);
extern int setgid(gid_t);
extern int setpgid(pid_t, pid_t);
extern pid_t setsid(void);
extern int setuid(uid_t);
extern unsigned sleep(unsigned);
extern long sysconf(int);
extern pid_t tcgetpgrp(int);
extern int tcsetpgrp(int, pid_t);
extern char *ttyname(int);
extern int unlink(const char *);
extern ssize_t write(int, const void *, size_t);





extern int fdatasync(int);






extern int fsync(int);






extern int ftruncate(int, off_t);






extern int getlogin_r(char *, size_t);
extern int ttyname_r(int, char *, size_t);
extern int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));






# 1 "/users/joldham/pooma/dev4/gcc/include/getopt.h" 1 3
# 397 "include/unistd.h" 2 3
extern size_t confstr(int, char *, size_t);






extern int chroot(const char *);
extern int nice(int);
extern char *crypt(const char *, const char *);
extern void encrypt(char *, int);
extern char *getpass(const char *);
extern void swab(const void *, void *, ssize_t);






extern int brk(void *);
extern int fchown(int, uid_t, gid_t);
extern int fchdir(int);
extern int getdtablesize(void);
extern long gethostid(void);
extern int gethostname(char *, size_t);
extern int getpagesize(void);
extern pid_t getpgid(pid_t);
extern pid_t getsid(pid_t);
extern char *getwd(char *);
extern int lchown(const char *, uid_t, gid_t);
extern int lockf(int, int, off_t);
extern int readlink(const char *, char *, size_t);
extern void *sbrk(ssize_t);



extern pid_t setpgrp(void);



extern int setregid(gid_t, gid_t);
# 449 "include/unistd.h" 3
extern int setreuid(uid_t, uid_t);
extern int symlink(const char *, const char *);
extern void sync(void);
extern int truncate(const char *, off_t);
extern useconds_t ualarm(useconds_t, useconds_t);
extern int usleep(useconds_t);
# 469 "include/unistd.h" 3
extern ssize_t pread(int, void *, size_t, off_t);
extern ssize_t pwrite(int, const void *, size_t, off_t);
# 481 "include/unistd.h" 3
struct timeval;
extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);






# 1 "/usr/include/sys/uio.h" 1 3
# 12 "/usr/include/sys/uio.h" 3
#ident "@(#)uts-3b2:io/uio.h	1.2"
#ident "$Revision: 1.23 $"
# 26 "/usr/include/sys/uio.h" 3
# 1 "include/sys/types.h" 1 3
# 27 "/usr/include/sys/uio.h" 2 3



typedef struct iovec {
        void *iov_base;
        size_t iov_len;
} iovec_t;



extern ssize_t readv(int, const struct iovec *, int);
extern ssize_t writev(int, const struct iovec *, int);
# 490 "include/unistd.h" 2 3
# 1 "/usr/include/utime.h" 1 3





#ident "$Revision: 1.9 $"
# 34 "/usr/include/utime.h" 3
# 1 "/usr/include/sys/utime.h" 1 3
# 15 "/usr/include/sys/utime.h" 3
# 1 "include/sys/types.h" 1 3
# 16 "/usr/include/sys/utime.h" 2 3

struct utimbuf {
        time_t actime;
        time_t modtime;
};
# 35 "/usr/include/utime.h" 2 3

extern int utime(const char *, const struct utimbuf *);
# 491 "include/unistd.h" 2 3
# 1 "/usr/include/re_comp.h" 1 3





#ident "$Revision: 1.1 $"
# 25 "/usr/include/re_comp.h" 3
extern char *re_comp(const char *);
extern int re_exec(const char *);
# 492 "include/unistd.h" 2 3
extern int acct(const char *);
extern void exit(int);
extern char *gettxt(const char *, const char *);
extern int profil(unsigned short *, size_t, int, unsigned int);
extern int ptrace(int, pid_t, int, int);
extern int rename(const char *, const char *);
extern int seteuid(uid_t);
extern int setegid(gid_t);
extern int stime(const time_t *);
extern off_t tell(int);



struct acct_spi;
extern int atfork_child(void (*func)(void));
extern int atfork_child_prepend(void (*func)(void));
extern int atfork_parent(void (*func)(int, int));
extern int atfork_pre(void (*func)(void));
extern int atsproc_child(void (*func)(void));
extern int atsproc_parent(void (*func)(int, int));
extern int atsproc_pre(void (*func)(unsigned int));
extern void bset(char *, bitnum_t);
extern void bclr(char *, bitnum_t);
extern int btst(char *, bitnum_t);
extern void bfset(char *, bitnum_t, bitlen_t);
extern void bfclr(char *, bitnum_t, bitlen_t);
extern bitlen_t bftstset(char *, bitnum_t, bitlen_t);
extern bitlen_t bftstclr(char *, bitnum_t, bitlen_t);
extern int BSDchown(const char *, uid_t, gid_t);
extern int BSDdup2(int, int);
extern int BSDfchown(int, uid_t, gid_t);
extern int BSDgetpgrp(int);
extern int BSDsetpgrp(int, int);
extern int BSDsetgroups(int, int *);
extern int BSDgetgroups(int, int *);
extern int _daemonize(int, int, int, int);
extern ash_t getash(void);
extern int getdtablehi(void);
extern int getdomainname(char *, int);
extern prid_t getprid(void);
extern char *_getpty(int *, int, mode_t, int);
extern int getspinfo(struct acct_spi *);
extern int mincore(caddr_t, size_t, char *);
extern int mpin(void *, size_t);
extern int munpin(void *, size_t);
extern int newarraysess(void);
extern pid_t pcreatel(const char *, const char *, ...);
extern pid_t pcreatelp(const char *, const char *, ...);
extern pid_t pcreatev(const char *, char *const *);
extern pid_t pcreateve(const char *, char *const *, char *const *);
extern pid_t pcreatevp(const char *, char *const *);

extern ssize_t pread64(int, void *, size_t, off64_t);
extern ssize_t pwrite64(int, const void *, size_t, off64_t);

extern int rexecl(cell_t, const char *, const char *, ...);
extern int rexecle(cell_t, const char *, const char *, ...);
extern int rexeclp(cell_t, const char *, const char *, ...);
extern int rexecv(cell_t, const char *, char *const *);
extern int rexecve(cell_t, const char *, char *const *, char *const *);
extern int rexecvp(cell_t, const char *, char *const *);
extern float _sqrt_s(float);
extern double _sqrt_d(double);
extern int setash(ash_t);
extern int setdomainname(const char *, int);



extern int setgroups(int, const gid_t *);

extern int sethostid(int);
extern int sethostname(const char *, int);
extern int setprid(prid_t);
extern int setrgid(gid_t);
extern int setruid(uid_t);
extern int setspinfo(struct acct_spi *);
extern int sgikopt(const char *, char *, int);
extern long sginap(long);
extern off64_t tell64(int);
extern int vhangup(void);





extern int fattach(int, const char *);
extern int fdetach(const char *);
extern int ioctl(int, int, ...);





extern int ftruncate64(int, off64_t);
extern int lockf64(int, int, off64_t);
extern off64_t lseek64(int, off64_t, int);
extern int truncate64(const char *, off64_t);
# 138 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2



# 1 "/usr/include/sys/param.h" 1 3
# 36 "/usr/include/sys/param.h" 3
#ident "$Revision: 3.91 $"


# 1 "include/sys/types.h" 1 3
# 40 "/usr/include/sys/param.h" 2 3
# 1 "/usr/include/sys/signal.h" 1 3
# 25 "/usr/include/sys/signal.h" 3
# 1 "/usr/include/standards.h" 1 3
# 26 "/usr/include/sys/signal.h" 2 3

#ident "$Revision: 3.144 $"
# 82 "/usr/include/sys/signal.h" 3
# 1 "include/sys/types.h" 1 3
# 83 "/usr/include/sys/signal.h" 2 3
# 102 "/usr/include/sys/signal.h" 3
typedef void (*SIG_PF) ();
# 114 "/usr/include/sys/signal.h" 3
# 1 "/usr/include/sys/sigevent.h" 1 3
# 20 "/usr/include/sys/sigevent.h" 3
#ident "$Revision: 1.8 $"
# 33 "/usr/include/sys/sigevent.h" 3
# 1 "/usr/include/standards.h" 1 3
# 34 "/usr/include/sys/sigevent.h" 2 3
# 1 "include/sys/types.h" 1 3
# 35 "/usr/include/sys/sigevent.h" 2 3
# 1 "/usr/include/sys/pthread.h" 1 3
# 36 "/usr/include/sys/sigevent.h" 2 3


typedef union sigval {
        int sival_int;
        void *sival_ptr;
} sigval_t;
# 55 "/usr/include/sys/sigevent.h" 3
typedef union notifyinfo {
        int nisigno;
        void (*nifunc) (sigval_t);
} notifyinfo_t;

typedef struct sigevent {
        int sigev_notify;
        notifyinfo_t sigev_notifyinfo;
        sigval_t sigev_value;
        void (*sigev_notify_function) (sigval_t);
        pthread_attr_t *sigev_notify_attributes;
        unsigned long sigev_reserved[11];
        unsigned long sigev_pad[6];
} sigevent_t;
# 115 "/usr/include/sys/signal.h" 2 3






# 1 "/usr/include/sys/siginfo.h" 1 3
# 24 "/usr/include/sys/siginfo.h" 3
#ident "$Revision: 1.26 $"




# 1 "/usr/include/standards.h" 1 3
# 30 "/usr/include/sys/siginfo.h" 2 3

# 1 "/usr/include/sys/sigevent.h" 1 3
# 32 "/usr/include/sys/siginfo.h" 2 3
# 59 "/usr/include/sys/siginfo.h" 3
typedef struct __siginfo {
        int si_signo;
        int si_code;
        int si_errno;
        union {

                int si_pad[((128 / sizeof(__int32_t)) - 3)];

                struct {
                        pid_t __pid;
                        union {
                                struct {
                                        uid_t __uid;
                                } __kill;
                                struct {
                                        clock_t __utime;
                                        int __status;
                                        clock_t __stime;
                                        int __swap;
                                } __cld;
                        } __pdata;
                } __proc;

                struct {
                        void *__addr;
                } __fault;

                struct {

                        int __fd;
                        long __band;
                } __file;

                union sigval __value;



        } __data;

} siginfo_t;
# 122 "/usr/include/sys/signal.h" 2 3







typedef struct {
        __uint32_t __sigbits[4];
} sigset_t;



typedef union __sighandler {
        void (*sa_handler1)();

        void (*sa_sigaction1)(int, siginfo_t *, void *);

} __sighandler_t;





typedef struct sigaction {
        int sa_flags;
        __sighandler_t sa_sighandler;
        sigset_t sa_mask;

        int sa_resv[2];
} sigaction_t;
# 198 "/usr/include/sys/signal.h" 3
struct sigstack {
        void *ss_sp;
        int ss_onstack;
};
# 216 "/usr/include/sys/signal.h" 3
# 1 "/usr/include/sys/ucontext.h" 1 3
# 26 "/usr/include/sys/ucontext.h" 3
#ident "$Revision: 1.36 $"





# 1 "/usr/include/standards.h" 1 3
# 33 "/usr/include/sys/ucontext.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 34 "/usr/include/sys/ucontext.h" 2 3
# 50 "/usr/include/sys/ucontext.h" 3
# 1 "include/sys/types.h" 1 3
# 51 "/usr/include/sys/ucontext.h" 2 3
# 60 "/usr/include/sys/ucontext.h" 3
typedef struct _sigaltstack {
        void *ss_sp;
        size_t ss_size;
        int ss_flags;
} stack_t;
# 130 "/usr/include/sys/ucontext.h" 3
typedef machreg_t greg_t;




typedef greg_t gregset_t[37];




typedef struct __fpregset {
        union {
                double __fp_dregs[32];

                struct {
                        __uint32_t _fp_fill;
                        float _fp_fregs;
                } __fp_fregs[32];






                machreg_t __fp_regs[32];
        } __fp_r;
        __uint32_t __fp_csr;
        __uint32_t __fp_pad;
} fpregset_t;

typedef struct {
        gregset_t __gregs;
        fpregset_t __fpregs;
} mcontext_t;

typedef struct __ucontext {
        unsigned long uc_flags;
        struct __ucontext *uc_link;
        sigset_t uc_sigmask;
        stack_t uc_stack;
        mcontext_t uc_mcontext;
        long uc_filler[49];
} ucontext_t;
# 217 "/usr/include/sys/signal.h" 2 3
# 273 "/usr/include/sys/signal.h" 3
extern void (*bsd_signal(int, void (*)(int)))(int);
extern int killpg(pid_t, int);
extern int sigstack(struct sigstack *, struct sigstack *);





extern void (*signal(int,void (*)()))();
# 305 "/usr/include/sys/signal.h" 3
typedef struct sigcontext {
        __uint32_t sc_regmask;
        __uint32_t sc_status;
        __uint64_t sc_pc;



        __uint64_t sc_regs[32];



        __uint64_t sc_fpregs[32];
        __uint32_t sc_ownedfp;
        __uint32_t sc_fpc_csr;
        __uint32_t sc_fpc_eir;

        __uint32_t sc_ssflags;
        __uint64_t sc_mdhi;
        __uint64_t sc_mdlo;



        __uint64_t sc_cause;
        __uint64_t sc_badvaddr;
        __uint64_t sc_triggersave;
        sigset_t sc_sigset;
        __uint64_t sc_fp_rounded_result;
        __uint64_t sc_pad[31];
} sigcontext_t;
# 41 "/usr/include/sys/param.h" 2 3
# 238 "/usr/include/sys/param.h" 3
struct paramconst {
        int p_usize;
        int p_extusize;
};
# 142 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2



# 1 "include/limits.h" 1 3
# 11 "include/limits.h" 3
# 1 "include/syslimits.h" 1 3
# 36 "include/syslimits.h" 3
#ident "$Revision: 7.41 $"
# 1 "/usr/include/standards.h" 1 3
# 38 "include/syslimits.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 39 "include/syslimits.h" 2 3
# 319 "include/syslimits.h" 3
typedef union _h_val {

        unsigned long i[2];




        double d;
} _h_val;

extern __const _h_val __huge_val;
# 12 "include/limits.h" 2 3
# 146 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2



# 1 "/users/joldham/pooma/dev4/gcc/gcc/hwint.h" 1
# 150 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 168 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/usr/include/sys/time.h" 1 3
# 27 "/usr/include/sys/time.h" 3
#ident "$Revision: 3.55 $"




# 1 "/usr/include/standards.h" 1 3
# 33 "/usr/include/sys/time.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 34 "/usr/include/sys/time.h" 2 3
# 65 "/usr/include/sys/time.h" 3
typedef __int64_t stamp_t;

typedef struct USTMSCpair
{
  stamp_t ust;
  stamp_t msc;
} USTMSCpair;
# 83 "/usr/include/sys/time.h" 3
struct timeval {



        time_t tv_sec;
        long tv_usec;
};






struct __irix5_timeval {
        __int32_t tv_sec;
        __int32_t tv_usec;
};
# 111 "/usr/include/sys/time.h" 3
struct itimerval {
        struct timeval it_interval;
        struct timeval it_value;
};
# 133 "/usr/include/sys/time.h" 3
struct timezone {
        int tz_minuteswest;
        int tz_dsttime;
};
# 153 "/usr/include/sys/time.h" 3
# 1 "/usr/include/sys/timespec.h" 1 3
# 19 "/usr/include/sys/timespec.h" 3
#ident "$Revision: 1.5 $"
# 38 "/usr/include/sys/timespec.h" 3
# 1 "/usr/include/standards.h" 1 3
# 39 "/usr/include/sys/timespec.h" 2 3
# 1 "include/sys/types.h" 1 3
# 40 "/usr/include/sys/timespec.h" 2 3






typedef struct timespec {



        time_t tv_sec;




        long tv_nsec;

} timespec_t;
# 154 "/usr/include/sys/time.h" 2 3






extern int getitimer(int, struct itimerval *);
extern int setitimer(int, const struct itimerval *, struct itimerval *);
extern int utimes(const char *, const struct timeval [2]);




# 1 "/usr/include/sys/select.h" 1 3
# 168 "/usr/include/sys/time.h" 2 3

extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
# 191 "/usr/include/sys/time.h" 3
extern int adjtime(struct timeval *, struct timeval *);
extern int BSDgettimeofday(struct timeval *, struct timezone *);
extern int BSDsettimeofday(struct timeval *, struct timezone *);
extern int utimets(const char *, const struct timespec [2]);


#pragma optional utimets

extern int gettimeofday(struct timeval *,...);
extern int settimeofday(struct timeval *,...);
# 224 "/usr/include/sys/time.h" 3
# 1 "/usr/include/time.h" 1 3





#ident "$Revision: 1.51 $"
# 35 "/usr/include/time.h" 3
# 1 "/usr/include/standards.h" 1 3
# 36 "/usr/include/time.h" 2 3
# 74 "/usr/include/time.h" 3
# 1 "/usr/include/sys/ptimers.h" 1 3
# 22 "/usr/include/sys/ptimers.h" 3
#ident "$Id: ptimers.h,v 1.4 1997/01/15 04:44:41 jwag Exp $"





# 1 "/usr/include/sys/timespec.h" 1 3
# 29 "/usr/include/sys/ptimers.h" 2 3

typedef struct itimerspec {
        timespec_t it_interval;
        timespec_t it_value;
} itimerspec_t;
# 75 "/usr/include/time.h" 2 3
# 106 "/usr/include/time.h" 3
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;
};




extern clock_t clock(void);
extern double difftime(time_t, time_t);
extern time_t mktime(struct tm *);
extern time_t time(time_t *);
extern char *asctime(const struct tm *);
extern char *ctime (const time_t *);
extern struct tm *gmtime(const time_t *);
extern struct tm *localtime(const time_t *);
extern size_t strftime(char *, size_t, const char *, const struct tm *);





extern void tzset(void);
extern char *tzname[2];
# 149 "/usr/include/time.h" 3
# 1 "/usr/include/sys/timespec.h" 1 3
# 150 "/usr/include/time.h" 2 3
struct sigevent;
extern int clock_settime(clockid_t, const timespec_t *);
extern int clock_gettime(clockid_t, timespec_t *);
extern int clock_getres(clockid_t, timespec_t *);
extern int nanosleep(const timespec_t *, timespec_t *);
extern int timer_create(clockid_t, struct sigevent *, timer_t *);
extern int timer_delete(timer_t);
extern int timer_settime(timer_t, int, const struct itimerspec *, struct itimerspec *);
extern int timer_gettime(timer_t, struct itimerspec *);
extern int timer_getoverrun(timer_t);






extern time_t timezone;
extern int daylight;
extern char *strptime(const char *, const char *, struct tm *);






extern struct tm *getdate(const char *);
extern int getdate_err;



extern int cftime(char *, char *, const time_t *);
extern int ascftime(char *, const char *, const struct tm *);
extern time_t altzone;






extern char *asctime_r(const struct tm *, char *);
extern char *ctime_r(const time_t *, char *);
extern struct tm *gmtime_r(const time_t *, struct tm *);
extern struct tm *localtime_r(const time_t *, struct tm *);
# 225 "/usr/include/sys/time.h" 2 3
# 169 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 1 "/usr/include/time.h" 1 3
# 170 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 181 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/usr/include/fcntl.h" 1 3





#ident "$Revision: 1.24 $"
# 32 "/usr/include/fcntl.h" 3
# 1 "include/sys/types.h" 1 3
# 33 "/usr/include/fcntl.h" 2 3
# 1 "/usr/include/sys/fcntl.h" 1 3
# 13 "/usr/include/sys/fcntl.h" 3
#ident "$Revision: 3.74 $"
# 148 "/usr/include/sys/fcntl.h" 3
typedef struct flock {
        short l_type;
        short l_whence;
        off_t l_start;
        off_t l_len;
        long l_sysid;
        pid_t l_pid;
        long l_pad[4];
} flock_t;





typedef struct flock64 {
        short l_type;
        short l_whence;
        off64_t l_start;
        off64_t l_len;
        long l_sysid;
        pid_t l_pid;
        long l_pad[4];
} flock64_t;
# 208 "/usr/include/sys/fcntl.h" 3
struct biosize {
        __uint32_t biosz_flags;
        __int32_t biosz_read;
        __int32_t biosz_write;
        __int32_t dfl_biosz_read;
        __int32_t dfl_biosz_write;
};






struct dioattr {
        unsigned d_mem;
        unsigned d_miniosz;
        unsigned d_maxiosz;
};




struct fsxattr {
        __uint32_t fsx_xflags;
        __uint32_t fsx_extsize;
        __uint32_t fsx_nextents;
        char fsx_pad[16];
};
# 244 "/usr/include/sys/fcntl.h" 3
struct getbmap {
        __int64_t bmv_offset;
        __int64_t bmv_block;
        __int64_t bmv_length;
        __int32_t bmv_count;
        __int32_t bmv_entries;
};
# 260 "/usr/include/sys/fcntl.h" 3
struct getbmapx {
        __int64_t bmv_offset;
        __int64_t bmv_block;
        __int64_t bmv_length;
        __int32_t bmv_count;
        __int32_t bmv_entries;
        __int32_t bmv_iflags;
        __int32_t bmv_oflags;
        __int32_t bmv_unused1;
        __int32_t bmv_unused2;
};
# 307 "/usr/include/sys/fcntl.h" 3
struct fsdmidata {
        __int32_t fsd_dmevmask;
        unsigned short fsd_padding;
        unsigned short fsd_dmstate;
};






typedef struct oplock_stat {
        __int32_t os_state;
        __uint32_t os_dev;
        __uint64_t os_ino;
} oplock_stat_t;
# 34 "/usr/include/fcntl.h" 2 3
# 58 "/usr/include/fcntl.h" 3
extern int fcntl(int, int, ...);
extern int open(const char *, int, ...);
extern int creat(const char *, mode_t);


extern int open64(const char *, int, ...);
extern int creat64(const char *, mode_t);
# 182 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 219 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/usr/include/sys/wait.h" 1 3
# 21 "/usr/include/sys/wait.h" 3
#ident "$Revision: 1.46 $"
# 30 "/usr/include/sys/wait.h" 3
# 1 "/usr/include/standards.h" 1 3
# 31 "/usr/include/sys/wait.h" 2 3
# 47 "/usr/include/sys/wait.h" 3
typedef union wait {
        int w_status;



        struct {







                unsigned int w_Filler:16,
                                w_Retcode:8,
                                w_Coredump:1,
                                w_Termsig:7;

        } w_T;





        struct {






                unsigned int w_Filler:16,
                                w_Stopsig:8,
                                w_Stopval:8;

        } w_S;
} wait_t;
# 147 "/usr/include/sys/wait.h" 3
# 1 "include/sys/types.h" 1 3
# 148 "/usr/include/sys/wait.h" 2 3


# 1 "/usr/include/sys/procset.h" 1 3
# 25 "/usr/include/sys/procset.h" 3
#ident "$Revision: 1.11 $"

# 1 "include/sys/types.h" 1 3
# 28 "/usr/include/sys/procset.h" 2 3
# 46 "/usr/include/sys/procset.h" 3
typedef enum idtype {



        P_PID,
        P_PPID,
        P_PGID,

        P_SID,
        P_CID,
        P_UID,
        P_GID,
        P_ALL
} idtype_t;







typedef enum idop {
        POP_DIFF,


        POP_AND,


        POP_OR,


        POP_XOR


} idop_t;





typedef struct procset {
        idop_t p_op;




        idtype_t p_lidtype;


        id_t p_lid;

        idtype_t p_ridtype;


        id_t p_rid;
} procset_t;
# 151 "/usr/include/sys/wait.h" 2 3
# 1 "/usr/include/sys/signal.h" 1 3
# 152 "/usr/include/sys/wait.h" 2 3
# 1 "/usr/include/sys/siginfo.h" 1 3
# 153 "/usr/include/sys/wait.h" 2 3
# 1 "/usr/include/sys/resource.h" 1 3
# 15 "/usr/include/sys/resource.h" 3
# 1 "/usr/include/standards.h" 1 3
# 16 "/usr/include/sys/resource.h" 2 3
# 1 "/usr/include/sgidefs.h" 1 3
# 17 "/usr/include/sys/resource.h" 2 3
# 1 "include/sys/types.h" 1 3
# 18 "/usr/include/sys/resource.h" 2 3
# 60 "/usr/include/sys/resource.h" 3
struct rusage {
        struct timeval ru_utime;
        struct timeval ru_stime;



        long ru_maxrss;

        long ru_ixrss;
        long ru_idrss;
        long ru_isrss;
        long ru_minflt;
        long ru_majflt;
        long ru_nswap;
        long ru_inblock;
        long ru_oublock;
        long ru_msgsnd;
        long ru_msgrcv;
        long ru_nsignals;
        long ru_nvcsw;
        long ru_nivcsw;


};
# 125 "/usr/include/sys/resource.h" 3
typedef __uint64_t rlim_t;




struct rlimit {
        rlim_t rlim_cur;
        rlim_t rlim_max;
};


typedef __uint64_t rlim64_t;

struct rlimit64 {
        rlim64_t rlim_cur;
        rlim64_t rlim_max;
};
# 170 "/usr/include/sys/resource.h" 3
struct jobrusage {
        rlim_t usage;
        rlim_t high_usage;
};

typedef struct jres_s {
        rlim_t limit_cur;
        rlim_t limit_max;
        rlim_t usage;
        rlim_t high_usage;
} jres_t;

typedef struct job_info_s {
        jid_t job_id;
        __int64_t job_limitflag;
        uid_t job_uid;
        time_t job_start;
        __int64_t fill1[2];
        jres_t job_data[8];
        __int64_t fill2[8];
} job_info_t;
# 252 "/usr/include/sys/resource.h" 3
extern int getrlimit(int, struct rlimit *);
extern int setrlimit(int, const struct rlimit *);
extern int getpriority(int, id_t);
extern int setpriority(int, id_t, int);
extern int getrusage(int, struct rusage *);


extern jid_t getjid(void);
extern int getjlimit(jid_t, int, struct rlimit *);
extern int getjusage(jid_t, int, struct jobrusage *);
extern jid_t jlimit_startjob(char *, uid_t, char *);
extern int killjob(jid_t, int);
extern jid_t makenewjob(jid_t, uid_t);
extern int setjlimit(jid_t, int, struct rlimit *);
extern int setwaitjobpid(jid_t, pid_t);
extern jid_t waitjob(job_info_t *);


#pragma optional getjid
#pragma optional getjlimit
#pragma optional getjusage
#pragma optional jlimit_startjob
#pragma optional killjob
#pragma optional makenewjob
#pragma optional setjlimit
#pragma optional setwaitjobpid
#pragma optional waitjob





extern int getrlimit64(int, struct rlimit64 *);
extern int setrlimit64(int, const struct rlimit64 *);
# 154 "/usr/include/sys/wait.h" 2 3
# 162 "/usr/include/sys/wait.h" 3
extern pid_t waitpid(pid_t, int *, int);





extern pid_t wait(int *);






extern pid_t wait3(int *, int, struct rusage *);

extern int waitid(idtype_t, id_t, siginfo_t *, int);
# 220 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 264 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
extern int getopt (int, char * const *, const char *);
# 280 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/usr/include/malloc.h" 1 3
# 25 "/usr/include/malloc.h" 3
#ident "$Revision: 1.43 $"
# 1 "/usr/include/standards.h" 1 3
# 27 "/usr/include/malloc.h" 2 3
# 60 "/usr/include/malloc.h" 3
# 1 "/usr/include/sgidefs.h" 1 3
# 61 "/usr/include/malloc.h" 2 3
# 1 "include/stddef.h" 1 3
# 62 "/usr/include/malloc.h" 2 3


struct mallinfo {
        __scint_t arena;
        __scint_t ordblks;
        __scint_t smblks;
        __scint_t hblks;
        __scint_t hblkhd;
        __scint_t usmblks;
        __scint_t fsmblks;
        __scint_t uordblks;
        __scint_t fordblks;
        __scint_t keepcost;
};
# 85 "/usr/include/malloc.h" 3
# 1 "/usr/include/ulocks.h" 1 3
# 19 "/usr/include/ulocks.h" 3
#ident "$Revision: 3.55 $ $Author: joecd $"


# 1 "include/sys/types.h" 1 3
# 23 "/usr/include/ulocks.h" 2 3
# 1 "include/stddef.h" 1 3
# 24 "/usr/include/ulocks.h" 2 3
# 1 "include/stdio.h" 1 3
# 25 "/usr/include/ulocks.h" 2 3

# 1 "include/limits.h" 1 3
# 27 "/usr/include/ulocks.h" 2 3
# 112 "/usr/include/ulocks.h" 3
extern int _utrace;
extern int _uerror;




typedef void usptr_t;




typedef struct lockmeter_s {
        int lm_spins;
        int lm_tries;
        int lm_hits;
} lockmeter_t;

typedef struct lockdebug_s {
        pid_t ld_owner_pid;
} lockdebug_t;

typedef void *ulock_t;




typedef void usema_t;


typedef struct hist_s {
        usema_t *h_sem;
        int h_op;
        pid_t h_pid;
        int h_scnt;
        pid_t h_wpid;
        char *h_cpc;
        struct hist_s *h_next;
        struct hist_s *h_last;
} hist_t;

typedef struct histptr_s {
        hist_t *hp_current;
        int hp_entries;
        int hp_errors;
} histptr_t;

typedef struct semameter_s {
        int sm_phits;
        int sm_psemas;
        int sm_vsemas;
        int sm_vnowait;
        int sm_nwait;
        int sm_maxnwait;
} semameter_t;

typedef struct semadebug_s {
        pid_t sd_owner_pid;
        char *sd_owner_pc;
        pid_t sd_last_pid;
        char *sd_last_pc;
} semadebug_t;




typedef struct barrier {
        volatile unsigned char b_inuse;
        unsigned char b_count;
        unsigned char b_waitcnt;
        volatile unsigned char b_spin;
        ulock_t b_plock;
        usptr_t *b_usptr;
} barrier_t;

extern barrier_t *new_barrier(usptr_t *);
extern void init_barrier(barrier_t *);
extern void free_barrier(barrier_t *);
extern void barrier(barrier_t *, unsigned);
# 213 "/usr/include/ulocks.h" 3
extern ptrdiff_t usconfig(int, ...);
extern usptr_t *usinit(const char *);
extern void usdetach(usptr_t *);
extern int usadd(usptr_t *);
extern void usputinfo(usptr_t *, void *);
extern void *usgetinfo(usptr_t *);
extern int uscasinfo(usptr_t *, void *, void *);


extern void *usmalloc(size_t, usptr_t *);
extern void usfree(void *, usptr_t *);
extern void *usrealloc(void *, size_t, usptr_t *);
extern void *usrecalloc(void *, size_t, size_t, usptr_t *);
extern void *uscalloc(size_t, size_t, usptr_t *);
extern struct mallinfo usmallinfo(usptr_t *);
extern int usmallopt(int, int, usptr_t *);
extern size_t usmallocblksize(void *, usptr_t *);
extern void *usmemalign(size_t, size_t, usptr_t *);


extern ulock_t (*_nlock)(usptr_t *);
extern int (*_ilock)(ulock_t);
extern void (*_freelock)(ulock_t, usptr_t *);
extern int (*_wlock)(ulock_t, unsigned);
extern int (*_clock)(ulock_t, unsigned);
extern int (*_lock)(ulock_t);
extern int (*_ulock)(ulock_t);
extern int (*_tlock)(ulock_t);
extern int (*_ctlock)(ulock_t, int, ...);
extern int (*_dlock)(ulock_t, FILE *, const char *);
extern int (*_cas)(void *, ptrdiff_t, ptrdiff_t, usptr_t *);
extern int (*_cas32)(void *, int32_t, int32_t, usptr_t *);


extern usema_t *usnewsema(usptr_t *, int);
extern int usinitsema(usema_t *, int);
extern int uspsema(usema_t *);
extern int usvsema(usema_t *);
extern int uscpsema(usema_t *);
extern void usfreesema(usema_t *, usptr_t *);
extern int ustestsema(usema_t *);
extern int usctlsema(usema_t *, int, ...);
extern int usdumpsema(usema_t *, FILE *, const char *);
extern usema_t *usnewpollsema(usptr_t *, int);
extern int usfreepollsema(usema_t *, usptr_t *);
extern int usopenpollsema(usema_t *, mode_t);
extern int usclosepollsema(usema_t *);
# 295 "/usr/include/ulocks.h" 3
# 1 "/usr/include/task.h" 1 3
# 20 "/usr/include/task.h" 3
#ident "$Revision: 3.38 $"




# 1 "include/sys/types.h" 1 3
# 26 "/usr/include/task.h" 2 3

# 1 "/usr/include/ulocks.h" 1 3
# 28 "/usr/include/task.h" 2 3
# 1 "/usr/include/sys/prctl.h" 1 3
# 23 "/usr/include/sys/prctl.h" 3
#ident "$Revision: 3.72 $"
# 37 "/usr/include/sys/prctl.h" 3
struct prda_sys {
        pid_t t_pid;
        __uint32_t t_hint;

        __uint32_t t_dlactseq;
        __uint32_t t_fpflags;
        __uint32_t t_prid;
        __uint32_t t_dlendseq;
        __uint64_t t_unused1[5];
        pid_t t_rpid;
        __int32_t t_resched;
        __int32_t t_syserror;





        __int32_t t_nid;
        __int32_t t_affinity_nid;


        __uint32_t t_unused[5];





        __uint32_t t_cpu;





        __uint32_t t_flags;
        k_sigset_t t_hold;
};

struct prda {
        char unused[2048];

        union {
                char fill[512];
                uint32_t rsvd[8];
        } sys2_prda;
        union {
                char fill[512];
        } lib2_prda;
        union {
                char fill[512];
        } usr2_prda;

        union {
                char fill[128];
                struct prda_sys prda_sys;
        } sys_prda;
        union {
                char fill[256];
        } lib_prda;
        union {
                char fill[128];
        } usr_prda;
};
# 108 "/usr/include/sys/prctl.h" 3
struct prattach_args_t {
        __int64_t local_vaddr;
        __int64_t vaddr;
        pid_t pid;
        __uint32_t prots;
        __uint32_t flags;
};






struct prattach_results_t {
        __int64_t local_vaddr;
        __int64_t region_base;
        __int64_t region_size;
        __uint32_t prots;
};



typedef struct prthread {
        void (*prt_entry)(void *, size_t);
        caddr_t prt_arg;
        unsigned int prt_flags;
        caddr_t prt_stkptr;
        size_t prt_stklen;
} prthread_t;

typedef struct {
        int prs_priority;
        int prs_policy;
} prsched_t;





# 1 "include/stddef.h" 1 3
# 148 "/usr/include/sys/prctl.h" 2 3
# 1 "include/sys/types.h" 1 3
# 149 "/usr/include/sys/prctl.h" 2 3
int blockproc(pid_t);
int unblockproc(pid_t);
int setblockproccnt(pid_t, int);
int blockprocall(pid_t);
int unblockprocall(pid_t);
int setblockproccntall(pid_t, int);
ptrdiff_t prctl(unsigned, ...);
pid_t sproc(void (*)(void *), unsigned, ...);
pid_t sprocsp(void (*)(void *, size_t), unsigned, void *, caddr_t, size_t);
pid_t
pidsprocsp(void (*)(void *, size_t), unsigned, void *, caddr_t, size_t, pid_t);
pid_t nsproc(void (*)(void *, size_t), unsigned, prthread_t *, prsched_t *);
# 29 "/usr/include/task.h" 2 3






struct prda_lib {
        tid_t t_tid;
        int t_errno;


        int auto_mp_id;
        char *fpe_data_ptr;
        char *pixie_data_ptr;
        int compiler_extra[1];


        void *glx_client;
        void *ogl_context;
        void *ogl_dispatch[7];


        void *speedshop_data_ptr[5];


        int pthread_id;
        int pthread_cancel;
        void *pthread_data[6];
};


extern char __prda_lib_sz[257 - sizeof(struct prda_lib)];
# 71 "/usr/include/task.h" 3
typedef volatile struct tskblk {
        void (*t_entry)(void *);
        void *t_arg;
        tid_t t_tid;
        pid_t t_pid;
        unsigned t_options;
        unsigned t_flags;
        char *t_name;
        struct tskblk *t_link;
} tskblk_t;






extern tskblk_t *_findtask(tid_t, tskblk_t **);




extern tid_t taskcreate(char *, void (*)(void *), void *, int);
extern int taskdestroy(tid_t);
extern int taskctl(tid_t, unsigned, ...);
extern int taskblock(tid_t);
extern int taskunblock(tid_t);
extern int tasksetblockcnt(tid_t, int);


typedef struct tskhdr {
        usptr_t *t_usptr;
        ulock_t t_listlock;
        tskblk_t *t_list;
} tskhdr_t;
extern tskhdr_t _taskheader;






typedef struct mlibhdr {
        ulock_t *m_listlock;
        tid_t m_list[256];
        struct barrier *m_sbar;
        volatile unsigned short m_lcount;
        unsigned short m_pcount;
        ulock_t m_glock;
        unsigned m_gcount;
        ulock_t m_gcountlock;
} mlibhdr_t;

extern int m_fork(void (*)(), ...);
extern int m_park_procs(void);
extern int m_rele_procs(void);
extern void m_sync(void);
extern int m_kill_procs(void);
extern int m_get_myid(void);
extern int m_set_procs(int);
extern int m_get_numprocs(void);
extern unsigned m_next(void);
extern void m_lock(void);
extern void m_unlock(void);
# 296 "/usr/include/ulocks.h" 2 3
# 86 "/usr/include/malloc.h" 2 3

extern int __us_rsthread_malloc;
extern int __libc_lockmalloc(void);
extern int __libc_unlockmalloc(void);





extern void * calloc(size_t, size_t);
extern void * malloc(size_t);
extern void free(void *);
extern void * realloc(void *, size_t);
extern int mallopt(int, int);
extern struct mallinfo mallinfo(void);


extern void *recalloc(void *, size_t, size_t);
extern size_t mallocblksize(void *);
extern void *memalign(size_t, size_t);


extern void * acreate(void *, size_t, int, void *,
                                        void * (*)(size_t, void *));
extern void afree(void *, void *);
extern void *arealloc(void *, size_t, void *);
extern void *arecalloc(void *, size_t, size_t, void *);
extern void *amalloc(size_t, void *);
extern void *acalloc(size_t, size_t, void *);
extern struct mallinfo amallinfo(void *);
extern int amallopt(int, int, void *);
extern void adelete(void *);
extern size_t amallocblksize(void *, void *);
extern void *amemalign(size_t, size_t, void *);
# 281 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 299 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
extern const char *strsignal (int);
# 349 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/usr/include/sys/stat.h" 1 3
# 10 "/usr/include/sys/stat.h" 3
#ident "$Revision: 3.62 $"




# 1 "/usr/include/standards.h" 1 3
# 16 "/usr/include/sys/stat.h" 2 3
# 1 "include/sys/types.h" 1 3
# 17 "/usr/include/sys/stat.h" 2 3
# 1 "/usr/include/sys/timespec.h" 1 3
# 18 "/usr/include/sys/stat.h" 2 3







# 1 "/usr/include/sys/time.h" 1 3
# 26 "/usr/include/sys/stat.h" 2 3
# 36 "/usr/include/sys/stat.h" 3
struct stat {
        dev_t st_dev;
        long st_pad1[3];
        ino_t st_ino;
        mode_t st_mode;
        nlink_t st_nlink;
        uid_t st_uid;
        gid_t st_gid;
        dev_t st_rdev;
        long st_pad2[2];
        off_t st_size;
        long st_pad3;
        timespec_t st_atim;
        timespec_t st_mtim;
        timespec_t st_ctim;
        long st_blksize;

        blkcnt_t st_blocks;
# 67 "/usr/include/sys/stat.h" 3
        char st_fstype[16];
        long st_projid;
        long st_pad4[7];
};





struct stat64 {
        dev_t st_dev;
        long st_pad1[3];
        ino64_t st_ino;
        mode_t st_mode;
        nlink_t st_nlink;
        uid_t st_uid;
        gid_t st_gid;
        dev_t st_rdev;
        long st_pad2[2];
        off64_t st_size;
        long st_pad3;
        timespec_t st_atim;
        timespec_t st_mtim;
        timespec_t st_ctim;
        long st_blksize;
        blkcnt64_t st_blocks;
        char st_fstype[16];
        long st_projid;
        long st_pad4[7];
};
# 187 "/usr/include/sys/stat.h" 3
int _fxstat(const int, int, struct stat *);
int _xstat(const int, const char *, struct stat *);
int _lxstat(const int, const char *, struct stat *);
int _xmknod(const int, const char *, mode_t, dev_t);


int fchmod(int, mode_t);


extern int chmod(const char *, mode_t);
extern int mkdir(const char *, mode_t);
extern int mkfifo(const char *, mode_t);
extern mode_t umask(mode_t);
# 275 "/usr/include/sys/stat.h" 3
int fstat(int, struct stat *);
int stat(const char *, struct stat *);

int lstat(const char *, struct stat *);
int mknod(const char *, mode_t, dev_t);




int fstat64(int, struct stat64 *);
int lstat64(const char *, struct stat64 *);
int stat64(const char *, struct stat64 *);
# 350 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 458 "/users/joldham/pooma/dev4/gcc/gcc/system.h"
# 1 "/users/joldham/pooma/dev4/gcc/include/libiberty.h" 1
# 42 "/users/joldham/pooma/dev4/gcc/include/libiberty.h"
# 1 "/users/joldham/pooma/dev4/gcc/include/ansidecl.h" 1
# 43 "/users/joldham/pooma/dev4/gcc/include/libiberty.h" 2



# 1 "include/stddef.h" 1 3
# 47 "/users/joldham/pooma/dev4/gcc/include/libiberty.h" 2

# 1 "include/stdarg.h" 1 3
# 49 "/users/joldham/pooma/dev4/gcc/include/libiberty.h" 2





extern char **buildargv (char *) __attribute__ ((__malloc__));



extern void freeargv (char **);




extern char **dupargv (char **) __attribute__ ((__malloc__));
# 77 "/users/joldham/pooma/dev4/gcc/include/libiberty.h"
extern char *basename (const char *);
# 86 "/users/joldham/pooma/dev4/gcc/include/libiberty.h"
extern char *lbasename (const char *);




extern char *concat (const char *, ...) __attribute__ ((__malloc__));



extern int fdmatch (int fd1, int fd2);




extern char * getpwd (void);



extern long get_run_time (void);



extern char *choose_temp_base (void) __attribute__ ((__malloc__));



extern char *make_temp_file (const char *) __attribute__ ((__malloc__));



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);
# 151 "/users/joldham/pooma/dev4/gcc/include/libiberty.h"
extern const char *strsigno (int);



extern int strtosigno (const char *);



extern int xatexit (void (*fn) (void));



extern void xexit (int status) __attribute__ ((__noreturn__));



extern void xmalloc_set_program_name (const char *);


extern void xmalloc_failed (size_t) __attribute__ ((__noreturn__));





extern void * xmalloc (size_t) __attribute__ ((__malloc__));





extern void * xrealloc (void *, size_t);




extern void * xcalloc (size_t, size_t) __attribute__ ((__malloc__));



extern char *xstrdup (const char *) __attribute__ ((__malloc__));



extern void * xmemdup (const void *, size_t, size_t) __attribute__ ((__malloc__));





extern char _hex_value[256];
extern void hex_init (void);
# 218 "/users/joldham/pooma/dev4/gcc/include/libiberty.h"
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 *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));




extern int vasprintf (char **, const char *, va_list)
  __attribute__ ((__format__ (__printf__, 2, 0)));
# 244 "/users/joldham/pooma/dev4/gcc/include/libiberty.h"
extern void * C_alloca (size_t);
# 459 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 1 "/users/joldham/pooma/dev4/gcc/include/symcat.h" 1
# 460 "/users/joldham/pooma/dev4/gcc/gcc/system.h" 2
# 55 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h" 1
# 25 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
struct function;

# 1 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h" 1
# 29 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h"
enum machine_mode {
# 1 "/users/joldham/pooma/dev4/gcc/gcc/machmode.def" 1
# 67 "/users/joldham/pooma/dev4/gcc/gcc/machmode.def"
VOIDmode,

BImode,
QImode,
HImode,
SImode,
DImode,
TImode,
OImode,




PQImode,
PHImode,
PSImode,
PDImode,

QFmode,
HFmode,
TQFmode,
SFmode,
DFmode,
XFmode,
TFmode,


QCmode,
HCmode,
SCmode,
DCmode,
XCmode,
TCmode,

CQImode,
CHImode,
CSImode,
CDImode,
CTImode,
COImode,




V2QImode,
V2HImode,
V2SImode,
V2DImode,

V4QImode,
V4HImode,
V4SImode,
V4DImode,

V8QImode,
V8HImode,
V8SImode,
V8DImode,

V16QImode,

V2SFmode,
V2DFmode,

V4SFmode,
V4DFmode,

V8SFmode,
V8DFmode,



BLKmode,
# 148 "/users/joldham/pooma/dev4/gcc/gcc/machmode.def"
CCmode,
# 31 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h" 2
MAX_MACHINE_MODE };
# 41 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h"
extern const char * const mode_name[];


enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
                  MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT,
                  MODE_VECTOR_INT, MODE_VECTOR_FLOAT,
                  MAX_MODE_CLASS};




extern const enum mode_class mode_class[];
# 80 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h"
extern const unsigned int mode_size[];




extern const unsigned int mode_unit_size[];
# 96 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h"
extern const unsigned int mode_bitsize[];
# 106 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h"
extern const unsigned long long mode_mask_array[];
# 117 "/users/joldham/pooma/dev4/gcc/gcc/machmode.h"
extern const unsigned char mode_wider_mode[];






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 get_mode_alignment (enum machine_mode);





extern const enum machine_mode class_narrowest_mode[];





extern enum machine_mode byte_mode;
extern enum machine_mode word_mode;
extern enum machine_mode ptr_mode;
# 28 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h" 2







union tree_node;





enum rtx_code {


# 1 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def" 1
# 70 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
UNKNOWN ,



NIL ,






EXPR_LIST ,



INSN_LIST ,
# 124 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
MATCH_OPERAND ,






MATCH_SCRATCH ,




MATCH_DUP ,







MATCH_OPERATOR ,
# 153 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
MATCH_PARALLEL ,




MATCH_OP_DUP ,




MATCH_PAR_DUP ,




MATCH_INSN ,
# 187 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_INSN ,







DEFINE_PEEPHOLE ,
# 205 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_SPLIT ,
# 232 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_INSN_AND_SPLIT ,



DEFINE_PEEPHOLE2 ,



DEFINE_COMBINE ,
# 252 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_EXPAND ,
# 268 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_DELAY ,
# 309 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_FUNCTION_UNIT ,


DEFINE_ASM_ATTRIBUTES ,
# 325 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_COND_EXEC ,





SEQUENCE ,


ADDRESS ,
# 345 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
DEFINE_ATTR ,


ATTR ,







SET_ATTR ,
# 371 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
SET_ATTR_ALTERNATIVE ,




EQ_ATTR ,
# 386 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
ATTR_FLAG ,
# 399 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
INSN ,



JUMP_INSN ,






CALL_INSN ,


BARRIER ,
# 422 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
CODE_LABEL ,






NOTE ,
# 442 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
COND_EXEC ,


PARALLEL ,







ASM_INPUT ,
# 467 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
ASM_OPERANDS ,
# 478 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
UNSPEC ,


UNSPEC_VOLATILE ,



ADDR_VEC ,
# 510 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
ADDR_DIFF_VEC ,
# 522 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
SET ,




USE ,




CLOBBER ,





CALL ,



RETURN ,





TRAP_IF ,




RESX ,






CONST_INT ,
# 570 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
CONST_DOUBLE ,


CONST_STRING ,





CONST ,



PC ,


VALUE ,
# 595 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
REG ,






SCRATCH ,
# 612 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
SUBREG ,
# 625 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
STRICT_LOW_PART ,





CONCAT ,





MEM ,





LABEL_REF ,





SYMBOL_REF ,






CC0 ,
# 665 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
ADDRESSOF ,
# 683 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
QUEUED ,
# 695 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
IF_THEN_ELSE ,
# 704 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
COND ,


COMPARE ,


PLUS ,


MINUS ,


NEG ,

MULT ,


DIV ,

MOD ,


UDIV ,
UMOD ,


AND ,

IOR ,

XOR ,

NOT ,




ASHIFT ,
ROTATE ,
ASHIFTRT ,
LSHIFTRT ,
ROTATERT ,





SMIN ,
SMAX ,
UMIN ,
UMAX ,
# 763 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
PRE_DEC ,
PRE_INC ,
POST_DEC ,
POST_INC ,
# 780 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
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 ,
# 864 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
SIGN_EXTRACT ,


ZERO_EXTRACT ,




HIGH ,



LO_SUM ,
# 889 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
RANGE_INFO ,
# 904 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
RANGE_REG ,





RANGE_VAR ,



RANGE_LIVE ,




CONSTANT_P_RTX ,
# 940 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
CALL_PLACEHOLDER ,






VEC_MERGE ,





VEC_SELECT ,




VEC_CONCAT ,



VEC_CONST ,





VEC_DUPLICATE ,


SS_PLUS ,


US_PLUS ,


SS_MINUS ,


US_MINUS ,


SS_TRUNCATE ,


US_TRUNCATE ,
# 1000 "/users/joldham/pooma/dev4/gcc/gcc/rtl.def"
PHI ,
# 45 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h" 2


  LAST_AND_UNUSED_RTX_CODE};






extern const int rtx_length[];


extern const char * const rtx_name[];


extern const char * const rtx_format[];


extern const char rtx_class[];




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 union rtunion_def
{
  long long rtwint;
  int rtint;
  unsigned int rtuint;
  const char *rtstr;
  struct rtx_def *rtx;
  struct rtvec_def *rtvec;
  enum machine_mode rttype;
  addr_diff_vec_flags rt_addr_diff_vec_flags;
  struct cselib_val_struct *rt_cselib;
  struct bitmap_head_def *rtbit;
  union tree_node *rttree;
  struct basic_block_def *bb;
} rtunion;



typedef struct rtx_def
{

  enum rtx_code code: 16;


  enum machine_mode mode : 8;




  unsigned int jump : 1;


  unsigned int call : 1;
# 129 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
  unsigned int unchanging : 1;







  unsigned int volatil : 1;
# 155 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
  unsigned int in_struct : 1;






  unsigned int used : 1;




  unsigned integrated : 1;
# 176 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
  unsigned frame_related : 1;




  rtunion fld[1];
} *rtx;
# 202 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
typedef struct rtvec_def{
  int num_elem;
  struct rtx_def *elem[1];
} *rtvec;
# 423 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
enum reg_note
{



  REG_DEAD = 1,


  REG_INC,
# 442 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
  REG_EQUIV,




  REG_EQUAL,





  REG_WAS_0,





  REG_RETVAL,




  REG_LIBCALL,






  REG_NONNEG,



  REG_NO_CONFLICT,


  REG_UNUSED,
# 487 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
  REG_CC_SETTER, REG_CC_USER,




  REG_LABEL,





  REG_DEP_ANTI, REG_DEP_OUTPUT,





  REG_BR_PROB,




  REG_EXEC_COUNT,



  REG_NOALIAS,



  REG_SAVE_AREA,



  REG_BR_PRED,




  REG_FRAME_RELATED_EXPR,




  REG_EH_CONTEXT,





  REG_EH_REGION,




  REG_EH_RETHROW,


  REG_SAVE_NOTE,





  REG_MAYBE_DEAD,


  REG_NORETURN,



  REG_NON_LOCAL_GOTO
};
# 570 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern const char * const reg_note_name[];
# 626 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
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_FUNCTION_END,



  NOTE_INSN_SETJMP,


  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_RANGE_BEG,
  NOTE_INSN_RANGE_END,


  NOTE_INSN_LIVE,


  NOTE_INSN_BASIC_BLOCK,



  NOTE_INSN_EXPECTED_VALUE,

  NOTE_INSN_MAX
};



extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
# 799 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern unsigned int subreg_regno_offset (unsigned int, enum machine_mode, unsigned int, enum machine_mode);



extern unsigned int subreg_regno (rtx);
# 1132 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern int rtx_equal_function_value_matters;


extern int generating_concat_p;




extern int ceil_log2 (unsigned long long);







extern void set_stack_check_libfunc (rtx);
extern long long trunc_int_for_mode (long long, enum machine_mode);

extern rtx plus_constant_wide (rtx, long long);
extern rtx plus_constant_for_output_wide (rtx, long long);
extern void optimize_save_area_alloca (rtx);


extern rtx gen_rtx (enum rtx_code, enum machine_mode, ...);

extern rtvec gen_rtvec (int, ...);


extern rtx rtx_alloc (enum rtx_code);
extern rtvec rtvec_alloc (int);
extern rtx copy_insn_1 (rtx);
extern rtx copy_insn (rtx);


extern rtx copy_rtx (rtx);


extern rtx copy_rtx_if_shared (rtx);


extern rtx copy_most_rtx (rtx, rtx);
extern rtx shallow_copy_rtx (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_label_rtx (void);
extern int subreg_hard_regno (rtx, int);
extern rtx gen_lowpart_common (enum machine_mode, rtx);
extern rtx gen_lowpart (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_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 constant_subword (rtx, 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 void start_sequence (void);
extern void push_to_sequence (rtx);
extern void end_sequence (void);
extern void push_to_full_sequence (rtx, rtx);
extern void end_full_sequence (rtx*, rtx*);
extern rtx gen_sequence (void);


extern rtx immed_double_const (long long, long long, enum machine_mode);
extern rtx force_const_mem (enum machine_mode, rtx);


extern rtx get_pool_constant (rtx);
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 long, int);

extern rtx assign_stack_temp (enum machine_mode, long long, int);

extern rtx assign_temp (union tree_node *, int, int, int);


extern rtx emit_insn_before (rtx, rtx);
extern rtx emit_jump_insn_before (rtx, rtx);
extern rtx emit_call_insn_before (rtx, rtx);
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_jump_insn_after (rtx, rtx);
extern rtx emit_barrier_after (rtx);
extern rtx emit_label_after (rtx, rtx);
extern rtx emit_note_after (int, rtx);
extern rtx emit_line_note_after (const char *, int, rtx);
extern rtx emit_insn (rtx);
extern rtx emit_insns (rtx);
extern rtx emit_insns_before (rtx, rtx);
extern rtx emit_insns_after (rtx, 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_line_note (const char *, int);
extern rtx emit_note (const char *, int);
extern rtx emit_line_note_force (const char *, int);
extern rtx make_insn_raw (rtx);
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 next_cc0_user (rtx);
extern rtx prev_cc0_setter (rtx);


extern rtx next_nondeleted_insn (rtx);
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, int);


extern rtx squeeze_notes (rtx, rtx);
extern rtx delete_insn (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 adj_offsettable_operand (rtx, int);


extern rtx try_split (rtx, rtx, int);


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_relational_operation (enum rtx_code, 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 gen_mem_addressof (rtx, union tree_node *);


extern enum machine_mode choose_hard_reg_mode (unsigned int, unsigned int);



extern void set_unique_reg_note (rtx, enum reg_note, rtx);
# 1361 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern int rtx_addr_can_trap_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 long get_integer_term (rtx);
extern rtx get_related_value (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 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 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 rtx reg_set_last (rtx, rtx);
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 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 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 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_use_as_address (rtx, rtx, long long);
void init_EXPR_INSN_LIST_cache (void);
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);
void clear_log_links (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 rtx get_first_nonparm_insn (void);

extern void split_all_insns (int);


extern rtx const_int_rtx[64 * 2 + 1];





extern rtx const_true_rtx;

extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
# 1491 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
enum global_rtl_index
{
  GR_PC,
  GR_CC0,
  GR_STACK_POINTER,
  GR_FRAME_POINTER,
# 1506 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
  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];
# 1539 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern rtx pic_offset_table_rtx;
extern rtx struct_value_rtx;
extern rtx struct_value_incoming_rtx;
extern rtx static_chain_rtx;
extern rtx static_chain_incoming_rtx;
extern rtx return_address_pointer_rtx;




# 1 "genrtl.h" 1





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_Ess (enum rtx_code, enum machine_mode mode, rtvec arg0, const char *arg1, const char *arg2);


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_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_sse (enum rtx_code, enum machine_mode mode, const char *arg0, const char *arg1, rtx arg2);


extern rtx gen_rtx_fmt_s (enum rtx_code, enum machine_mode mode, const char *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_sE (enum rtx_code, enum machine_mode mode, const char *arg0, rtvec arg1);

extern rtx gen_rtx_fmt_iuueiee (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, rtx arg3, int arg4, rtx arg5, rtx arg6);



extern rtx gen_rtx_fmt_iuueiee0 (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, rtx arg3, int arg4, rtx arg5, rtx arg6);



extern rtx gen_rtx_fmt_iuueieee (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, rtx arg3, int arg4, rtx arg5, rtx arg6, rtx arg7);



extern rtx gen_rtx_fmt_iuu (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2);

extern rtx gen_rtx_fmt_iuu00iss (enum rtx_code, enum machine_mode mode, int arg0, rtx arg1, rtx arg2, int arg3, const char *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_ (enum rtx_code, enum machine_mode mode);
extern rtx gen_rtx_fmt_w (enum rtx_code, enum machine_mode mode, long long arg0);

extern rtx gen_rtx_fmt_e0ww (enum rtx_code, enum machine_mode mode, rtx arg0, long long arg1, long long arg2);


extern rtx gen_rtx_fmt_0 (enum rtx_code, enum machine_mode mode);
extern rtx gen_rtx_fmt_i0 (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_eit (enum rtx_code, enum machine_mode mode, rtx arg0, int arg1, union tree_node *arg2);


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_eee (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1, rtx arg2);

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_uuuu (enum rtx_code, enum machine_mode mode, rtx arg0, rtx arg1, rtx arg2, rtx arg3);
# 1550 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h" 2







extern rtx gen_rtx_CONST_DOUBLE (enum machine_mode, rtx, long long, long long);

extern rtx gen_rtx_CONST_INT (enum machine_mode, long long);
extern rtx gen_raw_REG (enum machine_mode, int);
extern rtx gen_rtx_REG (enum machine_mode, int);
extern rtx gen_rtx_SUBREG (enum machine_mode, rtx, int);
extern rtx gen_rtx_MEM (enum machine_mode, rtx);

extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx);
# 1626 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern rtx find_next_ref (rtx, rtx);

extern rtx output_constant_def (union tree_node *, int);
extern rtx immed_real_const (union tree_node *);
# 1639 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern int flow2_completed;




extern int reload_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);


struct obstack;
extern void gcc_obstack_init (struct obstack *);


struct cse_basic_block_data;
# 1685 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern int rtx_cost (rtx, enum rtx_code);
extern int address_cost (rtx, enum machine_mode);
extern void delete_trivially_dead_insns (rtx, int);

extern int cse_main (rtx, int, int, FILE *);

extern void cse_end_of_basic_block (rtx, struct cse_basic_block_data *, int, int, int);




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 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 int redirect_jump_1 (rtx, rtx);
extern int redirect_jump (rtx, rtx, int);
extern void jump_optimize (rtx, int, int, int);
extern void jump_optimize_minimal (rtx);
extern void rebuild_jump_labels (rtx);
extern void thread_jumps (rtx, int, int);
extern int rtx_equal_for_thread_p (rtx, rtx, rtx);
extern int can_reverse_comparison_p (rtx, 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 never_reached_warning (rtx);
# 1733 "/users/joldham/pooma/dev4/gcc/gcc/rtl.h"
extern int max_reg_num (void);
extern int max_label_num (void);
extern int get_first_label_num (void);
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 reorder_insns (rtx, rtx, rtx);
extern int get_max_uid (void);
extern int in_sequence_p (void);
extern void force_next_line_note (void);
extern void clear_emit_caches (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 int subreg_realpart_p (rtx);
extern void reverse_comparison (rtx);
extern void set_new_first_and_last_insn (rtx, rtx);
extern void set_new_first_and_last_label_num (int, int);
extern void set_new_last_label_num (int);
extern void unshare_all_rtl_again (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 reorder_insns_with_line_notes (rtx, rtx, 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 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 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_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 rtx libcall_other_reg (rtx, rtx);

extern void loop_optimize (rtx, FILE *, int);

extern void record_excess_regs (rtx, rtx, rtx *);


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 preserve_rtl_expr_result (rtx);
extern void mark_temp_addr_taken (rtx);
extern void update_temp_slot_address (rtx, rtx);
extern void purge_addressof (rtx);
extern void purge_hard_subreg_sets (rtx);


extern void set_file_and_line_for_stmt (const char *, int);
extern void expand_null_return (void);
extern void emit_jump (rtx);
extern int preserve_subexpressions_p (void);


extern void move_by_pieces (rtx, rtx, unsigned long long, unsigned int);




extern void recompute_reg_usage (rtx, int);

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 long, rtx, int, int);





extern int gcse_main (rtx, FILE *);



extern void mark_elimination (int, int);

extern int global_alloc (FILE *);
extern void dump_global_regs (FILE *);




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_regs (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 delete_null_pointer_checks (rtx);



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 int function_invariant_p (rtx);


extern void init_branch_prob (const char *);
extern void branch_prob (void);
extern void end_branch_prob (void);
extern void output_func_start_profiler (void);



extern void reg_to_stack (rtx, FILE *);



extern int add_double (unsigned long long, long long, unsigned long long, long long, unsigned long long *, long long *);



extern int neg_double (unsigned long long, long long, unsigned long long *, long long *);


extern int mul_double (unsigned long long, long long, unsigned long long, long long, unsigned long long *, long long *);




extern void lshift_double (unsigned long long, long long, long long, unsigned int, unsigned long long *, long long *, int);



extern void rshift_double (unsigned long long, long long, long long, unsigned int, unsigned long long *, long long *, int);



extern void lrotate_double (unsigned long long, long long, long long, unsigned int, unsigned long long *, long long *);



extern void rrotate_double (unsigned long long, long long, long long, unsigned int, unsigned long long *, long long *);





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
};

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 *)
    __attribute__ ((__noreturn__));



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 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);


typedef enum {
  sibcall_use_normal = 1,
  sibcall_use_tail_recursion,
  sibcall_use_sibcall
} sibcall_use_t;

extern void optimize_sibling_and_tail_recursive_calls (void);
extern void replace_call_placeholder (rtx, sibcall_use_t);






extern rtx stack_limit_rtx;


extern void regrename_optimize (void);


extern void if_convert (int);
# 56 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/errors.h" 1
# 28 "/users/joldham/pooma/dev4/gcc/gcc/errors.h"
extern void warning (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
extern void error (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
extern void fatal (const char *, ...)
    __attribute__ ((__format__ (__printf__, 1, 2))) __attribute__ ((__noreturn__));
extern void internal_error (const char *, ...)
    __attribute__ ((__format__ (__printf__, 1, 2))) __attribute__ ((__noreturn__));
extern const char *trim_filename (const char *);
extern void fancy_abort (const char *, int, const char *)
    __attribute__ ((__noreturn__));

extern int have_error;
extern const char *progname;
# 57 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c" 2
# 1 "/users/joldham/pooma/dev4/gcc/gcc/gensupport.h" 1
# 21 "/users/joldham/pooma/dev4/gcc/gcc/gensupport.h"
struct obstack;
extern struct obstack *rtl_obstack;

extern int init_md_reader (const char *);
extern rtx read_md_rtx (int *, int *);

extern void message_with_line (int, const char *, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));
# 58 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c" 2






static char **insn_name_ptr = 0;
static int insn_name_ptr_size = 0;





struct decision_head
{
  struct decision *first;
  struct decision *last;
};





struct decision_test
{

  struct decision_test *next;


  enum decision_type
    {
      DT_mode, DT_code, DT_veclen,
      DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe,
      DT_veclen_ge, DT_dup, DT_pred, DT_c_test,
      DT_accept_op, DT_accept_insn
    } type;

  union
  {
    enum machine_mode mode;
    enum rtx_code code;

    struct
    {
      const char *name;
      int index;
      enum machine_mode mode;
    } pred;

    const char *c_test;
    int veclen;
    int dup;
    long long intval;
    int opno;

    struct {
      int code_number;
      int lineno;
      int num_clobbers_to_add;
    } insn;
  } u;
};



struct decision
{
  struct decision_head success;
  struct decision *next;
  struct decision *prev;
  struct decision *afterward;


  const char *position;

  struct decision_test *tests;

  int number;
  int subroutine_number;
  int need_label;
};



static int next_subroutine_number;





enum routine_type {
  RECOG, SPLIT, PEEPHOLE2
};





static int next_number;



static int next_insn_code;




static int next_index;




static int max_depth;


static int pattern_lineno;


static int error_count;







static struct pred_table
{
  const char *name;
  enum rtx_code codes[((int)LAST_AND_UNUSED_RTX_CODE)];
} preds[] = {
  {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
                       LABEL_REF, SUBREG, REG, MEM}},

  {"uns_arith_operand", { REG, CONST_INT, SUBREG }}, {"arith_operand", { REG, CONST_INT, SUBREG }}, {"arith32_operand", { REG, CONST_INT, SUBREG }}, {"reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG }}, {"true_reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG }}, {"small_int", { CONST_INT }}, {"large_int", { CONST_INT }}, {"mips_const_double_ok", { CONST_DOUBLE }}, {"const_float_1_operand", { CONST_DOUBLE }}, {"simple_memory_operand", { MEM, SUBREG }}, {"equality_op", { EQ, NE }}, {"cmp_op", { EQ, NE, GT, GE, GTU, GEU, LT, LE, LTU, LEU }}, {"trap_cmp_op", { EQ, NE, GE, GEU, LT, LTU }}, {"pc_or_label_operand", { PC, LABEL_REF }}, {"call_insn_operand", { CONST_INT, CONST, SYMBOL_REF, REG}}, {"move_operand", { CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, {"movdi_operand", { CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM, SIGN_EXTEND }}, {"se_register_operand", { SUBREG, REG, SIGN_EXTEND }}, {"se_reg_or_0_operand", { REG, CONST_INT, CONST_DOUBLE, SUBREG, SIGN_EXTEND }}, {"se_uns_arith_operand", { REG, CONST_INT, SUBREG, SIGN_EXTEND }}, {"se_arith_operand", { REG, CONST_INT, SUBREG, SIGN_EXTEND }}, {"se_nonmemory_operand", { CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, SIGN_EXTEND }}, {"se_nonimmediate_operand", { SUBREG, REG, MEM, SIGN_EXTEND }}, {"consttable_operand", { LABEL_REF, SYMBOL_REF, CONST_INT, CONST_DOUBLE, CONST }}, {"extend_operator", { SIGN_EXTEND, ZERO_EXTEND }}, {"highpart_shift_operator", { ASHIFTRT, LSHIFTRT, ROTATERT, ROTATE }},

  {"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
                       LABEL_REF, SUBREG, REG, MEM, PLUS, MINUS, MULT}},
  {"register_operand", {SUBREG, REG}},
  {"pmode_register_operand", {SUBREG, REG}},
  {"scratch_operand", {SCRATCH, REG}},
  {"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
                         LABEL_REF}},
  {"const_int_operand", {CONST_INT}},
  {"const_double_operand", {CONST_INT, CONST_DOUBLE}},
  {"nonimmediate_operand", {SUBREG, REG, MEM}},
  {"nonmemory_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
                         LABEL_REF, SUBREG, REG}},
  {"push_operand", {MEM}},
  {"pop_operand", {MEM}},
  {"memory_operand", {SUBREG, MEM}},
  {"indirect_operand", {SUBREG, MEM}},
  {"comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU,
                           UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
                           UNLT, LTGT}},
  {"mode_independent_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
                                LABEL_REF, SUBREG, REG, MEM}}
};



static const char * special_mode_pred_table[] = {

  "pc_or_label_operand",

  "pmode_register_operand"
};



static struct decision *new_decision
  (const char *, struct decision_head *);
static struct decision_test *new_decision_test
  (enum decision_type, struct decision_test ***);
static rtx find_operand
  (rtx, int);
static rtx find_matching_operand
  (rtx, int);
static void validate_pattern
  (rtx, rtx, rtx, int);
static struct decision *add_to_sequence
  (rtx, struct decision_head *, const char *, enum routine_type, int);

static int maybe_both_true_2
  (struct decision_test *, struct decision_test *);
static int maybe_both_true_1
  (struct decision_test *, struct decision_test *);
static int maybe_both_true
  (struct decision *, struct decision *, int);

static int nodes_identical_1
  (struct decision_test *, struct decision_test *);
static int nodes_identical
  (struct decision *, struct decision *);
static void merge_accept_insn
  (struct decision *, struct decision *);
static void merge_trees
  (struct decision_head *, struct decision_head *);

static void factor_tests
  (struct decision_head *);
static void simplify_tests
  (struct decision_head *);
static int break_out_subroutines
  (struct decision_head *, int);
static void find_afterward
  (struct decision_head *, struct decision *);

static void change_state
  (const char *, const char *, struct decision *, const char *);
static void print_code
  (enum rtx_code);
static void write_afterward
  (struct decision *, struct decision *, const char *);
static struct decision *write_switch
  (struct decision *, int);
static void write_cond
  (struct decision_test *, int, enum routine_type);
static void write_action
  (struct decision *, struct decision_test *, int, int, struct decision *, enum routine_type);

static int is_unconditional
  (struct decision_test *, enum routine_type);
static int write_node
  (struct decision *, int, enum routine_type);
static void write_tree_1
  (struct decision_head *, int, enum routine_type);
static void write_tree
  (struct decision_head *, const char *, enum routine_type, int);
static void write_subroutine
  (struct decision_head *, enum routine_type);
static void write_subroutines
  (struct decision_head *, enum routine_type);
static void write_header
  (void);

static struct decision_head make_insn_sequence
  (rtx, enum routine_type);
static void process_tree
  (struct decision_head *, enum routine_type);

static void record_insn_name
  (int, const char *);

static void debug_decision_0
  (struct decision *, int, int);
static void debug_decision_1
  (struct decision *, int);
static void debug_decision_2
  (struct decision_test *);
extern void debug_decision
  (struct decision *);
extern void debug_decision_list
  (struct decision *);



static struct decision *
new_decision (position, last)
     const char *position;
     struct decision_head *last;
{
  register struct decision *new
    = (struct decision *) xmalloc (sizeof (struct decision));

  memset (new, 0, sizeof (*new));
  new->success = *last;
  new->position = xstrdup (position);
  new->number = next_number++;

  last->first = last->last = new;
  return new;
}



static struct decision_test *
new_decision_test (type, pplace)
     enum decision_type type;
     struct decision_test ***pplace;
{
  struct decision_test **place = *pplace;
  struct decision_test *test;

  test = (struct decision_test *) xmalloc (sizeof (*test));
  test->next = *place;
  test->type = type;
  *place = test;

  place = &test->next;
  *pplace = place;

  return test;
}



static rtx
find_operand (pattern, n)
     rtx pattern;
     int n;
{
  const char *fmt;
  enum rtx_code code;
  int i, j, len;
  rtx r;

  code = ((enum rtx_code) (pattern)->code);
  if ((code == MATCH_SCRATCH
       || code == MATCH_INSN
       || code == MATCH_OPERAND
       || code == MATCH_OPERATOR
       || code == MATCH_PARALLEL)
      && (((pattern)->fld[0]).rtint) == n)
    return pattern;

  fmt = (rtx_format[(int) (code)]);
  len = (rtx_length[(int) (code)]);
  for (i = 0; i < len; i++)
    {
      switch (fmt[i])
        {
        case 'e': case 'u':
          if ((r = find_operand ((((pattern)->fld[i]).rtx), n)) != (rtx) 0)
            return r;
          break;

        case 'V':
          if (! (((pattern)->fld[i]).rtvec))
            break;


        case 'E':
          for (j = 0; j < (((((pattern)->fld[i]).rtvec))->num_elem); j++)
            if ((r = find_operand ((((((pattern)->fld[i]).rtvec))->elem[j]), n)) != (rtx) 0)
              return r;
          break;

        case 'i': case 'w': case '0': case 's':
          break;

        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 400, __FUNCTION__);
        }
    }

  return ((void *)0);
}




static rtx
find_matching_operand (pattern, n)
     rtx pattern;
     int n;
{
  const char *fmt;
  enum rtx_code code;
  int i, j, len;
  rtx r;

  code = ((enum rtx_code) (pattern)->code);
  if (code == MATCH_OPERAND
      && ((((pattern)->fld[2]).rtstr)[0] == '0' + n
          || ((((pattern)->fld[2]).rtstr)[0] == '%'
              && (((pattern)->fld[2]).rtstr)[1] == '0' + n)))
    return pattern;

  fmt = (rtx_format[(int) (code)]);
  len = (rtx_length[(int) (code)]);
  for (i = 0; i < len; i++)
    {
      switch (fmt[i])
        {
        case 'e': case 'u':
          if ((r = find_matching_operand ((((pattern)->fld[i]).rtx), n)))
            return r;
          break;

        case 'V':
          if (! (((pattern)->fld[i]).rtvec))
            break;


        case 'E':
          for (j = 0; j < (((((pattern)->fld[i]).rtvec))->num_elem); j++)
            if ((r = find_matching_operand ((((((pattern)->fld[i]).rtvec))->elem[j]), n)))
              return r;
          break;

        case 'i': case 'w': case '0': case 's':
          break;

        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 453, __FUNCTION__);
        }
    }

  return ((void *)0);
}






static void
validate_pattern (pattern, insn, set, set_code)
     rtx pattern;
     rtx insn;
     rtx set;
     int set_code;
{
  const char *fmt;
  enum rtx_code code;
  size_t i, len;
  int j;

  code = ((enum rtx_code) (pattern)->code);
  switch (code)
    {
    case MATCH_SCRATCH:
      return;

    case MATCH_INSN:
    case MATCH_OPERAND:
    case MATCH_OPERATOR:
      {
        const char *pred_name = (((pattern)->fld[1]).rtstr);
        int allows_non_lvalue = 1, allows_non_const = 1;
        int special_mode_pred = 0;
        const char *c_test;

        if (((enum rtx_code) (insn)->code) == DEFINE_INSN)
          c_test = (((insn)->fld[2]).rtstr);
        else
          c_test = (((insn)->fld[1]).rtstr);

        if (pred_name[0] != 0)
          {
            for (i = 0; i < (sizeof (preds) / sizeof ((preds)[0])); i++)
              if (! strcmp (preds[i].name, pred_name))
                break;

            if (i < (sizeof (preds) / sizeof ((preds)[0])))
              {
                int j;

                allows_non_lvalue = allows_non_const = 0;
                for (j = 0; preds[i].codes[j] != 0; j++)
                  {
                    enum rtx_code c = preds[i].codes[j];
                    if (c != LABEL_REF
                        && c != SYMBOL_REF
                        && c != CONST_INT
                        && c != CONST_DOUBLE
                        && c != CONST
                        && c != HIGH
                        && c != CONSTANT_P_RTX)
                      allows_non_const = 1;

                    if (c != REG
                        && c != SUBREG
                        && c != MEM
                        && c != CONCAT
                        && c != PARALLEL
                        && c != STRICT_LOW_PART)
                      allows_non_lvalue = 1;
                  }
              }
            else
              {



                message_with_line (pattern_lineno,
                                   "warning: `%s' not in PREDICATE_CODES",
                                   pred_name);

              }

            for (i = 0; i < (sizeof (special_mode_pred_table) / sizeof ((special_mode_pred_table)[0])); ++i)
              if (strcmp (pred_name, special_mode_pred_table[i]) == 0)
                {
                  special_mode_pred = 1;
                  break;
                }
          }


        if (set && code == MATCH_OPERAND
            && (((pattern)->fld[2]).rtstr)[0] != '\0')
          {
            if (set_code == '+')
              {
                if ((((pattern)->fld[2]).rtstr)[0] == '+')
                  ;


                else if ((((pattern)->fld[2]).rtstr)[0] == '='
                         && find_matching_operand (insn, (((pattern)->fld[0]).rtint)))
                  ;
                else
                  {
                    message_with_line (pattern_lineno,
                                       "operand %d missing in-out reload",
                                       (((pattern)->fld[0]).rtint));
                    error_count++;
                  }
              }
            else if ((((pattern)->fld[2]).rtstr)[0] != '='
                     && (((pattern)->fld[2]).rtstr)[0] != '+')
              {
                message_with_line (pattern_lineno,
                                   "operand %d missing output reload",
                                   (((pattern)->fld[0]).rtint));
                error_count++;
              }
          }




        if (set
            && pred_name[0] != '\0'
            && allows_non_lvalue)
          {
            message_with_line (pattern_lineno,
                        "warning: destination operand %d allows non-lvalue",
                        (((pattern)->fld[0]).rtint));
          }
# 599 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
        if (((enum machine_mode) (pattern)->mode) == VOIDmode
            && code == MATCH_OPERAND
            && ((enum rtx_code) (insn)->code) == DEFINE_INSN
            && allows_non_const
            && ! special_mode_pred
            && pred_name[0] != '\0'
            && strcmp (pred_name, "address_operand") != 0
            && strstr (c_test, "operands") == ((void *)0)
            && ! (set
                  && ((enum rtx_code) (set)->code) == SET
                  && ((enum rtx_code) ((((set)->fld[1]).rtx))->code) == CALL))
          {
            message_with_line (pattern_lineno,
                               "warning: operand %d missing mode?",
                               (((pattern)->fld[0]).rtint));
          }
        return;
      }

    case SET:
      {
        enum machine_mode dmode, smode;
        rtx dest, src;

        dest = (((pattern)->fld[0]).rtx);
        src = (((pattern)->fld[1]).rtx);



        if (((enum rtx_code) (dest)->code) == MATCH_DUP
            || ((enum rtx_code) (dest)->code) == MATCH_OP_DUP
            || ((enum rtx_code) (dest)->code) == MATCH_PAR_DUP)
          dest = find_operand (insn, (((dest)->fld[0]).rtint));

        if (((enum rtx_code) (src)->code) == MATCH_DUP
            || ((enum rtx_code) (src)->code) == MATCH_OP_DUP
            || ((enum rtx_code) (src)->code) == MATCH_PAR_DUP)
          src = find_operand (insn, (((src)->fld[0]).rtint));



        if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
          dest = (((dest)->fld[0]).rtx);

        dmode = ((enum machine_mode) (dest)->mode);
        smode = ((enum machine_mode) (src)->mode);



        if (((enum rtx_code) (src)->code) == MATCH_OPERAND
            && ! strcmp ((((src)->fld[1]).rtstr), "address_operand"))
          ;



        else if (dmode != VOIDmode && smode != VOIDmode && dmode != smode)
          {
            message_with_line (pattern_lineno,
                               "mode mismatch in set: %smode vs %smode",
                               (mode_name[(int) (dmode)]), (mode_name[(int) (smode)]));
            error_count++;
          }



        else if (dmode != smode
                 && ((enum rtx_code) (dest)->code) != PC
                 && ((enum rtx_code) (dest)->code) != CC0
                 && ((enum rtx_code) (src)->code) != PC
                 && ((enum rtx_code) (src)->code) != CC0
                 && ((enum rtx_code) (src)->code) != CONST_INT)
          {
            const char *which;
            which = (dmode == VOIDmode ? "destination" : "source");
            message_with_line (pattern_lineno,
                               "warning: %s missing a mode?", which);
          }

        if (dest != (((pattern)->fld[0]).rtx))
          validate_pattern (dest, insn, pattern, '=');
        validate_pattern ((((pattern)->fld[0]).rtx), insn, pattern, '=');
        validate_pattern ((((pattern)->fld[1]).rtx), insn, (rtx) 0, 0);
        return;
      }

    case CLOBBER:
      validate_pattern ((((pattern)->fld[0]).rtx), insn, pattern, '=');
      return;

    case ZERO_EXTRACT:
      validate_pattern ((((pattern)->fld[0]).rtx), insn, set, set ? '+' : 0);
      validate_pattern ((((pattern)->fld[1]).rtx), insn, (rtx) 0, 0);
      validate_pattern ((((pattern)->fld[2]).rtx), insn, (rtx) 0, 0);
      return;

    case STRICT_LOW_PART:
      validate_pattern ((((pattern)->fld[0]).rtx), insn, set, set ? '+' : 0);
      return;

    case LABEL_REF:
      if (((enum machine_mode) ((((pattern)->fld[0]).rtx))->mode) != VOIDmode)
        {
          message_with_line (pattern_lineno,
                             "operand to label_ref %smode not VOIDmode",
                             (mode_name[(int) (((enum machine_mode) ((((pattern)->fld[0]).rtx))->mode))]));
          error_count++;
        }
      break;

    default:
      break;
    }

  fmt = (rtx_format[(int) (code)]);
  len = (rtx_length[(int) (code)]);
  for (i = 0; i < len; i++)
    {
      switch (fmt[i])
        {
        case 'e': case 'u':
          validate_pattern ((((pattern)->fld[i]).rtx), insn, (rtx) 0, 0);
          break;

        case 'E':
          for (j = 0; j < (((((pattern)->fld[i]).rtvec))->num_elem); j++)
            validate_pattern ((((((pattern)->fld[i]).rtvec))->elem[j]), insn, (rtx) 0, 0);
          break;

        case 'i': case 'w': case '0': case 's':
          break;

        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 731, __FUNCTION__);
        }
    }
}
# 748 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
static struct decision *
add_to_sequence (pattern, last, position, insn_type, top)
     rtx pattern;
     struct decision_head *last;
     const char *position;
     enum routine_type insn_type;
     int top;
{
  enum rtx_code code;
  struct decision *this, *sub;
  struct decision_test *test;
  struct decision_test **place;
  char *subpos;
  register size_t i;
  register const char *fmt;
  int depth = strlen (position);
  int len;
  enum machine_mode mode;

  if (depth > max_depth)
    max_depth = depth;

  subpos = (char *) xmalloc (depth + 2);
  strcpy (subpos, position);
  subpos[depth + 1] = 0;

  sub = this = new_decision (position, last);
  place = &this->tests;

 restart:
  mode = ((enum machine_mode) (pattern)->mode);
  code = ((enum rtx_code) (pattern)->code);

  switch (code)
    {
    case PARALLEL:

      if (insn_type == PEEPHOLE2 && top)
        {

          last->first = last->last = ((void *)0);

          for (i = 0; i < (size_t) (((((pattern)->fld[0]).rtvec))->num_elem); i++)
            {



              subpos[depth] = (i > 0 ? 'A' + i : 0);
              sub = add_to_sequence ((((((pattern)->fld[0]).rtvec))->elem[i]),
                                     last, subpos, insn_type, 0);
              last = &sub->success;
            }
          goto ret;
        }


      break;

    case MATCH_PARALLEL:





      test = new_decision_test (DT_veclen_ge, &place);
      test->u.veclen = (((((pattern)->fld[2]).rtvec))->num_elem);


    case MATCH_OPERAND:
    case MATCH_SCRATCH:
    case MATCH_OPERATOR:
    case MATCH_INSN:
      {
        const char *pred_name;
        enum rtx_code was_code = code;
        int allows_const_int = 1;

        if (code == MATCH_SCRATCH)
          {
            pred_name = "scratch_operand";
            code = UNKNOWN;
          }
        else
          {
            pred_name = (((pattern)->fld[1]).rtstr);
            if (code == MATCH_PARALLEL)
              code = PARALLEL;
            else
              code = UNKNOWN;
          }

        if (pred_name[0] != 0)
          {
            test = new_decision_test (DT_pred, &place);
            test->u.pred.name = pred_name;
            test->u.pred.mode = mode;
# 856 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
            for (i = 0; i < (sizeof (preds) / sizeof ((preds)[0])); i++)
              if (! strcmp (preds[i].name, pred_name))
                break;

            if (i < (sizeof (preds) / sizeof ((preds)[0])))
              {
                int j;

                test->u.pred.index = i;

                if (preds[i].codes[1] == 0 && code == UNKNOWN)
                  code = preds[i].codes[0];

                allows_const_int = 0;
                for (j = 0; preds[i].codes[j] != 0; j++)
                  if (preds[i].codes[j] == CONST_INT)
                    {
                      allows_const_int = 1;
                      break;
                    }
              }
            else
              test->u.pred.index = -1;
          }


        if (allows_const_int)
          mode = VOIDmode;


        test = new_decision_test (DT_accept_op, &place);
        test->u.opno = (((pattern)->fld[0]).rtint);

        if (was_code == MATCH_OPERATOR || was_code == MATCH_PARALLEL)
          {
            char base = (was_code == MATCH_OPERATOR ? '0' : 'a');
            for (i = 0; i < (size_t) (((((pattern)->fld[2]).rtvec))->num_elem); i++)
              {
                subpos[depth] = i + base;
                sub = add_to_sequence ((((((pattern)->fld[2]).rtvec))->elem[i]),
                                       &sub->success, subpos, insn_type, 0);
              }
          }
        goto fini;
      }

    case MATCH_OP_DUP:
      code = UNKNOWN;

      test = new_decision_test (DT_dup, &place);
      test->u.dup = (((pattern)->fld[0]).rtint);

      test = new_decision_test (DT_accept_op, &place);
      test->u.opno = (((pattern)->fld[0]).rtint);

      for (i = 0; i < (size_t) (((((pattern)->fld[1]).rtvec))->num_elem); i++)
        {
          subpos[depth] = i + '0';
          sub = add_to_sequence ((((((pattern)->fld[1]).rtvec))->elem[i]),
                                 &sub->success, subpos, insn_type, 0);
        }
      goto fini;

    case MATCH_DUP:
    case MATCH_PAR_DUP:
      code = UNKNOWN;

      test = new_decision_test (DT_dup, &place);
      test->u.dup = (((pattern)->fld[0]).rtint);
      goto fini;

    case ADDRESS:
      pattern = (((pattern)->fld[0]).rtx);
      goto restart;

    default:
      break;
    }

  fmt = (rtx_format[(int) (code)]);
  len = (rtx_length[(int) (code)]);


  for (i = 0; i < (size_t) len; i++)
    {
      if (fmt[i] == 'i')
        {
          if (i == 0)
            {
              test = new_decision_test (DT_elt_zero_int, &place);
              test->u.intval = (((pattern)->fld[i]).rtint);
            }
          else if (i == 1)
            {
              test = new_decision_test (DT_elt_one_int, &place);
              test->u.intval = (((pattern)->fld[i]).rtint);
            }
          else
            fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 954, __FUNCTION__);
        }
      else if (fmt[i] == 'w')
        {


          enum decision_type type
            = ((int) (((pattern)->fld[i]).rtwint) == (((pattern)->fld[i]).rtwint))
              ? DT_elt_zero_wide_safe : DT_elt_zero_wide;

          if (i != 0)
            fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 965, __FUNCTION__);

          test = new_decision_test (type, &place);
          test->u.intval = (((pattern)->fld[i]).rtwint);
        }
      else if (fmt[i] == 'E')
        {
          if (i != 0)
            fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 973, __FUNCTION__);

          test = new_decision_test (DT_veclen, &place);
          test->u.veclen = (((((pattern)->fld[i]).rtvec))->num_elem);
        }
    }


  for (i = 0; i < (size_t) len; i++)
    {
      switch (fmt[i])
        {
        case 'e': case 'u':
          subpos[depth] = '0' + i;
          sub = add_to_sequence ((((pattern)->fld[i]).rtx), &sub->success,
                                 subpos, insn_type, 0);
          break;

        case 'E':
          {
            register int j;
            for (j = 0; j < (((((pattern)->fld[i]).rtvec))->num_elem); j++)
              {
                subpos[depth] = 'a' + j;
                sub = add_to_sequence ((((((pattern)->fld[i]).rtvec))->elem[j]),
                                       &sub->success, subpos, insn_type, 0);
              }
            break;
          }

        case 'i': case 'w':

          break;
        case '0':
          break;

        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1010, __FUNCTION__);
        }
    }

 fini:


  if (code != UNKNOWN)
    {
      place = &this->tests;
      test = new_decision_test (DT_code, &place);
      test->u.code = code;
    }

  if (mode != VOIDmode)
    {
      place = &this->tests;
      test = new_decision_test (DT_mode, &place);
      test->u.mode = mode;
    }


  if (this->tests == ((void *)0))
    fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1033, __FUNCTION__);

 ret:
  free (subpos);
  return sub;
}




static int
maybe_both_true_2 (d1, d2)
     struct decision_test *d1, *d2;
{
  if (d1->type == d2->type)
    {
      switch (d1->type)
        {
        case DT_mode:
          return d1->u.mode == d2->u.mode;

        case DT_code:
          return d1->u.code == d2->u.code;

        case DT_veclen:
          return d1->u.veclen == d2->u.veclen;

        case DT_elt_zero_int:
        case DT_elt_one_int:
        case DT_elt_zero_wide:
        case DT_elt_zero_wide_safe:
          return d1->u.intval == d2->u.intval;

        default:
          break;
        }
    }





  if (d1->type == DT_pred || d2->type == DT_pred)
    {
      if (d2->type == DT_pred)
        {
          struct decision_test *tmp;
          tmp = d1, d1 = d2, d2 = tmp;
        }


      if (d1->u.pred.mode != VOIDmode)
        {
          if (d2->type == DT_mode)
            {
              if (d1->u.pred.mode != d2->u.mode




                  && strcmp (d1->u.pred.name, "address_operand") != 0)
                return 0;
            }




        }

      if (d1->u.pred.index >= 0)
        {


          if (d2->type == DT_code)
            {
              const enum rtx_code *c = &preds[d1->u.pred.index].codes[0];
              while (*c != 0)
                {
                  if (*c == d2->u.code)
                    break;
                  ++c;
                }
              if (*c == 0)
                return 0;
            }


          else if (d2->type == DT_pred && d2->u.pred.index >= 0)
            {
              const enum rtx_code *c1 = &preds[d1->u.pred.index].codes[0];
              int common = 0;

              while (*c1 != 0 && !common)
                {
                  const enum rtx_code *c2 = &preds[d2->u.pred.index].codes[0];
                  while (*c2 != 0 && !common)
                    {
                      common = (*c1 == *c2);
                      ++c2;
                    }
                  ++c1;
                }

              if (!common)
                return 0;
            }
        }
    }


  if (d1->type == DT_veclen && d2->type == DT_veclen_ge)
    return d1->u.veclen >= d2->u.veclen;
  if (d1->type == DT_veclen_ge && d2->type == DT_veclen)
    return d2->u.veclen >= d1->u.veclen;

  return -1;
}




static int
maybe_both_true_1 (d1, d2)
     struct decision_test *d1, *d2;
{
  struct decision_test *t1, *t2;



  if (d1->type == DT_accept_op || d2->type == DT_accept_op)
    return 1;


  while (d1 && d2 && d1->type == d2->type)
    {
      if (maybe_both_true_2 (d1, d2) == 0)
        return 0;
      d1 = d1->next, d2 = d2->next;
    }


  for (t1 = d1; t1 ; t1 = t1->next)
    for (t2 = d2; t2 ; t2 = t2->next)
      if (maybe_both_true_2 (t1, t2) == 0)
        return 0;

  return -1;
}
# 1189 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
static int
maybe_both_true (d1, d2, toplevel)
     struct decision *d1, *d2;
     int toplevel;
{
  struct decision *p1, *p2;
  int cmp;
# 1215 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
  cmp = strcmp (d1->position, d2->position);
  if (cmp != 0)
    {
      if (toplevel)
        fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1219, __FUNCTION__);


      if (cmp > 0)
        p1 = d1, d1 = d2, d2 = p1;

      if (d1->success.first == 0)
        return 1;
      for (p1 = d1->success.first; p1; p1 = p1->next)
        if (maybe_both_true (p1, d2, 0))
          return 1;

      return 0;
    }


  cmp = maybe_both_true_1 (d1->tests, d2->tests);
  if (cmp >= 0)
    return cmp;







  if (toplevel || d1->success.first == 0 || d2->success.first == 0)
    return 1;

  for (p1 = d1->success.first; p1; p1 = p1->next)
    for (p2 = d2->success.first; p2; p2 = p2->next)
      if (maybe_both_true (p1, p2, 0))
        return 1;

  return 0;
}



static int
nodes_identical_1 (d1, d2)
     struct decision_test *d1, *d2;
{
  switch (d1->type)
    {
    case DT_mode:
      return d1->u.mode == d2->u.mode;

    case DT_code:
      return d1->u.code == d2->u.code;

    case DT_pred:
      return (d1->u.pred.mode == d2->u.pred.mode
              && strcmp (d1->u.pred.name, d2->u.pred.name) == 0);

    case DT_c_test:
      return strcmp (d1->u.c_test, d2->u.c_test) == 0;

    case DT_veclen:
    case DT_veclen_ge:
      return d1->u.veclen == d2->u.veclen;

    case DT_dup:
      return d1->u.dup == d2->u.dup;

    case DT_elt_zero_int:
    case DT_elt_one_int:
    case DT_elt_zero_wide:
    case DT_elt_zero_wide_safe:
      return d1->u.intval == d2->u.intval;

    case DT_accept_op:
      return d1->u.opno == d2->u.opno;

    case DT_accept_insn:

      return 1;

    default:
      fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1298, __FUNCTION__);
    }
}





static int
nodes_identical (d1, d2)
     struct decision *d1, *d2;
{
  struct decision_test *t1, *t2;

  for (t1 = d1->tests, t2 = d2->tests; t1 && t2; t1 = t1->next, t2 = t2->next)
    {
      if (t1->type != t2->type)
        return 0;
      if (! nodes_identical_1 (t1, t2))
        return 0;
    }


  if (t1 != t2)
    return 0;





  if (d1->success.first
      && d2->success.first
      && strcmp (d1->success.first->position, d2->success.first->position))
    return 0;

  return 1;
}
# 1343 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
static void
merge_accept_insn (oldd, addd)
     struct decision *oldd, *addd;
{
  struct decision_test *old, *add;

  for (old = oldd->tests; old; old = old->next)
    if (old->type == DT_accept_insn)
      break;
  if (old == ((void *)0))
    return;

  for (add = addd->tests; add; add = add->next)
    if (add->type == DT_accept_insn)
      break;
  if (add == ((void *)0))
    return;




  if (old->u.insn.num_clobbers_to_add == 0
      && add->u.insn.num_clobbers_to_add > 0)
    {

    }
  else if (old->u.insn.num_clobbers_to_add > 0
           && add->u.insn.num_clobbers_to_add == 0)
    {

      old->u.insn = add->u.insn;
    }
  else
    {
      message_with_line (add->u.insn.lineno, "`%s' matches `%s'",
                         get_insn_name (add->u.insn.code_number),
                         get_insn_name (old->u.insn.code_number));
      message_with_line (old->u.insn.lineno, "previous definition of `%s'",
                         get_insn_name (old->u.insn.code_number));
      error_count++;
    }
}



static void
merge_trees (oldh, addh)
     struct decision_head *oldh, *addh;
{
  struct decision *next, *add;

  if (addh->first == 0)
    return;
  if (oldh->first == 0)
    {
      *oldh = *addh;
      return;
    }


  if (strcmp (oldh->first->position, addh->first->position))
    fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1404, __FUNCTION__);

  for (add = addh->first; add ; add = next)
    {
      struct decision *old, *insert_before = ((void *)0);

      next = add->next;
# 1428 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
      for (old = oldh->last; old; old = old->prev)
        {
          if (nodes_identical (old, add))
            {
              merge_accept_insn (old, add);
              merge_trees (&old->success, &add->success);
              goto merged_nodes;
            }

          if (maybe_both_true (old, add, 0))
            break;





          if ((int) add->tests->type < (int) old->tests->type)
            insert_before = old;
        }

      if (insert_before == ((void *)0))
        {
          add->next = ((void *)0);
          add->prev = oldh->last;
          oldh->last->next = add;
          oldh->last = add;
        }
      else
        {
          if ((add->prev = insert_before->prev) != ((void *)0))
            add->prev->next = add;
          else
            oldh->first = add;
          add->next = insert_before;
          insert_before->prev = add;
        }

    merged_nodes:;
    }
}





static void
factor_tests (head)
     struct decision_head *head;
{
  struct decision *first, *next;

  for (first = head->first; first && first->next; first = next)
    {
      enum decision_type type;
      struct decision *new, *old_last;

      type = first->tests->type;
      next = first->next;


      if (next->tests->type != type)
        continue;



      if (type != DT_mode
          && type != DT_code
          && type != DT_veclen
          && type != DT_elt_zero_int
          && type != DT_elt_one_int
          && type != DT_elt_zero_wide_safe)
        continue;



      if (first->tests->next != ((void *)0))
        {
          new = new_decision (first->position, &first->success);
          new->tests = first->tests->next;
          first->tests->next = ((void *)0);
        }


      first->next = ((void *)0);
      old_last = head->last;
      head->last = first;



      do
        {
          struct decision_head h;

          if (next->tests->next != ((void *)0))
            {
              new = new_decision (next->position, &next->success);
              new->tests = next->tests->next;
              next->tests->next = ((void *)0);
            }
          new = next;
          next = next->next;
          new->next = ((void *)0);
          h.first = h.last = new;

          merge_trees (head, &h);
        }
      while (next && next->tests->type == type);



      if (next)
        {
          next->prev = head->last;
          head->last->next = next;
          head->last = old_last;
        }
    }


  for (first = head->first; first; first = first->next)
    factor_tests (&first->success);
}
# 1559 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
static void
simplify_tests (head)
     struct decision_head *head;
{
  struct decision *tree;

  for (tree = head->first; tree; tree = tree->next)
    {
      struct decision_test *a, *b;

      a = tree->tests;
      b = a->next;
      if (b == ((void *)0))
        continue;


      while (b && b->type != DT_pred)
        b = b->next;
      if (b)
        {



          while (a->type == DT_mode || a->type == DT_code)
            a = a->next;
          tree->tests = a;
        }
    }


  for (tree = head->first; tree; tree = tree->next)
    simplify_tests (&tree->success);
}





static int
break_out_subroutines (head, initial)
     struct decision_head *head;
     int initial;
{
  int size = 0;
  struct decision *sub;

  for (sub = head->first; sub; sub = sub->next)
    size += 1 + break_out_subroutines (&sub->success, 0);

  if (size > 100 && ! initial)
    {
      head->first->subroutine_number = ++next_subroutine_number;
      size = 1;
    }
  return size;
}




static void
find_afterward (head, real_afterward)
     struct decision_head *head;
     struct decision *real_afterward;
{
  struct decision *p, *q, *afterward;




  p = head->first;
  afterward = (p->subroutine_number > 0 ? ((void *)0) : real_afterward);

  for ( ; p ; p = p->next)
    {

      for (q = p->next; q ; q = q->next)
        if (maybe_both_true (p, q, 1))
          break;



      if (!q)
        q = afterward;
      p->afterward = q;
      if (q)
        q->need_label = 1;
    }


  for (p = head->first; p ; p = p->next)
    if (p->success.first)
      find_afterward (&p->success, p->afterward);




  p = head->first;
  if (p->subroutine_number > 0)
    p->afterward = real_afterward;
}
# 1668 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
static void
change_state (oldpos, newpos, afterward, indent)
     const char *oldpos;
     const char *newpos;
     struct decision *afterward;
     const char *indent;
{
  int odepth = strlen (oldpos);
  int ndepth = strlen (newpos);
  int depth;
  int old_has_insn, new_has_insn;


  for (depth = odepth; strncmp (oldpos, newpos, depth) != 0; --depth)
    continue;


  for (old_has_insn = odepth - 1; old_has_insn >= 0; --old_has_insn)
    if (oldpos[old_has_insn] >= 'A' && oldpos[old_has_insn] <= 'Z')
      break;
  for (new_has_insn = ndepth - 1; new_has_insn >= 0; --new_has_insn)
    if (newpos[new_has_insn] >= 'A' && newpos[new_has_insn] <= 'Z')
      break;


  while (depth < ndepth)
    {

      if (newpos[depth] >= 'A' && newpos[depth] <= 'Z')
        {

          if (old_has_insn >= 0 && oldpos[old_has_insn] >= newpos[depth])
            {
              printf ("%stem = peep2_next_insn (%d);\n",
                      indent, newpos[depth] - 'A');
            }
          else
            {
              printf ("%stem = peep2_next_insn (%d);\n",
                      indent, newpos[depth] - 'A');
              printf ("%sif (tem == NULL_RTX)\n", indent);
              if (afterward)
                printf ("%s  goto L%d;\n", indent, afterward->number);
              else
                printf ("%s  goto ret0;\n", indent);
            }
          printf ("%sx%d = PATTERN (tem);\n", indent, depth + 1);
        }
      else if (newpos[depth] >= 'a' && newpos[depth] <= 'z')
        printf ("%sx%d = XVECEXP (x%d, 0, %d);\n",
                indent, depth + 1, depth, newpos[depth] - 'a');
      else
        printf ("%sx%d = XEXP (x%d, %c);\n",
                indent, depth + 1, depth, newpos[depth]);
      ++depth;
    }
}




static void
print_code (code)
     enum rtx_code code;
{
  register const char *p;
  for (p = (rtx_name[(int) (code)]); *p; p++)
    (__us_rsthread_stdio ? __semputc((_sch_toupper[(*p) & 0xff]),(&__iob[1])) : (--((&__iob[1]))->_cnt < 0 ? __flsbuf(((_sch_toupper[(*p) & 0xff])), ((&__iob[1]))) : (int)(*((&__iob[1]))->_ptr++ = (unsigned char)((_sch_toupper[(*p) & 0xff])))));
}



static void
write_afterward (start, afterward, indent)
     struct decision *start;
     struct decision *afterward;
     const char *indent;
{
  if (!afterward || start->subroutine_number > 0)
    printf("%sgoto ret0;\n", indent);
  else
    {
      change_state (start->position, afterward->position, ((void *)0), indent);
      printf ("%sgoto L%d;\n", indent, afterward->number);
    }
}




static struct decision *
write_switch (start, depth)
     struct decision *start;
     int depth;
{
  struct decision *p = start;
  enum decision_type type = p->tests->type;
  struct decision *needs_label = ((void *)0);




  if (!p->next
      || p->tests->next
      || p->next->tests->type != type
      || p->next->tests->next
      || nodes_identical_1 (p->tests, p->next->tests))
    return p;



  if (type == DT_code)
    {
      char codemap[((int)LAST_AND_UNUSED_RTX_CODE)];
      struct decision *ret;
      enum rtx_code code;

      memset (codemap, 0, sizeof(codemap));

      printf ("  switch (GET_CODE (x%d))\n    {\n", depth);
      code = p->tests->u.code;
      do
        {
          if (p != start && p->need_label && needs_label == ((void *)0))
            needs_label = p;

          printf ("    case ");
          print_code (code);
          printf (":\n      goto L%d;\n", p->success.first->number);
          p->success.first->need_label = 1;

          codemap[code] = 1;
          p = p->next;
        }
      while (p
             && ! p->tests->next
             && p->tests->type == DT_code
             && ! codemap[code = p->tests->u.code]);
# 1817 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
      if (needs_label != ((void *)0))
        ret = needs_label;
      else
        ret = p;

      while (p && p->tests->type == DT_pred
             && p->tests->u.pred.index >= 0)
        {
          const enum rtx_code *c;

          for (c = &preds[p->tests->u.pred.index].codes[0]; *c ; ++c)
            if (codemap[(int) *c] != 0)
              goto pred_done;

          for (c = &preds[p->tests->u.pred.index].codes[0]; *c ; ++c)
            {
              printf ("    case ");
              print_code (*c);
              printf (":\n");
              codemap[(int) *c] = 1;
            }

          printf ("      goto L%d;\n", p->number);
          p->need_label = 1;
          p = p->next;
        }

    pred_done:


      printf ("    default:\n");
      if (p != ret)
        {
          if (p)
            {
              printf ("      goto L%d;\n", p->number);
              p->need_label = 1;
            }
          else
            write_afterward (start, start->afterward, "      ");
        }
      else
        printf ("     break;\n");
      printf ("   }\n");

      return ret;
    }
  else if (type == DT_mode
           || type == DT_veclen
           || type == DT_elt_zero_int
           || type == DT_elt_one_int
           || type == DT_elt_zero_wide_safe)
    {
      printf ("  switch (");
      switch (type)
        {
        case DT_mode:
          printf ("GET_MODE (x%d)", depth);
          break;
        case DT_veclen:
          printf ("XVECLEN (x%d, 0)", depth);
          break;
        case DT_elt_zero_int:
          printf ("XINT (x%d, 0)", depth);
          break;
        case DT_elt_one_int:
          printf ("XINT (x%d, 1)", depth);
          break;
        case DT_elt_zero_wide_safe:


          printf ("(int) XWINT (x%d, 0)", depth);
          break;
        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1891, __FUNCTION__);
        }
      printf (")\n    {\n");

      do
        {



          struct decision *q;
          for (q = start; q != p; q = q->next)
            if (nodes_identical_1 (p->tests, q->tests))
              goto case_done;

          if (p != start && p->need_label && needs_label == ((void *)0))
            needs_label = p;

          printf ("    case ");
          switch (type)
            {
            case DT_mode:
              printf ("%smode", (mode_name[(int) (p->tests->u.mode)]));
              break;
            case DT_veclen:
              printf ("%d", p->tests->u.veclen);
              break;
            case DT_elt_zero_int:
            case DT_elt_one_int:
            case DT_elt_zero_wide:
            case DT_elt_zero_wide_safe:
              printf ("%lld", p->tests->u.intval);
              break;
            default:
              fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 1924, __FUNCTION__);
            }
          printf (":\n      goto L%d;\n", p->success.first->number);
          p->success.first->need_label = 1;

          p = p->next;
        }
      while (p && p->tests->type == type && !p->tests->next);

    case_done:
      printf ("    default:\n      break;\n    }\n");

      return needs_label != ((void *)0) ? needs_label : p;
    }
  else
    {

      return p;
    }
}



static void
write_cond (p, depth, subroutine_type)
     struct decision_test *p;
     int depth;
     enum routine_type subroutine_type;
{
  switch (p->type)
    {
    case DT_mode:
      printf ("GET_MODE (x%d) == %smode", depth, (mode_name[(int) (p->u.mode)]));
      break;

    case DT_code:
      printf ("GET_CODE (x%d) == ", depth);
      print_code (p->u.code);
      break;

    case DT_veclen:
      printf ("XVECLEN (x%d, 0) == %d", depth, p->u.veclen);
      break;

    case DT_elt_zero_int:
      printf ("XINT (x%d, 0) == %d", depth, (int) p->u.intval);
      break;

    case DT_elt_one_int:
      printf ("XINT (x%d, 1) == %d", depth, (int) p->u.intval);
      break;

    case DT_elt_zero_wide:
    case DT_elt_zero_wide_safe:
      printf ("XWINT (x%d, 0) == ", depth);
      printf ("%lld", p->u.intval);
      break;

    case DT_veclen_ge:
      printf ("XVECLEN (x%d, 0) >= %d", depth, p->u.veclen);
      break;

    case DT_dup:
      printf ("rtx_equal_p (x%d, operands[%d])", depth, p->u.dup);
      break;

    case DT_pred:
      printf ("%s (x%d, %smode)", p->u.pred.name, depth,
              (mode_name[(int) (p->u.pred.mode)]));
      break;

    case DT_c_test:
      printf ("(%s)", p->u.c_test);
      break;

    case DT_accept_insn:
      switch (subroutine_type)
        {
        case RECOG:
          if (p->u.insn.num_clobbers_to_add == 0)
            fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2004, __FUNCTION__);
          printf ("pnum_clobbers != NULL");
          break;

        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2009, __FUNCTION__);
        }
      break;

    default:
      fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2014, __FUNCTION__);
    }
}





static void
write_action (p, test, depth, uncond, success, subroutine_type)
     struct decision *p;
     struct decision_test *test;
     int depth, uncond;
     struct decision *success;
     enum routine_type subroutine_type;
{
  const char *indent;
  int want_close = 0;

  if (uncond)
    indent = "  ";
  else if (test->type == DT_accept_op || test->type == DT_accept_insn)
    {
      fputs ("    {\n", (&__iob[1]));
      indent = "      ";
      want_close = 1;
    }
  else
    indent = "    ";

  if (test->type == DT_accept_op)
    {
      printf("%soperands[%d] = x%d;\n", indent, test->u.opno, depth);


      if (test->next)
        {
          test = test->next;
          if (test->type != DT_accept_insn)
            fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2053, __FUNCTION__);
        }
    }


  if (test->next)
    fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2059, __FUNCTION__);

  if (test->type == DT_accept_insn)
    {
      switch (subroutine_type)
        {
        case RECOG:
          if (test->u.insn.num_clobbers_to_add != 0)
            printf ("%s*pnum_clobbers = %d;\n",
                    indent, test->u.insn.num_clobbers_to_add);
          printf ("%sreturn %d;\n", indent, test->u.insn.code_number);
          break;

        case SPLIT:
          printf ("%sreturn gen_split_%d (operands);\n",
                  indent, test->u.insn.code_number);
          break;

        case PEEPHOLE2:
          {
            int match_len = 0, i;

            for (i = strlen (p->position) - 1; i >= 0; --i)
              if (p->position[i] >= 'A' && p->position[i] <= 'Z')
                {
                  match_len = p->position[i] - 'A';
                  break;
                }
            printf ("%s*_pmatch_len = %d;\n", indent, match_len);
            printf ("%stem = gen_peephole2_%d (insn, operands);\n",
                    indent, test->u.insn.code_number);
            printf ("%sif (tem != 0)\n%s  return tem;\n", indent, indent);
          }
          break;

        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2095, __FUNCTION__);
        }
    }
  else
    {
      printf("%sgoto L%d;\n", indent, success->number);
      success->need_label = 1;
    }

  if (want_close)
    fputs ("    }\n", (&__iob[1]));
}






static int
is_unconditional (t, subroutine_type)
     struct decision_test *t;
     enum routine_type subroutine_type;
{
  if (t->type == DT_accept_op)
    return 1;

  if (t->type == DT_accept_insn)
    {
      switch (subroutine_type)
        {
        case RECOG:
          return (t->u.insn.num_clobbers_to_add == 0);
        case SPLIT:
          return 1;
        case PEEPHOLE2:
          return -1;
        default:
          fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2132, __FUNCTION__);
        }
    }

  return 0;
}




static int
write_node (p, depth, subroutine_type)
     struct decision *p;
     int depth;
     enum routine_type subroutine_type;
{
  struct decision_test *test, *last_test;
  int uncond;

  last_test = test = p->tests;
  uncond = is_unconditional (test, subroutine_type);
  if (uncond == 0)
    {
      printf ("  if (");
      write_cond (test, depth, subroutine_type);

      while ((test = test->next) != ((void *)0))
        {
          int uncond2;

          last_test = test;
          uncond2 = is_unconditional (test, subroutine_type);
          if (uncond2 != 0)
            break;

          printf ("\n      && ");
          write_cond (test, depth, subroutine_type);
        }

      printf (")\n");
    }

  write_action (p, last_test, depth, uncond, p->success.first, subroutine_type);

  return uncond > 0;
}



static void
write_tree_1 (head, depth, subroutine_type)
     struct decision_head *head;
     int depth;
     enum routine_type subroutine_type;
{
  struct decision *p, *next;
  int uncond = 0;

  for (p = head->first; p ; p = next)
    {

      if (p != head->first && p->need_label)
        printf("%sL%d: ATTRIBUTE_UNUSED_LABEL\n", (" "), (p->number));


      next = write_switch (p, depth);
      if (p != next)
        uncond = 0;
      else
        {

          uncond = write_node (p, depth, subroutine_type);
          next = p->next;
        }
    }



  if (! uncond)
    write_afterward (head->last, head->last->afterward, "  ");
}




static void
write_tree (head, prevpos, type, initial)
     struct decision_head *head;
     const char *prevpos;
     enum routine_type type;
     int initial;
{
  register struct decision *p = head->first;

  (__us_rsthread_stdio ? __semputc(('\n'),(&__iob[1])) : (--((&__iob[1]))->_cnt < 0 ? __flsbuf((('\n')), ((&__iob[1]))) : (int)(*((&__iob[1]))->_ptr++ = (unsigned char)(('\n')))));
  if (p->need_label)
    printf("%sL%d: ATTRIBUTE_UNUSED_LABEL\n", (" "), (p->number));

  if (! initial && p->subroutine_number > 0)
    {
      static const char * const name_prefix[] = {
          "recog", "split", "peephole2"
      };

      static const char * const call_suffix[] = {
          ", pnum_clobbers", "", ", _pmatch_len"
      };




      if (p->afterward)
        {
          printf ("  tem = %s_%d (x0, insn%s);\n",
                  name_prefix[type], p->subroutine_number, call_suffix[type]);
          if (((type) != RECOG))
            printf ("  if (tem != 0)\n    return tem;\n");
          else
            printf ("  if (tem >= 0)\n    return tem;\n");

          change_state (p->position, p->afterward->position, ((void *)0), "  ");
          printf ("  goto L%d;\n", p->afterward->number);
        }
      else
        {
          printf ("  return %s_%d (x0, insn%s);\n",
                  name_prefix[type], p->subroutine_number, call_suffix[type]);
        }
    }
  else
    {
      int depth = strlen (p->position);

      change_state (prevpos, p->position, head->last->afterward, "  ");
      write_tree_1 (head, depth, type);

      for (p = head->first; p; p = p->next)
        if (p->success.first)
          write_tree (&p->success, p->position, type, 0);
    }
}




static void
write_subroutine (head, type)
     struct decision_head *head;
     enum routine_type type;
{
  int subfunction = head->first ? head->first->subroutine_number : 0;
  const char *s_or_e;
  char extension[32];
  int i;

  s_or_e = subfunction ? "static " : "";

  if (subfunction)
    sprintf (extension, "_%d", subfunction);
  else if (type == RECOG)
    extension[0] = '\0';
  else
    strcpy (extension, "_insns");

  switch (type)
    {
    case RECOG:
      printf ("%sint recog%s PARAMS ((rtx, rtx, int *));\n", s_or_e, extension);
      printf ("%sint\nrecog%s (x0, insn, pnum_clobbers)\n     register rtx x0;\n     rtx insn ATTRIBUTE_UNUSED;\n     int *pnum_clobbers ATTRIBUTE_UNUSED;\n", s_or_e, extension);




      break;
    case SPLIT:
      printf ("%srtx split%s PARAMS ((rtx, rtx));\n", s_or_e, extension);
      printf ("%srtx\nsplit%s (x0, insn)\n     register rtx x0;\n     rtx insn ATTRIBUTE_UNUSED;\n", s_or_e, extension);



      break;
    case PEEPHOLE2:
      printf ("%srtx peephole2%s PARAMS ((rtx, rtx, int *));\n",
              s_or_e, extension);
      printf ("%srtx\npeephole2%s (x0, insn, _pmatch_len)\n     register rtx x0;\n     rtx insn ATTRIBUTE_UNUSED;\n     int *_pmatch_len ATTRIBUTE_UNUSED;\n", s_or_e, extension);




      break;
    }

  printf ("{\n  register rtx * const operands ATTRIBUTE_UNUSED = &recog_data.operand[0];\n");
  for (i = 1; i <= max_depth; i++)
    printf ("  register rtx x%d ATTRIBUTE_UNUSED;\n", i);

  printf ("  %s tem ATTRIBUTE_UNUSED;\n", ((type) != RECOG) ? "rtx" : "int");

  if (!subfunction)
    printf ("  recog_data.insn = NULL_RTX;\n");

  if (head->first)
    write_tree (head, "", type, 1);
  else
    printf ("  goto ret0;\n");

  printf (" ret0:\n  return %d;\n}\n\n", ((type) != RECOG) ? 0 : -1);
}




static void
write_subroutines (head, type)
     struct decision_head *head;
     enum routine_type type;
{
  struct decision *p;

  for (p = head->first; p ; p = p->next)
    if (p->success.first)
      write_subroutines (&p->success, type);

  if (head->first->subroutine_number > 0)
    write_subroutine (head, type);
}



static void
write_header ()
{
  puts ("/* Generated automatically by the program `genrecog' from the target\n   machine description file.  */\n\n#include \"config.h\"\n#include \"system.h\"\n#include \"rtl.h\"\n#include \"tm_p.h\"\n#include \"function.h\"\n#include \"insn-config.h\"\n#include \"recog.h\"\n#include \"real.h\"\n#include \"output.h\"\n#include \"flags.h\"\n#include \"hard-reg-set.h\"\n#include \"resource.h\"\n#include \"toplev.h\"\n\n");
# 2383 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
  puts ("\n/* `recog' contains a decision tree that recognizes whether the rtx\n   X0 is a valid instruction.\n\n   recog returns -1 if the rtx is not valid.  If the rtx is valid, recog\n   returns a nonnegative number which is the insn code number for the\n   pattern that matched.  This is the same as the order in the machine\n   description of the entry that matched.  This number can be used as an\n   index into `insn_data' and other tables.\n");
# 2392 "/users/joldham/pooma/dev4/gcc/gcc/genrecog.c"
  puts ("   The third argument to recog is an optional pointer to an int.  If\n   present, recog will accept a pattern if it matches except for missing\n   CLOBBER expressions at the end.  In that case, the value pointed to by\n   the optional pointer will be set to the number of CLOBBERs that need\n   to be added (it should be initialized to zero by the caller).  If it");





  puts ("   is set nonzero, the caller should allocate a PARALLEL of the\n   appropriate size, copy the initial entries, and call add_clobbers\n   (found in insn-emit.c) to fill in the CLOBBERs.\n");





  puts ("\n   The function split_insns returns 0 if the rtl could not\n   be split or the split rtl in a SEQUENCE if it can be.\n\n   The function peephole2_insns returns 0 if the rtl could not\n   be matched. If there was a match, the new rtl is returned in a SEQUENCE,\n   and LAST_INSN will point to the last recognized insn in the old sequence.\n*/\n\n");







}







static struct decision_head
make_insn_sequence (insn, type)
     rtx insn;
     enum routine_type type;
{
  rtx x;
  const char *c_test = (((insn)->fld[type == RECOG ? 2 : 1]).rtstr);
  struct decision *last;
  struct decision_test *test, **place;
  struct decision_head head;
  char c_test_pos[2];

  record_insn_name (next_insn_code, (type == RECOG ? (((insn)->fld[0]).rtstr) : ((void *)0)));

  c_test_pos[0] = '\0';
  if (type == PEEPHOLE2)
    {
      int i, j;





      x = rtx_alloc (PARALLEL);
      ((x)->mode = (enum machine_mode) (VOIDmode));
      (((x)->fld[0]).rtvec) = rtvec_alloc ((((((insn)->fld[0]).rtvec))->num_elem));
      for (i = j = 0; i < (((((insn)->fld[0]).rtvec))->num_elem); i++)
        {
          rtx tmp = (((((insn)->fld[0]).rtvec))->elem[i]);
          if (((enum rtx_code) (tmp)->code) != MATCH_SCRATCH && ((enum rtx_code) (tmp)->code) != MATCH_DUP)
            {
              (((((x)->fld[0]).rtvec))->elem[j]) = tmp;
              j++;
            }
        }
      (((((x)->fld[0]).rtvec))->num_elem) = j;

      c_test_pos[0] = 'A' + j - 1;
      c_test_pos[1] = '\0';
    }
  else if ((((((insn)->fld[type == RECOG]).rtvec))->num_elem) == 1)
    x = (((((insn)->fld[type == RECOG]).rtvec))->elem[0]);
  else
    {
      x = rtx_alloc (PARALLEL);
      (((x)->fld[0]).rtvec) = (((insn)->fld[type == RECOG]).rtvec);
      ((x)->mode = (enum machine_mode) (VOIDmode));
    }

  validate_pattern (x, insn, (rtx) 0, 0);

  memset(&head, 0, sizeof(head));
  last = add_to_sequence (x, &head, "", type, 1);


  for (test = last->tests; test->next; test = test->next)
    continue;
  place = &test->next;

  if (c_test[0])
    {

      if (test->type == DT_accept_op)
        {
          last = new_decision (c_test_pos, &last->success);
          place = &last->tests;
        }
      test = new_decision_test (DT_c_test, &place);
      test->u.c_test = c_test;
    }

  test = new_decision_test (DT_accept_insn, &place);
  test->u.insn.code_number = next_insn_code;
  test->u.insn.lineno = pattern_lineno;
  test->u.insn.num_clobbers_to_add = 0;

  switch (type)
    {
    case RECOG:




      if (((enum rtx_code) (x)->code) == PARALLEL)
        {
          int i;


          for (i = (((((x)->fld[0]).rtvec))->num_elem); i > 0; i--)
            {
              rtx y = (((((x)->fld[0]).rtvec))->elem[i - 1]);
              if (((enum rtx_code) (y)->code) != CLOBBER
                  || (((enum rtx_code) ((((y)->fld[0]).rtx))->code) != REG
                      && ((enum rtx_code) ((((y)->fld[0]).rtx))->code) != MATCH_SCRATCH))
                break;
            }

          if (i != (((((x)->fld[0]).rtvec))->num_elem))
            {
              rtx new;
              struct decision_head clobber_head;


              if (i == 1)
                new = (((((x)->fld[0]).rtvec))->elem[0]);
              else
                {
                  int j;

                  new = rtx_alloc (PARALLEL);
                  (((new)->fld[0]).rtvec) = rtvec_alloc (i);
                  for (j = i - 1; j >= 0; j--)
                    (((((new)->fld[0]).rtvec))->elem[j]) = (((((x)->fld[0]).rtvec))->elem[j]);
                }


              memset (&clobber_head, 0, sizeof(clobber_head));
              last = add_to_sequence (new, &clobber_head, "", type, 1);


              for (test = last->tests; test->next; test = test->next)
                continue;



              place = &test->next;
              if (test->type == DT_accept_op)
                {
                  last = new_decision ("", &last->success);
                  place = &last->tests;
                }

              if (c_test[0])
                {
                  test = new_decision_test (DT_c_test, &place);
                  test->u.c_test = c_test;
                }

              test = new_decision_test (DT_accept_insn, &place);
              test->u.insn.code_number = next_insn_code;
              test->u.insn.lineno = pattern_lineno;
              test->u.insn.num_clobbers_to_add = (((((x)->fld[0]).rtvec))->num_elem) - i;

              merge_trees (&head, &clobber_head);
            }
        }
      break;

    case SPLIT:

      printf ("extern rtx gen_split_%d PARAMS ((rtx *));\n", next_insn_code);
      break;

    case PEEPHOLE2:

      printf ("extern rtx gen_peephole2_%d PARAMS ((rtx, rtx *));\n",
              next_insn_code);
      break;
    }

  return head;
}

static void
process_tree (head, subroutine_type)
     struct decision_head *head;
     enum routine_type subroutine_type;
{
  if (head->first == ((void *)0))
    {

      if (subroutine_type == PEEPHOLE2)
        return;
    }
  else
    {
      factor_tests (head);

      next_subroutine_number = 0;
      break_out_subroutines (head, 1);
      find_afterward (head, ((void *)0));




      simplify_tests(head);

      write_subroutines (head, subroutine_type);
    }

  write_subroutine (head, subroutine_type);
}

extern int main (int, char **);

int
main (argc, argv)
     int argc;
     char **argv;
{
  rtx desc;
  struct decision_head recog_tree, split_tree, peephole2_tree, h;

  progname = "genrecog";

  memset (&recog_tree, 0, sizeof recog_tree);
  memset (&split_tree, 0, sizeof split_tree);
  memset (&peephole2_tree, 0, sizeof peephole2_tree);

  if (argc <= 1)
    fatal ("No input file name.");

  if (init_md_reader (argv[1]) != 0)
    return (1);

  next_insn_code = 0;
  next_index = 0;

  write_header ();



  while (1)
    {
      desc = read_md_rtx (&pattern_lineno, &next_insn_code);
      if (desc == ((void *)0))
        break;

      if (((enum rtx_code) (desc)->code) == DEFINE_INSN)
        {
          h = make_insn_sequence (desc, RECOG);
          merge_trees (&recog_tree, &h);
        }
      else if (((enum rtx_code) (desc)->code) == DEFINE_SPLIT)
        {
          h = make_insn_sequence (desc, SPLIT);
          merge_trees (&split_tree, &h);
        }
      else if (((enum rtx_code) (desc)->code) == DEFINE_PEEPHOLE2)
        {
          h = make_insn_sequence (desc, PEEPHOLE2);
          merge_trees (&peephole2_tree, &h);
        }

      next_index++;
    }

  if (error_count)
    return 1;

  puts ("\n\n");

  process_tree (&recog_tree, RECOG);
  process_tree (&split_tree, SPLIT);
  process_tree (&peephole2_tree, PEEPHOLE2);

  fflush ((&__iob[1]));
  return ((((int)((&__iob[1]))->_flag) & 0040) != 0 ? 1 : 0);
}


const char *
get_insn_name (code)
     int code;
{
  if (code < insn_name_ptr_size)
    return insn_name_ptr[code];
  else
    return ((void *)0);
}

static void
record_insn_name (code, name)
     int code;
     const char *name;
{
  static const char *last_real_name = "insn";
  static int last_real_code = 0;
  char *new;

  if (insn_name_ptr_size <= code)
    {
      int new_size;
      new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512);
      insn_name_ptr =
        (char **) xrealloc (insn_name_ptr, sizeof(char *) * new_size);
      memset (insn_name_ptr + insn_name_ptr_size, 0,
              sizeof(char *) * (new_size - insn_name_ptr_size));
      insn_name_ptr_size = new_size;
    }

  if (!name || name[0] == '\0')
    {
      new = xmalloc (strlen (last_real_name) + 10);
      sprintf (new, "%s+%d", last_real_name, code - last_real_code);
    }
  else
    {
      last_real_name = new = xstrdup (name);
      last_real_code = code;
    }

  insn_name_ptr[code] = new;
}

static void
debug_decision_2 (test)
     struct decision_test *test;
{
  switch (test->type)
    {
    case DT_mode:
      fprintf ((&__iob[2]), "mode=%s", (mode_name[(int) (test->u.mode)]));
      break;
    case DT_code:
      fprintf ((&__iob[2]), "code=%s", (rtx_name[(int) (test->u.code)]));
      break;
    case DT_veclen:
      fprintf ((&__iob[2]), "veclen=%d", test->u.veclen);
      break;
    case DT_elt_zero_int:
      fprintf ((&__iob[2]), "elt0_i=%d", (int) test->u.intval);
      break;
    case DT_elt_one_int:
      fprintf ((&__iob[2]), "elt1_i=%d", (int) test->u.intval);
      break;
    case DT_elt_zero_wide:
      fprintf ((&__iob[2]), "elt0_w=");
      fprintf ((&__iob[2]), "%lld", test->u.intval);
      break;
    case DT_elt_zero_wide_safe:
      fprintf ((&__iob[2]), "elt0_ws=");
      fprintf ((&__iob[2]), "%lld", test->u.intval);
      break;
    case DT_veclen_ge:
      fprintf ((&__iob[2]), "veclen>=%d", test->u.veclen);
      break;
    case DT_dup:
      fprintf ((&__iob[2]), "dup=%d", test->u.dup);
      break;
    case DT_pred:
      fprintf ((&__iob[2]), "pred=(%s,%s)",
               test->u.pred.name, (mode_name[(int) (test->u.pred.mode)]));
      break;
    case DT_c_test:
      {
        char sub[16+4];
        strncpy (sub, test->u.c_test, sizeof(sub));
        memcpy (sub+16, "...", 4);
        fprintf ((&__iob[2]), "c_test=\"%s\"", sub);
      }
      break;
    case DT_accept_op:
      fprintf ((&__iob[2]), "A_op=%d", test->u.opno);
      break;
    case DT_accept_insn:
      fprintf ((&__iob[2]), "A_insn=(%d,%d)",
               test->u.insn.code_number, test->u.insn.num_clobbers_to_add);
      break;

    default:
      fancy_abort ("/users/joldham/pooma/dev4/gcc/gcc/genrecog.c", 2781, __FUNCTION__);
    }
}

static void
debug_decision_1 (d, indent)
     struct decision *d;
     int indent;
{
  int i;
  struct decision_test *test;

  if (d == ((void *)0))
    {
      for (i = 0; i < indent; ++i)
        (--((&__iob[2]))->_cnt < 0 ? __flsbuf((' '), ((&__iob[2]))) : (int)(*((&__iob[2]))->_ptr++ = (unsigned char)(' ')));
      fputs ("(nil)\n", (&__iob[2]));
      return;
    }

  for (i = 0; i < indent; ++i)
    (--((&__iob[2]))->_cnt < 0 ? __flsbuf((' '), ((&__iob[2]))) : (int)(*((&__iob[2]))->_ptr++ = (unsigned char)(' ')));

  (--((&__iob[2]))->_cnt < 0 ? __flsbuf(('{'), ((&__iob[2]))) : (int)(*((&__iob[2]))->_ptr++ = (unsigned char)('{')));
  test = d->tests;
  if (test)
    {
      debug_decision_2 (test);
      while ((test = test->next) != ((void *)0))
        {
          fputs (" + ", (&__iob[2]));
          debug_decision_2 (test);
        }
    }
  fprintf ((&__iob[2]), "} %d n %d a %d\n", d->number,
           (d->next ? d->next->number : -1),
           (d->afterward ? d->afterward->number : -1));
}

static void
debug_decision_0 (d, indent, maxdepth)
     struct decision *d;
     int indent, maxdepth;
{
  struct decision *n;
  int i;

  if (maxdepth < 0)
    return;
  if (d == ((void *)0))
    {
      for (i = 0; i < indent; ++i)
        (--((&__iob[2]))->_cnt < 0 ? __flsbuf((' '), ((&__iob[2]))) : (int)(*((&__iob[2]))->_ptr++ = (unsigned char)(' ')));
      fputs ("(nil)\n", (&__iob[2]));
      return;
    }

  debug_decision_1 (d, indent);
  for (n = d->success.first; n ; n = n->next)
    debug_decision_0 (n, indent + 2, maxdepth - 1);
}

void
debug_decision (d)
     struct decision *d;
{
  debug_decision_0 (d, 0, 1000000);
}

void
debug_decision_list (d)
     struct decision *d;
{
  while (d)
    {
      debug_decision_0 (d, 0, 0);
      d = d->next;
    }
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]