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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [config/] [mips/] [mips-protos.h] - Blame information for rev 709

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 709 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, 2010, 2011
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_GOT_PAGE_OFST
60
       The symbol's value will be calculated by loading an address
61
       from the GOT and then applying a 16-bit offset.
62
 
63
   SYMBOL_GOT_DISP
64
       The symbol's value will be loaded directly from the GOT.
65
 
66
   SYMBOL_GOTOFF_PAGE
67
       An UNSPEC wrapper around a SYMBOL_GOT_PAGE_OFST.  It represents the
68
       offset from _gp of the GOT entry.
69
 
70
   SYMBOL_GOTOFF_DISP
71
       An UNSPEC wrapper around a SYMBOL_GOT_DISP.  It represents the
72
       offset from _gp of the symbol's GOT entry.
73
 
74
   SYMBOL_GOTOFF_CALL
75
       Like SYMBOL_GOTOFF_DISP, but used when calling a global function.
76
       The GOT entry is allowed to point to a stub rather than to the
77
       function itself.
78
 
79
   SYMBOL_GOTOFF_LOADGP
80
       An UNSPEC wrapper around a function's address.  It represents the
81
       offset of _gp from the start of the function.
82
 
83
   SYMBOL_TLS
84
       A thread-local symbol.
85
 
86
   SYMBOL_TLSGD
87
   SYMBOL_TLSLDM
88
   SYMBOL_DTPREL
89
   SYMBOL_GOTTPREL
90
   SYMBOL_TPREL
91
       UNSPEC wrappers around SYMBOL_TLS, corresponding to the
92
       thread-local storage relocation operators.
93
 
94
   SYMBOL_64_HIGH
95
       For a 64-bit symbolic address X, this is the value of
96
       (%highest(X) << 16) + %higher(X).
97
 
98
   SYMBOL_64_MID
99
       For a 64-bit symbolic address X, this is the value of
100
       (%higher(X) << 16) + %hi(X).
101
 
102
   SYMBOL_64_LOW
103
       For a 64-bit symbolic address X, this is the value of
104
       (%hi(X) << 16) + %lo(X).
105
 
106
   SYMBOL_HALF
107
       An UNSPEC wrapper around any kind of address.  It represents the
108
       low 16 bits of that address.  */
109
enum mips_symbol_type {
110
  SYMBOL_ABSOLUTE,
111
  SYMBOL_GP_RELATIVE,
112
  SYMBOL_PC_RELATIVE,
113
  SYMBOL_GOT_PAGE_OFST,
114
  SYMBOL_GOT_DISP,
115
  SYMBOL_GOTOFF_PAGE,
116
  SYMBOL_GOTOFF_DISP,
117
  SYMBOL_GOTOFF_CALL,
118
  SYMBOL_GOTOFF_LOADGP,
119
  SYMBOL_TLS,
120
  SYMBOL_TLSGD,
121
  SYMBOL_TLSLDM,
122
  SYMBOL_DTPREL,
123
  SYMBOL_GOTTPREL,
124
  SYMBOL_TPREL,
125
  SYMBOL_64_HIGH,
126
  SYMBOL_64_MID,
127
  SYMBOL_64_LOW,
128
  SYMBOL_HALF
129
};
130
#define NUM_SYMBOL_TYPES (SYMBOL_HALF + 1)
131
 
132
/* Identifiers a style of $gp initialization sequence.
133
 
134
   LOADGP_NONE
135
        No initialization sequence is needed.
136
 
137
   LOADGP_OLDABI
138
        The o32 and o64 PIC sequence (the kind traditionally generated
139
        by .cpload).
140
 
141
   LOADGP_NEWABI
142
        The n32 and n64 PIC sequence (the kind traditionally generated
143
        by .cpsetup).
144
 
145
   LOADGP_ABSOLUTE
146
        The GNU absolute sequence, as generated by loadgp_absolute.
147
 
148
   LOADGP_RTP
149
        The VxWorks RTP PIC sequence, as generated by loadgp_rtp.  */
150
enum mips_loadgp_style {
151
  LOADGP_NONE,
152
  LOADGP_OLDABI,
153
  LOADGP_NEWABI,
154
  LOADGP_ABSOLUTE,
155
  LOADGP_RTP
156
};
157
 
158
struct mips16e_save_restore_info;
159
 
160
/* Classifies a type of call.
161
 
162
   MIPS_CALL_NORMAL
163
        A normal call or call_value pattern.
164
 
165
   MIPS_CALL_SIBCALL
166
        A sibcall or sibcall_value pattern.
167
 
168
   MIPS_CALL_EPILOGUE
169
        A call inserted in the epilogue.  */
170
enum mips_call_type {
171
  MIPS_CALL_NORMAL,
172
  MIPS_CALL_SIBCALL,
173
  MIPS_CALL_EPILOGUE
174
};
175
 
176
extern bool mips_symbolic_constant_p (rtx, enum mips_symbol_context,
177
                                      enum mips_symbol_type *);
178
extern int mips_regno_mode_ok_for_base_p (int, enum machine_mode, bool);
179
extern bool mips_stack_address_p (rtx, enum machine_mode);
180
extern int mips_address_insns (rtx, enum machine_mode, bool);
181
extern int mips_const_insns (rtx);
182
extern int mips_split_const_insns (rtx);
183
extern int mips_load_store_insns (rtx, rtx);
184
extern int mips_idiv_insns (void);
185
extern rtx mips_emit_move (rtx, rtx);
186
#ifdef RTX_CODE
187
extern void mips_emit_binary (enum rtx_code, rtx, rtx, rtx);
188
#endif
189
extern rtx mips_pic_base_register (rtx);
190
extern rtx mips_got_load (rtx, rtx, enum mips_symbol_type);
191
extern bool mips_split_symbol (rtx, rtx, enum machine_mode, rtx *);
192
extern rtx mips_unspec_address (rtx, enum mips_symbol_type);
193
extern void mips_move_integer (rtx, rtx, unsigned HOST_WIDE_INT);
194
extern bool mips_legitimize_move (enum machine_mode, rtx, rtx);
195
 
196
extern int m16_uimm3_b (rtx, enum machine_mode);
197
extern int m16_simm4_1 (rtx, enum machine_mode);
198
extern int m16_nsimm4_1 (rtx, enum machine_mode);
199
extern int m16_simm5_1 (rtx, enum machine_mode);
200
extern int m16_nsimm5_1 (rtx, enum machine_mode);
201
extern int m16_uimm5_4 (rtx, enum machine_mode);
202
extern int m16_nuimm5_4 (rtx, enum machine_mode);
203
extern int m16_simm8_1 (rtx, enum machine_mode);
204
extern int m16_nsimm8_1 (rtx, enum machine_mode);
205
extern int m16_uimm8_1 (rtx, enum machine_mode);
206
extern int m16_nuimm8_1 (rtx, enum machine_mode);
207
extern int m16_uimm8_m1_1 (rtx, enum machine_mode);
208
extern int m16_uimm8_4 (rtx, enum machine_mode);
209
extern int m16_nuimm8_4 (rtx, enum machine_mode);
210
extern int m16_simm8_8 (rtx, enum machine_mode);
211
extern int m16_nsimm8_8 (rtx, enum machine_mode);
212
 
213
extern rtx mips_subword (rtx, bool);
214
extern bool mips_split_64bit_move_p (rtx, rtx);
215
extern void mips_split_doubleword_move (rtx, rtx);
216
extern const char *mips_output_move (rtx, rtx);
217
extern bool mips_cfun_has_cprestore_slot_p (void);
218
extern bool mips_cprestore_address_p (rtx, bool);
219
extern void mips_save_gp_to_cprestore_slot (rtx, rtx, rtx, rtx);
220
extern void mips_restore_gp_from_cprestore_slot (rtx);
221
#ifdef RTX_CODE
222
extern void mips_expand_scc (rtx *);
223
extern void mips_expand_conditional_branch (rtx *);
224
extern void mips_expand_vcondv2sf (rtx, rtx, rtx, enum rtx_code, rtx, rtx);
225
extern void mips_expand_conditional_move (rtx *);
226
extern void mips_expand_conditional_trap (rtx);
227
#endif
228
extern bool mips_use_pic_fn_addr_reg_p (const_rtx);
229
extern rtx mips_expand_call (enum mips_call_type, rtx, rtx, rtx, rtx, bool);
230
extern void mips_split_call (rtx, rtx);
231
extern bool mips_get_pic_call_symbol (rtx *, int);
232
extern void mips_expand_fcc_reload (rtx, rtx, rtx);
233
extern void mips_set_return_address (rtx, rtx);
234
extern bool mips_move_by_pieces_p (unsigned HOST_WIDE_INT, unsigned int);
235
extern bool mips_store_by_pieces_p (unsigned HOST_WIDE_INT, unsigned int);
236
extern bool mips_expand_block_move (rtx, rtx, rtx);
237
extern void mips_expand_synci_loop (rtx, rtx);
238
 
239
extern void mips_init_cumulative_args (CUMULATIVE_ARGS *, tree);
240
extern bool mips_pad_arg_upward (enum machine_mode, const_tree);
241
extern bool mips_pad_reg_upward (enum machine_mode, tree);
242
 
243
extern bool mips_expand_ext_as_unaligned_load (rtx, rtx, HOST_WIDE_INT,
244
                                               HOST_WIDE_INT);
245
extern bool mips_expand_ins_as_unaligned_store (rtx, rtx, HOST_WIDE_INT,
246
                                                HOST_WIDE_INT);
247
extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x);
248
extern void mips_order_regs_for_local_alloc (void);
249
extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT);
250
 
251
extern void mips_push_asm_switch (struct mips_asm_switch *);
252
extern void mips_pop_asm_switch (struct mips_asm_switch *);
253
extern void mips_output_external (FILE *, tree, const char *);
254
extern void mips_output_ascii (FILE *, const char *, size_t);
255
extern const char *mips_output_tls_reloc_directive (rtx *);
256
extern void mips_output_aligned_decl_common (FILE *, tree, const char *,
257
                                             unsigned HOST_WIDE_INT,
258
                                             unsigned int);
