⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genattr.i

📁 早期freebsd实现
💻 I
📖 第 1 页 / 共 2 页
字号:
   NEG ,   MULT ,    DIV ,    MOD ,    UDIV ,   UMOD ,    AND ,   IOR ,   XOR ,   NOT ,    LSHIFT ,   ASHIFT ,   ROTATE ,    ASHIFTRT ,   LSHIFTRT ,   ROTATERT ,    SMIN ,   SMAX ,   UMIN ,   UMAX ,    PRE_DEC ,   PRE_INC ,   POST_DEC ,   POST_INC ,    NE ,   EQ ,   GE ,   GT ,   LE ,   LT ,   GEU ,   GTU ,   LEU ,   LTU ,    SIGN_EXTEND ,    ZERO_EXTEND ,    TRUNCATE ,    FLOAT_EXTEND ,   FLOAT_TRUNCATE ,    FLOAT ,    FIX ,    UNSIGNED_FLOAT ,    UNSIGNED_FIX ,    ABS ,    SQRT ,    FFS ,    SIGN_EXTRACT ,    ZERO_EXTRACT ,     HIGH ,    LO_SUM ,  # 32 "rtl.h" 2  LAST_AND_UNUSED_RTX_CODE};	 				 extern int rtx_length[];extern char *rtx_name[];extern char *rtx_format[];extern char rtx_class[]; typedef union rtunion_def{  int  rtwint;  int rtint;  char *rtstr;  struct rtx_def *rtx;  struct rtvec_def *rtvec;  enum machine_mode rttype;} rtunion; typedef struct rtx_def{     enum rtx_code code : 16;     enum machine_mode mode : 8;     unsigned int jump : 1;     unsigned int call : 1;     unsigned int unchanging : 1;     unsigned int volatil : 1;     unsigned int in_struct : 1;     unsigned int used : 1;     unsigned integrated : 1;     rtunion fld[1];} *rtx;    typedef struct rtvec_def{  unsigned num_elem;		   rtunion elem[1];} *rtvec;               enum reg_note { REG_DEAD = 1, REG_INC = 2, REG_EQUIV = 3, REG_WAS_0 = 4,		REG_EQUAL = 5, REG_RETVAL = 6, REG_LIBCALL = 7,		REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,		REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,		REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 };  extern char *reg_note_name[];               extern char *note_insn_name[];                                    extern rtx plus_constant_wide		 (rtx, int ) ;extern rtx plus_constant_for_output_wide (rtx, int ) ;# 631 "rtl.h"extern rtx gen_rtx ();extern rtvec gen_rtvec ();extern rtx read_rtx			(FILE *) ;extern char *xrealloc ();extern char *xmalloc			(unsigned) ;extern char *oballoc			(int) ;extern char *permalloc			(int) ;extern void free			(void *) ;extern rtx rtx_alloc			(enum rtx_code ) ;extern rtvec rtvec_alloc		(int) ;extern rtx find_reg_note		(rtx, enum reg_note, rtx) ;extern rtx find_regno_note		(rtx, enum reg_note, int) ;extern int  get_integer_term	(rtx) ;extern rtx get_related_value		(rtx) ;extern rtx single_set			(rtx) ;extern rtx find_last_value		(rtx, rtx *, rtx) ;extern rtx copy_rtx			(rtx) ;extern rtx copy_rtx_if_shared		(rtx) ;extern rtx copy_most_rtx		(rtx, rtx) ;extern rtx replace_rtx			(rtx, rtx, rtx) ;extern rtvec gen_rtvec_v		(int, rtx *) ;extern rtx gen_reg_rtx			(enum machine_mode) ;extern rtx gen_label_rtx		(void) ;extern rtx gen_inline_header_rtx	(rtx, rtx, int, int, int, int, int, int, rtx, int, int, rtvec, rtx) ;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, int, int, enum machine_mode) ;extern rtx operand_subword_force	(rtx, int, enum machine_mode) ;extern int subreg_lowpart_p		(rtx) ;extern rtx make_safe_from		(rtx, rtx) ;extern rtx memory_address		(enum machine_mode, rtx) ;extern rtx get_insns			(void) ;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 rtx gen_sequence			(void) ;extern rtx immed_double_const		(int , int , enum machine_mode) ;extern rtx force_const_mem		(enum machine_mode, rtx) ;extern rtx force_reg			(enum machine_mode, rtx) ;extern rtx get_pool_constant		(rtx) ;extern enum machine_mode get_pool_mode	(rtx) ;extern int get_pool_offset		(rtx) ;extern rtx simplify_subtraction		(rtx) ;extern rtx assign_stack_local		(enum machine_mode, int, int) ;extern rtx assign_stack_temp		(enum machine_mode, int, int) ;extern rtx protect_from_queue		(rtx, int) ;extern void emit_queue			(void) ;extern rtx emit_move_insn		(rtx, rtx) ;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_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		(char *, int, rtx) ;extern rtx emit_insn			(rtx) ;extern rtx emit_insns			(rtx) ;extern rtx emit_insns_before		(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		(char *, int) ;extern rtx emit_note			(char *, int) ;extern rtx emit_line_note_force		(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 rtx prev_label			(rtx) ;extern rtx next_label			(rtx) ;extern rtx next_cc0_user		(rtx) ;extern rtx prev_cc0_setter		(rtx) ;extern rtx reg_set_last			(rtx, rtx) ;extern rtx next_nondeleted_insn		(rtx) ;extern enum rtx_code reverse_condition	(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 rtx find_equiv_reg		(rtx, rtx, enum reg_class, int, short *, int, enum machine_mode) ;extern rtx squeeze_notes		(rtx, rtx) ;extern rtx delete_insn			(rtx) ;extern void delete_jump			(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 nonlocal_label_rtx_list	(void) ;extern rtx gen_move_insn		(rtx, rtx) ;extern rtx gen_jump			(rtx) ;extern rtx gen_beq			(rtx) ;extern rtx gen_bge			(rtx) ;extern rtx gen_ble			(rtx) ;extern rtx eliminate_constant_term	(rtx, rtx *) ;extern rtx expand_complex_abs		(enum machine_mode, rtx, rtx, int) ; extern int max_parallel;extern int asm_noperands		(rtx) ;extern char *decode_asm_operands	(rtx, rtx *, rtx **, 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 rtx pc_rtx;extern rtx cc0_rtx;extern rtx const0_rtx;extern rtx const1_rtx;extern rtx const2_rtx;extern rtx constm1_rtx;extern rtx const_true_rtx;extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];   extern rtx stack_pointer_rtx;extern rtx frame_pointer_rtx;extern rtx arg_pointer_rtx;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 virtual_incoming_args_rtx; extern rtx virtual_stack_vars_rtx; extern rtx virtual_stack_dynamic_rtx; extern rtx virtual_outgoing_args_rtx;extern rtx find_next_ref		(rtx, rtx) ;extern rtx *find_single_use		(rtx, rtx, rtx *) ; extern rtx expand_expr ();extern rtx immed_real_const_1();extern rtx output_constant_def ();extern rtx immed_real_const ();extern rtx immed_real_const_1 ();  extern int reload_completed; extern int reload_in_progress; extern int cse_not_expected; extern rtx *regno_reg_rtx;# 24 "genattr.c" 2# 1 "obstack.h" 1     # 133 "obstack.h"# 1 "/usr/include/stddef.h" 1 # 1 "/usr/include/machine/ansi.h" 1 # 58 "/usr/include/machine/ansi.h"# 39 "/usr/include/stddef.h" 2typedef	int				ptrdiff_t;typedef	unsigned short			wchar_t;# 134 "obstack.h" 2struct _obstack_chunk		 {  char  *limit;			   struct _obstack_chunk *prev;	   char	contents[4];		 };struct obstack		 {  long	chunk_size;		   struct _obstack_chunk* chunk;	   char	*object_base;		   char	*next_free;		   char	*chunk_limit;		   ptrdiff_t  temp;		   int   alignment_mask;		   struct _obstack_chunk *(*chunkfun) ();    void (*freefun) ();		   char *extra_arg;		   unsigned use_extra_arg:1;	   unsigned maybe_empty_object:1; }; extern void _obstack_newchunk (struct obstack *, int);extern void _obstack_free (struct obstack *, void *);extern void _obstack_begin (struct obstack *, int, int,			    void *(*) (), void (*) ());extern void _obstack_begin_1 (struct obstack *, int, int,			      void *(*) (), void (*) (), void *); void obstack_init (struct obstack *obstack);void * obstack_alloc (struct obstack *obstack, int size);void * obstack_copy (struct obstack *obstack, void *address, int size);void * obstack_copy0 (struct obstack *obstack, void *address, int size);void obstack_free (struct obstack *obstack, void *block);void obstack_blank (struct obstack *obstack, int size);void obstack_grow (struct obstack *obstack, void *data, int size);void obstack_grow0 (struct obstack *obstack, void *data, int size);void obstack_1grow (struct obstack *obstack, int data_char);void obstack_ptr_grow (struct obstack *obstack, void *data);void obstack_int_grow (struct obstack *obstack, int data);void * obstack_finish (struct obstack *obstack);int obstack_object_size (struct obstack *obstack);int obstack_room (struct obstack *obstack);void obstack_1grow_fast (struct obstack *obstack, int data_char);void obstack_ptr_grow_fast (struct obstack *obstack, void *data);void obstack_int_grow_fast (struct obstack *obstack, int data);void obstack_blank_fast (struct obstack *obstack, int size);void * obstack_base (struct obstack *obstack);void * obstack_next_free (struct obstack *obstack);int obstack_alignment_mask (struct obstack *obstack);int obstack_chunk_size (struct obstack *obstack);       # 301 "obstack.h"# 312 "obstack.h"     # 387 "obstack.h"# 482 "obstack.h"# 25 "genattr.c" 2static struct obstack obstack;struct obstack *rtl_obstack = &obstack;extern void free ();extern int atoi ();extern rtx read_rtx ();char *xmalloc ();static void fatal ();void fancy_abort (); struct range{  int min;  int max;}; struct function_unit{  char *name;			   struct function_unit *next;	   int multiplicity;		   int simultaneity;		   struct range ready_cost;	   struct range issue_delay;	 };static voidextend_range (range, min, max)     struct range *range;     int min;     int max;{  if (range->min > min) range->min = min;  if (range->max < max) range->max = max;}static voidinit_range (range)     struct range *range;{  range->min = 100000;  range->max = -1;}static voidwrite_upcase (str)    char *str;{  for (; *str; str++)    if (*str >= 'a' && *str <= 'z')      printf ("%c", *str - 'a' + 'A');    else      printf ("%c", *str);}static voidgen_attr (attr)     rtx attr;{  char *p;  printf ("#define HAVE_ATTR_%s\n", ((attr)->fld[ 0].rtstr) );     if (*((attr)->fld[ 1].rtstr)  == '\0')    printf ("extern int get_attr_%s ();\n", ((attr)->fld[ 0].rtstr) );  else    {      printf ("enum attr_%s {", ((attr)->fld[ 0].rtstr) );      write_upcase (((attr)->fld[ 0].rtstr) );      printf ("_");      for (p = ((attr)->fld[ 1].rtstr) ; *p != '\0'; p++)	{	  if (*p == ',')	    {	      printf (", ");	      write_upcase (((attr)->fld[ 0].rtstr) );	      printf ("_");	    }	  else if (*p >= 'a' && *p <= 'z')	    printf ("%c", *p - 'a' + 'A');	  else	    printf ("%c", *p);	}      printf ("};\n");      printf ("extern enum attr_%s get_attr_%s ();\n\n",	      ((attr)->fld[ 0].rtstr) , ((attr)->fld[ 0].rtstr) );    }     if (! strcmp (((attr)->fld[ 0].rtstr) , "length"))    {      printf ("extern void init_lengths ();\n");      printf ("extern void shorten_branches ();\n");      printf ("extern int insn_default_length ();\n");      printf ("extern int insn_variable_length_p ();\n");      printf ("extern int insn_current_length ();\n\n");      printf ("extern int *insn_addresses;\n");      printf ("extern int insn_current_address;\n\n");    }}static voidwrite_units (num_units, multiplicity, simultaneity,	     ready_cost, issue_delay, blockage)     int num_units;     struct range *multiplicity;     struct range *simultaneity;     struct range *ready_cost;     struct range *issue_delay;     struct range *blockage;{  int i, q_size;  printf ("#define INSN_SCHEDULING\n\n");  printf ("extern int result_ready_cost ();\n");  printf ("extern int function_units_used ();\n\n");  printf ("extern struct function_unit_desc\n");  printf ("{\n");  printf ("  char *name;\n");  printf ("  int bitmask;\n");  printf ("  int multiplicity;\n");  printf ("  int simultaneity;\n");  printf ("  int default_cost;\n");  printf ("  int max_issue_delay;\n");  printf ("  int (*ready_cost_function) ();\n");  printf ("  int (*conflict_cost_function) ();\n");  printf ("  int max_blockage;\n");  printf ("  unsigned int (*blockage_range_function) ();\n");  printf ("  int (*blockage_function) ();\n");  printf ("} function_units[];\n\n");  printf ("#define FUNCTION_UNITS_SIZE %d\n", num_units);  printf ("#define MIN_MULTIPLICITY %d\n", multiplicity->min);  printf ("#define MAX_MULTIPLICITY %d\n", multiplicity->max);  printf ("#define MIN_SIMULTANEITY %d\n", simultaneity->min);  printf ("#define MAX_SIMULTANEITY %d\n", simultaneity->max);  printf ("#define MIN_READY_COST %d\n", ready_cost->min);  printf ("#define MAX_READY_COST %d\n", ready_cost->max);  printf ("#define MIN_ISSUE_DELAY %d\n", issue_delay->min);  printf ("#define MAX_ISSUE_DELAY %d\n", issue_delay->max);  printf ("#define MIN_BLOCKAGE %d\n", blockage->min);  printf ("#define MAX_BLOCKAGE %d\n", blockage->max);  for (i = 0; (1 << i) < blockage->max; i++)    ;  printf ("#define BLOCKAGE_BITS %d\n", i + 1);     i = ((blockage->max) > ( ready_cost->max) ? (blockage->max) : ( ready_cost->max)) ;  for (q_size = 1; q_size <= i; q_size <<= 1)    ;  printf ("#define INSN_QUEUE_SIZE %d\n", q_size);}char *xmalloc (size)     unsigned size;{  register char *val = (char *) malloc (size);  if (val == 0)    fatal ("virtual memory exhausted");  return val;}char *xrealloc (ptr, size)     char *ptr;     unsigned size;{  char * result = (char *) realloc (ptr, size);  if (!result)    fatal ("virtual memory exhausted");  return result;}static voidfatal (s, a1, a2)     char *s;{  fprintf ((&__sF[2]) , "genattr: ");  fprintf ((&__sF[2]) , s, a1, a2);  fprintf ((&__sF[2]) , "\n");  exit (33 );} voidfancy_abort (){  fatal ("Internal gcc abort.");}intmain (argc, argv)     int argc;     char **argv;{  rtx desc;  FILE *infile;  register int c;  int have_delay = 0;  int have_annul_true = 0;  int have_annul_false = 0;  int num_units = 0;  struct range all_simultaneity, all_multiplicity;  struct range all_ready_cost, all_issue_delay, all_blockage;  struct function_unit *units = 0, *unit;  int i;  init_range (&all_multiplicity);  init_range (&all_simultaneity);  init_range (&all_ready_cost);  init_range (&all_issue_delay);  init_range (&all_blockage);  _obstack_begin ((rtl_obstack), 0, 0, (void *(*) ()) xmalloc , (void (*) ()) free ) ;  if (argc <= 1)    fatal ("No input file name.");  infile = fopen (argv[1], "r");  if (infile == 0)    {      perror (argv[1]);      exit (33 );    }  init_rtl ();  printf ("/* Generated automatically by the program `genattr'\nfrom the machine description file `md'.  */\n\n");     printf ("#define HAVE_ATTR_alternative\n");  printf ("#define get_attr_alternative(insn) which_alternative\n");          while (1)    {      c = read_skip_spaces (infile);      if (c == (-1) )	break;      ungetc (c, infile);      desc = read_rtx (infile);      if (	((desc)->code)  == DEFINE_ATTR)	gen_attr (desc);      else if (	((desc)->code)  == DEFINE_DELAY)        {	  if (! have_delay)	    {	      printf ("#define DELAY_SLOTS\n");	      printf ("extern int num_delay_slots ();\n");	      printf ("extern int eligible_for_delay ();\n\n");	      printf ("extern int const_num_delay_slots ();\n\n");	      have_delay = 1;	    }	  for (i = 0; i < ((desc)->fld[ 1].rtvec->num_elem) ; i += 3)	    {	      if (((desc)->fld[ 1].rtvec->elem[ i + 1].rtx)  && ! have_annul_true)		{		  printf ("#define ANNUL_IFTRUE_SLOTS\n");		  printf ("extern int eligible_for_annul_true ();\n");		  have_annul_true = 1;		}	      if (((desc)->fld[ 1].rtvec->elem[ i + 2].rtx)  && ! have_annul_false)		{		  printf ("#define ANNUL_IFFALSE_SLOTS\n");		  printf ("extern int eligible_for_annul_false ();\n");		  have_annul_false = 1;		}	    }        }      else if (	((desc)->code)  == DEFINE_FUNCTION_UNIT)	{	  char *name = ((desc)->fld[ 0].rtstr) ;	  int multiplicity = ((desc)->fld[ 1].rtint) ;	  int simultaneity = ((desc)->fld[ 2].rtint) ;	  int ready_cost = ((((desc)->fld[ 4].rtint) ) > ( 1) ? (((desc)->fld[ 4].rtint) ) : ( 1)) ;	  int issue_delay = ((((desc)->fld[ 5].rtint) ) > ( 1) ? (((desc)->fld[ 5].rtint) ) : ( 1)) ;	  int issueexp_p = (((desc)->fld[ 6].rtvec)  != 0);	  for (unit = units; unit; unit = unit->next)	    if (strcmp (unit->name, name) == 0)	      break;	  if (unit == 0)	    {	      int len = strlen (name) + 1;	      unit = (struct function_unit *)		__builtin_alloca(sizeof (struct function_unit)) ;	      unit->name = (char *) __builtin_alloca(len) ;	      bcopy (name, unit->name, len);	      unit->multiplicity = multiplicity;	      unit->simultaneity = simultaneity;	      unit->ready_cost.min = unit->ready_cost.max = ready_cost;	      unit->issue_delay.min = unit->issue_delay.max = issue_delay;	      unit->next = units;	      units = unit;	      num_units++;	      extend_range (&all_multiplicity, multiplicity, multiplicity);	      extend_range (&all_simultaneity, simultaneity, simultaneity);	    }	  else if (unit->multiplicity != multiplicity		   || unit->simultaneity != simultaneity)	    fatal ("Differing specifications given for `%s' function unit.",		   unit->name);	  extend_range (&unit->ready_cost, ready_cost, ready_cost);	  extend_range (&unit->issue_delay,			issueexp_p ? 1 : issue_delay, issue_delay);	  extend_range (&all_ready_cost,			unit->ready_cost.min, unit->ready_cost.max);	  extend_range (&all_issue_delay,			unit->issue_delay.min, unit->issue_delay.max);	}    }  if (num_units > 0)    {             for (unit = units; unit; unit = unit->next)	{	  struct range blockage;	  int max_issue_time = ((unit->issue_delay.max) > ( 1) ? (unit->issue_delay.max) : ( 1)) ;	  blockage = unit->issue_delay;	  blockage.max = ((unit->ready_cost.max			      - (unit->ready_cost.min - 1)) > (			      blockage.max) ? (unit->ready_cost.max			      - (unit->ready_cost.min - 1)) : (			      blockage.max)) ;# 392 "genattr.c"	  blockage.min = ((1) > ( blockage.min) ? (1) : ( blockage.min)) ;	  if (unit->simultaneity != 0)	    {	      int fill_time = ((unit->simultaneity - 1)			       * unit->issue_delay.min);	      blockage.min = ((unit->ready_cost.min - fill_time) > (				  blockage.min) ? (unit->ready_cost.min - fill_time) : (				  blockage.min)) ;# 400 "genattr.c"	      blockage.max = ((unit->ready_cost.max - fill_time) > (				  blockage.max) ? (unit->ready_cost.max - fill_time) : (				  blockage.max)) ;# 402 "genattr.c"	    }	  extend_range (&all_blockage, blockage.min, blockage.max);	}      write_units (num_units, &all_multiplicity, &all_simultaneity,		   &all_ready_cost, &all_issue_delay, &all_blockage);    }  fflush ((&__sF[1]) );  exit (((((&__sF[1]) )->_flags & 0x0040		) != 0)   != 0 ? 33  : 0 );     return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -