OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [mips/] [mips-protos.h] - Blame information for rev 282

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 282 jeremybenn
/* Prototypes of target machine for GNU compiler.  MIPS version.
2
   Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
4
   Free Software Foundation, Inc.
5
   Contributed by A. Lichnewsky (lich@inria.inria.fr).
6
   Changed by Michael Meissner  (meissner@osf.org).
7
   64-bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and
8
   Brendan Eich (brendan@microunity.com).
9
 
10
This file is part of GCC.
11
 
12
GCC is free software; you can redistribute it and/or modify
13
it under the terms of the GNU General Public License as published by
14
the Free Software Foundation; either version 3, or (at your option)
15
any later version.
16
 
17
GCC is distributed in the hope that it will be useful,
18
but WITHOUT ANY WARRANTY; without even the implied warranty of
19
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
GNU General Public License for more details.
21
 
22
You should have received a copy of the GNU General Public License
23
along with GCC; see the file COPYING3.  If not see
24
<http://www.gnu.org/licenses/>.  */
25
 
26
#ifndef GCC_MIPS_PROTOS_H
27
#define GCC_MIPS_PROTOS_H
28
 
29
/* Describes how a symbol is used.
30
 
31
   SYMBOL_CONTEXT_CALL
32
       The symbol is used as the target of a call instruction.
33
 
34
   SYMBOL_CONTEXT_LEA
35
       The symbol is used in a load-address operation.
36
 
37
   SYMBOL_CONTEXT_MEM
38
       The symbol is used as the address in a MEM.  */
39
enum mips_symbol_context {
40
  SYMBOL_CONTEXT_CALL,
41
  SYMBOL_CONTEXT_LEA,
42
  SYMBOL_CONTEXT_MEM
43
};
44
 
45
/* Classifies a SYMBOL_REF, LABEL_REF or UNSPEC address.
46
 
47
   SYMBOL_ABSOLUTE
48
       The symbol's value will be calculated using absolute relocations,
49
       such as %hi and %lo.
50
 
51
   SYMBOL_GP_RELATIVE
52
       The symbol's value will be calculated by adding a 16-bit offset
53
       from $gp.
54
 
55
   SYMBOL_PC_RELATIVE
56
       The symbol's value will be calculated using a MIPS16 PC-relative
57
       calculation.
58
 
59
   SYMBOL_FORCE_TO_MEM
60
       The symbol's value must be forced to memory and loaded from there.
61
 
62
   SYMBOL_GOT_PAGE_OFST
63
       The symbol's value will be calculated by loading an address
64
       from the GOT and then applying a 16-bit offset.
65
 
66
   SYMBOL_GOT_DISP
67
       The symbol's value will be loaded directly from the GOT.
68
 
69
   SYMBOL_GOTOFF_PAGE
70
       An UNSPEC wrapper around a SYMBOL_GOT_PAGE_OFST.  It represents the
71
       offset from _gp of the GOT entry.
72
 
73
   SYMBOL_GOTOFF_DISP
74
       An UNSPEC wrapper around a SYMBOL_GOT_DISP.  It represents the
75
       the offset from _gp of the symbol's GOT entry.
76
 
77
   SYMBOL_GOTOFF_CALL
78
       Like SYMBOL_GOTOFF_DISP, but used when calling a global function.
79
       The GOT entry is allowed to point to a stub rather than to the
80
       function itself.
81
 
82
   SYMBOL_GOTOFF_LOADGP
83
       An UNSPEC wrapper around a function's address.  It represents the
84
       offset of _gp from the start of the function.
85
 
86
   SYMBOL_TLS
87
       A thread-local symbol.
88
 
89
   SYMBOL_TLSGD
90
   SYMBOL_TLSLDM
91
   SYMBOL_DTPREL
92
   SYMBOL_GOTTPREL
93
   SYMBOL_TPREL
94
       UNSPEC wrappers around SYMBOL_TLS, corresponding to the
95
       thread-local storage relocation operators.
96
 
97
   SYMBOL_32_HIGH
98
       For a 32-bit symbolic address X, this is the value of %hi(X).
99
 
100
   SYMBOL_64_HIGH
101
       For a 64-bit symbolic address X, this is the value of
102
       (%highest(X) << 16) + %higher(X).
103
 
104
   SYMBOL_64_MID
105
       For a 64-bit symbolic address X, this is the value of
106
       (%higher(X) << 16) + %hi(X).
107
 
108
   SYMBOL_64_LOW
109
       For a 64-bit symbolic address X, this is the value of
110
       (%hi(X) << 16) + %lo(X).
111
 
112
   SYMBOL_HALF
113
       An UNSPEC wrapper around any kind of address.  It represents the
114
       low 16 bits of that address.  */
