• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2013.11/lib/gcc/arm-none-eabi/4.8.1/plugin/include/
1/* Data structure definitions for a generic GCC target.
2   Copyright (C) 2001-2013 Free Software Foundation, Inc.
3
4   This program is free software; you can redistribute it and/or modify it
5   under the terms of the GNU General Public License as published by the
6   Free Software Foundation; either version 3, or (at your option) any
7   later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program; see the file COPYING3.  If not see
16   <http://www.gnu.org/licenses/>.
17
18   In other words, you are welcome to use, share and improve this program.
19   You are forbidden to forbid anyone else to use, share and improve
20   what you give them.   Help stamp out software-hoarding!  */
21
22
23/* This file contains a data structure that describes a GCC target.
24   At present it is incomplete, but in future it should grow to
25   contain most or all target machine and target O/S specific
26   information.
27
28   This structure has its initializer declared in target-def.h in the
29   form of large macro TARGET_INITIALIZER that expands to many smaller
30   macros.
31
32   The smaller macros each initialize one component of the structure,
33   and each has a default.  Each target should have a file that
34   includes target.h and target-def.h, and overrides any inappropriate
35   defaults by undefining the relevant macro and defining a suitable
36   replacement.  That file should then contain the definition of
37   "targetm" like so:
38
39   struct gcc_target targetm = TARGET_INITIALIZER;
40
41   Doing things this way allows us to bring together everything that
42   defines a GCC target.  By supplying a default that is appropriate
43   to most targets, we can easily add new items without needing to
44   edit dozens of target configuration files.  It should also allow us
45   to gradually reduce the amount of conditional compilation that is
46   scattered throughout GCC.  */
47
48#ifndef GCC_TARGET_H
49#define GCC_TARGET_H
50
51#include "insn-modes.h"
52
53#ifdef ENABLE_CHECKING
54
55typedef struct { void *magic; void *p; } cumulative_args_t;
56
57#else /* !ENABLE_CHECKING */
58
59/* When using a GCC build compiler, we could use
60   __attribute__((transparent_union)) to get cumulative_args_t function
61   arguments passed like scalars where the ABI would mandate a less
62   efficient way of argument passing otherwise.  However, that would come
63   at the cost of less type-safe !ENABLE_CHECKING compilation.  */
64
65typedef union { void *p; } cumulative_args_t;
66
67#endif /* !ENABLE_CHECKING */
68
69/* Types used by the record_gcc_switches() target function.  */
70typedef enum
71{
72  SWITCH_TYPE_PASSED,		/* A switch passed on the command line.  */
73  SWITCH_TYPE_ENABLED,		/* An option that is currently enabled.  */
74  SWITCH_TYPE_DESCRIPTIVE,	/* Descriptive text, not a switch or option.  */
75  SWITCH_TYPE_LINE_START,	/* Please emit any necessary text at the start of a line.  */
76  SWITCH_TYPE_LINE_END		/* Please emit a line terminator.  */
77}
78print_switch_type;
79
80typedef int (* print_switch_fn_type) (print_switch_type, const char *);
81
82/* An example implementation for ELF targets.  Defined in varasm.c  */
83extern int elf_record_gcc_switches (print_switch_type type, const char *);
84
85/* Some places still assume that all pointer or address modes are the
86   standard Pmode and ptr_mode.  These optimizations become invalid if
87   the target actually supports multiple different modes.  For now,
88   we disable such optimizations on such targets, using this function.  */
89extern bool target_default_pointer_address_modes_p (void);
90
91struct stdarg_info;
92struct spec_info_def;
93struct hard_reg_set_container;
94
95/* The struct used by the secondary_reload target hook.  */
96typedef struct secondary_reload_info
97{
98  /* icode is actually an enum insn_code, but we don't want to force every
99     file that includes target.h to include optabs.h .  */
100  int icode;
101  int extra_cost; /* Cost for using (a) scratch register(s) to be taken
102		     into account by copy_cost.  */
103  /* The next two members are for the use of the backward
104     compatibility hook.  */
105  struct secondary_reload_info *prev_sri;
106  int t_icode; /* Actually an enum insn_code - see above.  */
107} secondary_reload_info;
108
109/* This is defined in sched-int.h .  */
110struct _dep;
111
112/* This is defined in ddg.h .  */
113struct ddg;
114
115/* This is defined in cfgloop.h .  */
116struct loop;
117
118/* This is defined in tree-ssa-alias.h.  */
119struct ao_ref_s;
120
121/* This is defined in tree-vectorizer.h.  */
122struct _stmt_vec_info;
123
124/* These are defined in tree-vect-stmts.c.  */
125extern tree stmt_vectype (struct _stmt_vec_info *);
126extern bool stmt_in_inner_loop_p (struct _stmt_vec_info *);
127
128/* Assembler instructions for creating various kinds of integer object.  */
129
130struct asm_int_op
131{
132  const char *hi;
133  const char *si;
134  const char *di;
135  const char *ti;
136};
137
138/* Types of costs for vectorizer cost model.  */
139enum vect_cost_for_stmt
140{
141  scalar_stmt,
142  scalar_load,
143  scalar_store,
144  vector_stmt,
145  vector_load,
146  unaligned_load,
147  unaligned_store,
148  vector_store,
149  vec_to_scalar,
150  scalar_to_vec,
151  cond_branch_not_taken,
152  cond_branch_taken,
153  vec_perm,
154  vec_promote_demote,
155  vec_construct
156};
157
158/* Separate locations for which the vectorizer cost model should
159   track costs.  */
160enum vect_cost_model_location {
161  vect_prologue = 0,
162  vect_body = 1,
163  vect_epilogue = 2
164};
165
166/* The target structure.  This holds all the backend hooks.  */
167#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
168#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS;
169#define DEFHOOK_UNDOC DEFHOOK
170#define HOOKSTRUCT(FRAGMENT) FRAGMENT
171
172#include "target.def"
173
174extern struct gcc_target targetm;
175
176#ifdef GCC_TM_H
177
178#ifndef CUMULATIVE_ARGS_MAGIC
179#define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls)
180#endif
181
182static inline CUMULATIVE_ARGS *
183get_cumulative_args (cumulative_args_t arg)
184{
185#ifdef ENABLE_CHECKING
186  gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC);
187#endif /* ENABLE_CHECKING */
188  return (CUMULATIVE_ARGS *) arg.p;
189}
190
191static inline cumulative_args_t
192pack_cumulative_args (CUMULATIVE_ARGS *arg)
193{
194  cumulative_args_t ret;
195
196#ifdef ENABLE_CHECKING
197  ret.magic = CUMULATIVE_ARGS_MAGIC;
198#endif /* ENABLE_CHECKING */
199  ret.p = (void *) arg;
200  return ret;
201}
202#endif /* GCC_TM_H */
203
204#endif /* GCC_TARGET_H */
205