259
extern void mips_declare_common_object (FILE *, const char *,
260
                                        const char *, unsigned HOST_WIDE_INT,
261
                                        unsigned int, bool);
262
extern void mips_declare_object (FILE *, const char *, const char *,
263
                                 const char *, ...) ATTRIBUTE_PRINTF_4;
264
extern void mips_declare_object_name (FILE *, const char *, tree);
265
extern void mips_finish_declare_object (FILE *, tree, int, int);
266
 
267
extern bool mips_small_data_pattern_p (rtx);
268
extern rtx mips_rewrite_small_data (rtx);
269
extern HOST_WIDE_INT mips_initial_elimination_offset (int, int);
270
extern rtx mips_return_addr (int, rtx);
271
extern bool mips_must_initialize_gp_p (void);
272
extern enum mips_loadgp_style mips_current_loadgp_style (void);
273
extern void mips_emit_save_slot_move (rtx, rtx, rtx);
274
extern void mips_expand_prologue (void);
275
extern void mips_expand_before_return (void);
276
extern void mips_expand_epilogue (bool);
277
extern bool mips_can_use_return_insn (void);
278
 
279
extern bool mips_cannot_change_mode_class (enum machine_mode,
280
                                           enum machine_mode, enum reg_class);
281
extern bool mips_dangerous_for_la25_p (rtx);
282
extern bool mips_modes_tieable_p (enum machine_mode, enum machine_mode);
283
extern enum reg_class mips_secondary_reload_class (enum reg_class,
284
                                                   enum machine_mode,
285
                                                   rtx, bool);
286
extern int mips_class_max_nregs (enum reg_class, enum machine_mode);
287
 
288
extern int mips_adjust_insn_length (rtx, int);
289
extern void mips_output_load_label (rtx);
290
extern const char *mips_output_conditional_branch (rtx, rtx *, const char *,
291
                                                   const char *);
292
extern const char *mips_output_order_conditional_branch (rtx, rtx *, bool);
293
extern const char *mips_output_sync (void);
294
extern const char *mips_output_sync_loop (rtx, rtx *);
295
extern unsigned int mips_sync_loop_insns (rtx, rtx *);
296
extern const char *mips_output_division (const char *, rtx *);
297
extern unsigned int mips_hard_regno_nregs (int, enum machine_mode);
298
extern bool mips_linked_madd_p (rtx, rtx);
299
extern bool mips_store_data_bypass_p (rtx, rtx);
300
extern rtx mips_prefetch_cookie (rtx, rtx);
301
 
302
extern void irix_asm_output_align (FILE *, unsigned);
303
extern const char *current_section_name (void);
304
extern unsigned int current_section_flags (void);
305
extern bool mips_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
306
 
307
extern const char *mips16e_output_save_restore (rtx, HOST_WIDE_INT);
308
extern bool mips16e_save_restore_pattern_p (rtx, HOST_WIDE_INT,
309
                                            struct mips16e_save_restore_info *);
310
 
311
extern bool mask_low_and_shift_p (enum machine_mode, rtx, rtx, int);
312
extern int mask_low_and_shift_len (enum machine_mode, rtx, rtx);
313
extern bool and_operands_ok (enum machine_mode, rtx, rtx);
314
 
315
union mips_gen_fn_ptrs
316
{
317
  rtx (*fn_6) (rtx, rtx, rtx, rtx, rtx, rtx);
318
  rtx (*fn_5) (rtx, rtx, rtx, rtx, rtx);
319
  rtx (*fn_4) (rtx, rtx, rtx, rtx);
320
};
321
 
322
extern void mips_expand_atomic_qihi (union mips_gen_fn_ptrs,
323
                                     rtx, rtx, rtx, rtx);
324
 
325
extern void mips_expand_vector_init (rtx, rtx);
326
extern bool mips_expand_vec_perm_const (rtx op[4]);
327
extern void mips_expand_vec_unpack (rtx op[2], bool, bool);
328
extern void mips_expand_vec_reduc (rtx, rtx, rtx (*)(rtx, rtx, rtx));
329
extern void mips_expand_vec_minmax (rtx, rtx, rtx,
330
                                    rtx (*) (rtx, rtx, rtx), bool);
331
 
332
extern bool mips_eh_uses (unsigned int);
333
extern bool mips_epilogue_uses (unsigned int);
334
extern void mips_final_prescan_insn (rtx, rtx *, int);
335
extern int mips_trampoline_code_size (void);
336
extern void mips_function_profiler (FILE *);
337
 
338
typedef rtx (*mulsidi3_gen_fn) (rtx, rtx, rtx);
339
#ifdef RTX_CODE
340
extern mulsidi3_gen_fn mips_mulsidi3_gen_fn (enum rtx_code);
341
#endif
342
 
343
#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.