115
enum mips_symbol_type {
116
  SYMBOL_ABSOLUTE,
117
  SYMBOL_GP_RELATIVE,
118
  SYMBOL_PC_RELATIVE,
119
  SYMBOL_FORCE_TO_MEM,
120
  SYMBOL_GOT_PAGE_OFST,
121
  SYMBOL_GOT_DISP,
122
  SYMBOL_GOTOFF_PAGE,
123
  SYMBOL_GOTOFF_DISP,
124
  SYMBOL_GOTOFF_CALL,
125
  SYMBOL_GOTOFF_LOADGP,
126
  SYMBOL_TLS,
127
  SYMBOL_TLSGD,
128
  SYMBOL_TLSLDM,
129
  SYMBOL_DTPREL,
130
  SYMBOL_GOTTPREL,
131
  SYMBOL_TPREL,
132
  SYMBOL_32_HIGH,
133
  SYMBOL_64_HIGH,
134
  SYMBOL_64_MID,
135
  SYMBOL_64_LOW,
136
  SYMBOL_HALF
137
};
138
#define NUM_SYMBOL_TYPES (SYMBOL_HALF + 1)
139
 
140
/* Identifiers a style of $gp initialization sequence.
141
 
142
   LOADGP_NONE
143
        No initialization sequence is needed.
144
 
145
   LOADGP_OLDABI
146
        The o32 and o64 PIC sequence (the kind traditionally generated
147
        by .cpload).
148
 
149
   LOADGP_NEWABI
150
        The n32 and n64 PIC sequence (the kind traditionally generated
151
        by .cpsetup).
152
 
153
   LOADGP_ABSOLUTE
154
        The GNU absolute sequence, as generated by loadgp_absolute.
155
 
156
   LOADGP_RTP
157
        The VxWorks RTP PIC sequence, as generated by loadgp_rtp.  */
158
enum mips_loadgp_style {
159
  LOADGP_NONE,
160
  LOADGP_OLDABI,
161
  LOADGP_NEWABI,
162
  LOADGP_ABSOLUTE,
163
  LOADGP_RTP
164
};
165
 
166
struct mips16e_save_restore_info;
167
 
168
/* Classifies a type of call.
169
 
170
   MIPS_CALL_NORMAL
171
        A normal call or call_value pattern.
172
 
173
   MIPS_CALL_SIBCALL
174
        A sibcall or sibcall_value pattern.
175
 
176
   MIPS_CALL_EPILOGUE
177
        A call inserted in the epilogue.  */
178
enum mips_call_type {
179
  MIPS_CALL_NORMAL,
180
  MIPS_CALL_SIBCALL,
181
  MIPS_CALL_EPILOGUE
182
};
183
 
184
extern bool mips_symbolic_constant_p (rtx, enum mips_symbol_context,
185
                                      enum mips_symbol_type *);
186
extern int mips_regno_mode_ok_for_base_p (int, enum machine_mode, bool);
187
extern bool mips_stack_address_p (rtx, enum machine_mode);
188
extern int mips_address_insns (rtx, enum machine_mode, bool);
189
extern int mips_const_insns (rtx);
190
extern int mips_split_const_insns (rtx);
191
extern int mips_load_store_insns (rtx, rtx);
192
extern int mips_idiv_insns (void);
193
extern rtx mips_emit_move (rtx, rtx);
194
extern rtx mips_pic_base_register (rtx);
195
extern rtx mips_got_load (rtx, rtx, enum mips_symbol_type);
196
extern bool mips_split_symbol (rtx, rtx, enum machine_mode, rtx *);
197
extern rtx mips_unspec_address (rtx, enum mips_symbol_type);
198
extern void mips_move_integer (rtx, rtx, unsigned HOST_WIDE_INT);
199
extern bool mips_legitimize_move (enum machine_mode, rtx, rtx);
200
 
201
extern int m16_uimm3_b (rtx, enum machine_mode);
202
extern int m16_simm4_1 (rtx, enum machine_mode);
203
extern int m16_nsimm4_1 (rtx, enum machine_mode);
204
extern int m16_simm5_1 (rtx, enum machine_mode);
205
extern int m16_nsimm5_1 (rtx, enum machine_mode);
206
extern int m16_uimm5_4 (rtx, enum machine_mode);
207
extern int m16_nuimm5_4 (rtx, enum machine_mode);
208
extern int m16_simm8_1 (rtx, enum machine_mode);
209
extern int m16_nsimm8_1 (rtx, enum machine_mode);
210
extern int m16_uimm8_1 (rtx, enum machine_mode);
211
extern int m16_nuimm8_1 (rtx, enum machine_mode);
212
extern int m16_uimm8_m1_1 (rtx, enum machine_mode);
213
extern int m16_uimm8_4 (rtx, enum machine_mode);
214
extern int m16_nuimm8_4 (rtx, enum machine_mode);
215
extern int m16_simm8_8 (rtx, enum machine_mode);
216
extern int m16_nsimm8_8 (rtx, enum machine_mode);
217
 
218
extern rtx mips_subword (rtx, bool);
219
extern bool mips_split_64bit_move_p (rtx, rtx);
220
extern void mips_split_doubleword_move (rtx, rtx);
221
extern const char *mips_output_move (rtx, rtx);
222
extern bool mips_cfun_has_cprestore_slot_p (void);
223
extern bool mips_cprestore_address_p (rtx, bool);
224
extern void mips_save_gp_to_cprestore_slot (rtx, rtx, rtx, rtx);
225
extern void mips_restore_gp_from_cprestore_slot (rtx);
226
#ifdef RTX_CODE
227
extern void mips_expand_scc (rtx *);
228
extern void mips_expand_conditional_branch (rtx *);
229
extern void mips_expand_vcondv2sf (rtx, rtx, rtx, enum rtx_code, rtx, rtx);
230
extern void mips_expand_conditional_move (rtx *);
231
extern void mips_expand_conditional_trap (rtx);
232
#endif
233
extern bool mips_use_pic_fn_addr_reg_p (const_rtx);
234
extern rtx mips_expand_call (enum mips_call_type, rtx, rtx, rtx, rtx, bool);
235
extern void mips_split_call (rtx, rtx);
236
extern bool mips_get_pic_call_symbol (rtx *, int);
237
extern void mips_expand_fcc_reload (rtx, rtx, rtx);
238
extern void mips_set_return_address (rtx, rtx);
239
extern bool mips_expand_block_move (rtx, rtx, rtx);
240
extern void mips_expand_synci_loop (rtx, rtx);
241
 
242
extern void mips_init_cumulative_args (CUMULATIVE_ARGS *, tree);
243
extern void mips_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
244
                                       tree, int);
245
extern rtx mips_function_arg (const CUMULATIVE_ARGS *,
246
                              enum machine_mode, tree, int);
247
extern int mips_function_arg_boundary (enum machine_mode, tree);
248
extern bool mips_pad_arg_upward (enum machine_mode, const_tree);
249
extern bool mips_pad_reg_upward (enum machine_mode, tree);
250
 
251
extern bool mips_expand_ext_as_unaligned_load (rtx, rtx, HOST_WIDE_INT,
252
                                               HOST_WIDE_INT);
253
extern bool mips_expand_ins_as_unaligned_store (rtx, rtx, HOST_WIDE_INT,
254
                                                HOST_WIDE_INT);
255
extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x);
256
extern void mips_override_options (void);
257
extern void mips_conditional_register_usage (void);
258
extern void mips_order_regs_for_local_alloc (void);
259
extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT);
260
 
261
extern void mips_push_asm_switch (struct mips_asm_switch *);
262
extern void mips_pop_asm_switch (struct mips_asm_switch *);
263
extern void mips_print_operand (FILE *, rtx, int);
264
extern void mips_print_operand_address (FILE *, rtx);
265
extern void mips_output_external (FILE *, tree, const char *);
266
extern void mips_output_filename (FILE *, const char *);
267
extern void mips_output_ascii (FILE *, const char *, size_t);
268
extern void mips_output_aligned_decl_common (FILE *, tree, const char *,
269
                                             unsigned HOST_WIDE_INT,
270
                                             unsigned int);
271
extern void mips_declare_common_object (FILE *, const char *,
272
                                        const char *, unsigned HOST_WIDE_INT,
273
                                        unsigned int, bool);
274
extern void mips_declare_object (FILE *, const char *, const char *,
275
                                 const char *, ...) ATTRIBUTE_PRINTF_4;
276
extern void mips_declare_object_name (FILE *, const char *, tree);
277
extern void mips_finish_declare_object (FILE *, tree, int, int);
278
 
279
extern bool mips_small_data_pattern_p (rtx);
280
extern rtx mips_rewrite_small_data (rtx);
281
extern HOST_WIDE_INT mips_initial_elimination_offset (int, int);
282
extern rtx mips_return_addr (int, rtx);
283
extern bool mips_must_initialize_gp_p (void);
284
extern enum mips_loadgp_style mips_current_loadgp_style (void);
285
extern void mips_emit_save_slot_move (rtx, rtx, rtx);
286
extern void mips_expand_prologue (void);
287
extern void mips_expand_before_return (void);
288
extern void mips_expand_epilogue (bool);
289
extern bool mips_can_use_return_insn (void);
290
extern rtx mips_function_value (const_tree, const_tree, enum machine_mode);
291
 
292
extern bool mips_cannot_change_mode_class (enum machine_mode,
293
                                           enum machine_mode, enum reg_class);
294
extern bool mips_dangerous_for_la25_p (rtx);
295
extern bool mips_modes_tieable_p (enum machine_mode, enum machine_mode);
296
extern enum reg_class mips_preferred_reload_class (rtx, enum reg_class);
297
extern enum reg_class mips_secondary_reload_class (enum reg_class,
298
                                                   enum machine_mode,
299
                                                   rtx, bool);
300
extern int mips_class_max_nregs (enum reg_class, enum machine_mode);
301
extern int mips_register_move_cost (enum machine_mode, enum reg_class,
302
                                    enum reg_class);
303
 
304
extern int mips_adjust_insn_length (rtx, int);
305
extern void mips_output_load_label (rtx);
306
extern const char *mips_output_conditional_branch (rtx, rtx *, const char *,
307
                                                   const char *);
308
extern const char *mips_output_order_conditional_branch (rtx, rtx *, bool);
309
extern const char *mips_output_sync (void);
310
extern const char *mips_output_sync_loop (rtx, rtx *);
311
extern unsigned int mips_sync_loop_insns (rtx, rtx *);
312
extern const char *mips_output_division (const char *, rtx *);
313
extern unsigned int mips_hard_regno_nregs (int, enum machine_mode);
314
extern bool mips_linked_madd_p (rtx, rtx);
315
extern bool mips_store_data_bypass_p (rtx, rtx);
316
extern rtx mips_prefetch_cookie (rtx, rtx);
317
 
318
extern void irix_asm_output_align (FILE *, unsigned);
319
extern const char *current_section_name (void);
320
extern unsigned int current_section_flags (void);
321
extern bool mips_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
322
 
323
extern const char *mips16e_output_save_restore (rtx, HOST_WIDE_INT);
324
extern bool mips16e_save_restore_pattern_p (rtx, HOST_WIDE_INT,
325
                                            struct mips16e_save_restore_info *);
326
 
327
extern bool mask_low_and_shift_p (enum machine_mode, rtx, rtx, int);
328
extern int mask_low_and_shift_len (enum machine_mode, rtx, rtx);
329
extern bool and_operands_ok (enum machine_mode, rtx, rtx);
330
 
331
union mips_gen_fn_ptrs
332
{
333
  rtx (*fn_6) (rtx, rtx, rtx, rtx, rtx, rtx);
334
  rtx (*fn_5) (rtx, rtx, rtx, rtx, rtx);
335
  rtx (*fn_4) (rtx, rtx, rtx, rtx);
336
};
337
 
338
extern void mips_expand_atomic_qihi (union mips_gen_fn_ptrs,
339
                                     rtx, rtx, rtx, rtx);
340
 
341
extern void mips_expand_vector_init (rtx, rtx);
342
 
343
extern bool mips_eh_uses (unsigned int);
344
extern bool mips_epilogue_uses (unsigned int);
345
extern void mips_final_prescan_insn (rtx, rtx *, int);
346
extern int mips_trampoline_code_size (void);
347
extern void mips_function_profiler (FILE *);
348
 
349
typedef rtx (*mulsidi3_gen_fn) (rtx, rtx, rtx);
350
#ifdef RTX_CODE
351
extern mulsidi3_gen_fn mips_mulsidi3_gen_fn (enum rtx_code);
352
#endif
353
 
354
#endif /* ! GCC_MIPS_PROTOS_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.