]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/mips/mips-protos.h
i386.c (ix86_expand_vector_init_one_nonzero): Add the missing break.
[thirdparty/gcc.git] / gcc / config / mips / mips-protos.h
CommitLineData
bd9f1972 1/* Prototypes of target machine for GNU compiler. MIPS version.
214be03f 2 Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
df770e04 3 1999, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
bd9f1972
KG
4 Contributed by A. Lichnewsky (lich@inria.inria.fr).
5 Changed by Michael Meissner (meissner@osf.org).
85f65093 6 64-bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and
bd9f1972
KG
7 Brendan Eich (brendan@microunity.com).
8
7ec022b2 9This file is part of GCC.
bd9f1972 10
7ec022b2 11GCC is free software; you can redistribute it and/or modify
bd9f1972 12it under the terms of the GNU General Public License as published by
2f83c7d6 13the Free Software Foundation; either version 3, or (at your option)
bd9f1972
KG
14any later version.
15
7ec022b2 16GCC is distributed in the hope that it will be useful,
bd9f1972
KG
17but WITHOUT ANY WARRANTY; without even the implied warranty of
18MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19GNU General Public License for more details.
20
21You should have received a copy of the GNU General Public License
2f83c7d6
NC
22along with GCC; see the file COPYING3. If not see
23<http://www.gnu.org/licenses/>. */
bd9f1972 24
88657302
RH
25#ifndef GCC_MIPS_PROTOS_H
26#define GCC_MIPS_PROTOS_H
bd9f1972 27
280fcbfa
RS
28/* Describes how a symbol is used.
29
30 SYMBOL_CONTEXT_CALL
31 The symbol is used as the target of a call instruction.
32
33 SYMBOL_CONTEXT_LEA
34 The symbol is used in a load-address operation.
35
36 SYMBOL_CONTEXT_MEM
37 The symbol is used as the address in a MEM. */
38enum mips_symbol_context {
39 SYMBOL_CONTEXT_CALL,
40 SYMBOL_CONTEXT_LEA,
41 SYMBOL_CONTEXT_MEM
42};
43
e245bd81
RS
44/* Classifies a SYMBOL_REF, LABEL_REF or UNSPEC address.
45
67da85da
RS
46 SYMBOL_ABSOLUTE
47 The symbol's value will be calculated using absolute relocations,
48 such as %hi and %lo.
e245bd81 49
67da85da
RS
50 SYMBOL_GP_RELATIVE
51 The symbol's value will be calculated by adding a 16-bit offset
52 from $gp.
e245bd81 53
67da85da
RS
54 SYMBOL_PC_RELATIVE
55 The symbol's value will be calculated using a MIPS16 PC-relative
56 calculation.
e245bd81 57
e06e2776
RS
58 SYMBOL_FORCE_TO_MEM
59 The symbol's value must be forced to memory and loaded from there.
60
08e7ceb3
RS
61 SYMBOL_GOT_PAGE_OFST
62 The symbol's value will be calculated by loading an address
63 from the GOT and then applying a 16-bit offset.
e245bd81 64
08e7ceb3
RS
65 SYMBOL_GOT_DISP
66 The symbol's value will be loaded directly from the GOT.
e245bd81
RS
67
68 SYMBOL_GOTOFF_PAGE
08e7ceb3
RS
69 An UNSPEC wrapper around a SYMBOL_GOT_PAGE_OFST. It represents the
70 offset from _gp of the GOT entry.
e245bd81 71
08e7ceb3
RS
72 SYMBOL_GOTOFF_DISP
73 An UNSPEC wrapper around a SYMBOL_GOT_DISP. It represents the
e245bd81
RS
74 the offset from _gp of the symbol's GOT entry.
75
76 SYMBOL_GOTOFF_CALL
08e7ceb3 77 Like SYMBOL_GOTOFF_DISP, but used when calling a global function.
e245bd81
RS
78 The GOT entry is allowed to point to a stub rather than to the
79 function itself.
80
81 SYMBOL_GOTOFF_LOADGP
82 An UNSPEC wrapper around a function's address. It represents the
83 offset of _gp from the start of the function.
84
69229b81
DJ
85 SYMBOL_TLS
86 A thread-local symbol.
87
88 SYMBOL_TLSGD
89 SYMBOL_TLSLDM
90 SYMBOL_DTPREL
91 SYMBOL_GOTTPREL
92 SYMBOL_TPREL
93 UNSPEC wrappers around SYMBOL_TLS, corresponding to the
94 thread-local storage relocation operators.
95
c93c5160
RS
96 SYMBOL_32_HIGH
97 For a 32-bit symbolic address X, this is the value of %hi(X).
98
e245bd81
RS
99 SYMBOL_64_HIGH
100 For a 64-bit symbolic address X, this is the value of
101 (%highest(X) << 16) + %higher(X).
102
103 SYMBOL_64_MID
104 For a 64-bit symbolic address X, this is the value of
105 (%higher(X) << 16) + %hi(X).
106
107 SYMBOL_64_LOW
108 For a 64-bit symbolic address X, this is the value of
8cb6400c
RS
109 (%hi(X) << 16) + %lo(X).
110
111 SYMBOL_HALF
112 An UNSPEC wrapper around any kind of address. It represents the
113 low 16 bits of that address. */
e245bd81 114enum mips_symbol_type {
67da85da
RS
115 SYMBOL_ABSOLUTE,
116 SYMBOL_GP_RELATIVE,
117 SYMBOL_PC_RELATIVE,
e06e2776 118 SYMBOL_FORCE_TO_MEM,
08e7ceb3
RS
119 SYMBOL_GOT_PAGE_OFST,
120 SYMBOL_GOT_DISP,
e245bd81 121 SYMBOL_GOTOFF_PAGE,
08e7ceb3 122 SYMBOL_GOTOFF_DISP,
e245bd81
RS
123 SYMBOL_GOTOFF_CALL,
124 SYMBOL_GOTOFF_LOADGP,
69229b81
DJ
125 SYMBOL_TLS,
126 SYMBOL_TLSGD,
127 SYMBOL_TLSLDM,
128 SYMBOL_DTPREL,
129 SYMBOL_GOTTPREL,
130 SYMBOL_TPREL,
c93c5160 131 SYMBOL_32_HIGH,
e245bd81
RS
132 SYMBOL_64_HIGH,
133 SYMBOL_64_MID,
8cb6400c
RS
134 SYMBOL_64_LOW,
135 SYMBOL_HALF
e245bd81 136};
8cb6400c 137#define NUM_SYMBOL_TYPES (SYMBOL_HALF + 1)
e245bd81 138
d9870b7e
RS
139/* Identifiers a style of $gp initialization sequence.
140
141 LOADGP_NONE
142 No initialization sequence is needed.
143
144 LOADGP_OLDABI
145 The o32 and o64 PIC sequence (the kind traditionally generated
146 by .cpload).
147
148 LOADGP_NEWABI
149 The n32 and n64 PIC sequence (the kind traditionally generated
150 by .cpsetup).
151
152 LOADGP_ABSOLUTE
8cb6400c
RS
153 The GNU absolute sequence, as generated by loadgp_absolute.
154
155 LOADGP_RTP
156 The VxWorks RTP PIC sequence, as generated by loadgp_rtp. */
d9870b7e
RS
157enum mips_loadgp_style {
158 LOADGP_NONE,
159 LOADGP_OLDABI,
160 LOADGP_NEWABI,
8cb6400c
RS
161 LOADGP_ABSOLUTE,
162 LOADGP_RTP
d9870b7e
RS
163};
164
e1260576
RS
165struct mips16e_save_restore_info;
166
280fcbfa
RS
167extern bool mips_symbolic_constant_p (rtx, enum mips_symbol_context,
168 enum mips_symbol_type *);
65239d20
RS
169extern int mips_regno_mode_ok_for_base_p (int, enum machine_mode, bool);
170extern bool mips_legitimate_address_p (enum machine_mode, rtx, bool);
96a30b18 171extern bool mips_stack_address_p (rtx, enum machine_mode);
5955b0a3 172extern int mips_address_insns (rtx, enum machine_mode, bool);
b4966b1b 173extern int mips_const_insns (rtx);
5955b0a3 174extern int mips_load_store_insns (rtx, rtx);
46490403 175extern int mips_idiv_insns (void);
51e7252a 176extern rtx mips_emit_move (rtx, rtx);
390ea488 177extern bool mips_split_symbol (rtx, rtx, enum machine_mode, rtx *);
e245bd81 178extern rtx mips_unspec_address (rtx, enum mips_symbol_type);
b4966b1b 179extern bool mips_legitimize_address (rtx *, enum machine_mode);
ea462dd0 180extern void mips_move_integer (rtx, rtx, unsigned HOST_WIDE_INT);
b4966b1b 181extern bool mips_legitimize_move (enum machine_mode, rtx, rtx);
b4966b1b
RS
182
183extern int m16_uimm3_b (rtx, enum machine_mode);
184extern int m16_simm4_1 (rtx, enum machine_mode);
185extern int m16_nsimm4_1 (rtx, enum machine_mode);
186extern int m16_simm5_1 (rtx, enum machine_mode);
187extern int m16_nsimm5_1 (rtx, enum machine_mode);
188extern int m16_uimm5_4 (rtx, enum machine_mode);
189extern int m16_nuimm5_4 (rtx, enum machine_mode);
190extern int m16_simm8_1 (rtx, enum machine_mode);
191extern int m16_nsimm8_1 (rtx, enum machine_mode);
192extern int m16_uimm8_1 (rtx, enum machine_mode);
193extern int m16_nuimm8_1 (rtx, enum machine_mode);
194extern int m16_uimm8_m1_1 (rtx, enum machine_mode);
195extern int m16_uimm8_4 (rtx, enum machine_mode);
196extern int m16_nuimm8_4 (rtx, enum machine_mode);
197extern int m16_simm8_8 (rtx, enum machine_mode);
198extern int m16_nsimm8_8 (rtx, enum machine_mode);
6b7d57c7 199
65239d20 200extern rtx mips_subword (rtx, bool);
b4966b1b 201extern bool mips_split_64bit_move_p (rtx, rtx);
0064fbe9 202extern void mips_split_doubleword_move (rtx, rtx);
b4966b1b 203extern const char *mips_output_move (rtx, rtx);
b73ce23b 204extern void mips_restore_gp (void);
6b7d57c7 205#ifdef RTX_CODE
65239d20
RS
206extern bool mips_expand_scc (enum rtx_code, rtx);
207extern void mips_expand_conditional_branch (rtx *, enum rtx_code);
ec4fc7ed 208extern void mips_expand_vcondv2sf (rtx, rtx, rtx, enum rtx_code, rtx, rtx);
65239d20
RS
209extern void mips_expand_conditional_move (rtx *);
210extern void mips_expand_conditional_trap (enum rtx_code);
6b7d57c7 211#endif
dbc90b65 212extern rtx mips_expand_call (rtx, rtx, rtx, rtx, bool);
65239d20 213extern void mips_expand_fcc_reload (rtx, rtx, rtx);
b4966b1b
RS
214extern void mips_set_return_address (rtx, rtx);
215extern bool mips_expand_block_move (rtx, rtx, rtx);
df770e04 216extern void mips_expand_synci_loop (rtx, rtx);
b4966b1b 217
65239d20
RS
218extern void mips_init_cumulative_args (CUMULATIVE_ARGS *, tree);
219extern void mips_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
220 tree, int);
221extern rtx mips_function_arg (const CUMULATIVE_ARGS *,
222 enum machine_mode, tree, int);
223extern int mips_function_arg_boundary (enum machine_mode, tree);
586de218 224extern bool mips_pad_arg_upward (enum machine_mode, const_tree);
648bb159 225extern bool mips_pad_reg_upward (enum machine_mode, tree);
b4966b1b 226
65239d20
RS
227extern bool mips_expand_ext_as_unaligned_load (rtx, rtx, HOST_WIDE_INT,
228 HOST_WIDE_INT);
229extern bool mips_expand_ins_as_unaligned_store (rtx, rtx, HOST_WIDE_INT,
230 HOST_WIDE_INT);
9226543b 231extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x);
65239d20 232extern void mips_override_options (void);
b4966b1b
RS
233extern void mips_conditional_register_usage (void);
234extern void mips_order_regs_for_local_alloc (void);
235extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT);
236
65239d20
RS
237extern void mips_print_operand (FILE *, rtx, int);
238extern void mips_print_operand_address (FILE *, rtx);
f8fdb503 239extern void mips_output_external (FILE *, tree, const char *);
b4966b1b 240extern void mips_output_filename (FILE *, const char *);
65239d20 241extern void mips_output_ascii (FILE *, const char *, size_t);
35f5add9
RS
242extern void mips_output_aligned_decl_common (FILE *, tree, const char *,
243 unsigned HOST_WIDE_INT,
244 unsigned int);
48b2e0a7
RS
245extern void mips_declare_common_object (FILE *, const char *,
246 const char *, unsigned HOST_WIDE_INT,
247 unsigned int, bool);
b4966b1b 248extern void mips_declare_object (FILE *, const char *, const char *,
99a3237a 249 const char *, ...) ATTRIBUTE_PRINTF_4;
b4966b1b
RS
250extern void mips_declare_object_name (FILE *, const char *, tree);
251extern void mips_finish_declare_object (FILE *, tree, int, int);
252
96a30b18 253extern bool mips_small_data_pattern_p (rtx);
108b61d5 254extern rtx mips_rewrite_small_data (rtx);
29c4d304 255extern bool mips_frame_pointer_required (void);
e88fb323 256extern HOST_WIDE_INT mips_initial_elimination_offset (int, int);
b4966b1b 257extern rtx mips_return_addr (int, rtx);
d9870b7e 258extern enum mips_loadgp_style mips_current_loadgp_style (void);
b4966b1b 259extern void mips_expand_prologue (void);
65239d20
RS
260extern void mips_expand_epilogue (bool);
261extern bool mips_can_use_return_insn (void);
262extern rtx mips_function_value (const_tree, enum machine_mode);
b4966b1b
RS
263
264extern bool mips_cannot_change_mode_class (enum machine_mode,
265 enum machine_mode, enum reg_class);
a6008bd8 266extern bool mips_dangerous_for_la25_p (rtx);
e5a2b69d 267extern bool mips_modes_tieable_p (enum machine_mode, enum machine_mode);
a6008bd8 268extern enum reg_class mips_preferred_reload_class (rtx, enum reg_class);
b4966b1b
RS
269extern enum reg_class mips_secondary_reload_class (enum reg_class,
270 enum machine_mode,
65239d20 271 rtx, bool);
b4966b1b 272extern int mips_class_max_nregs (enum reg_class, enum machine_mode);
b4966b1b
RS
273extern int mips_register_move_cost (enum machine_mode, enum reg_class,
274 enum reg_class);
275
276extern int mips_adjust_insn_length (rtx, int);
277extern const char *mips_output_load_label (void);
a8c1d5f8
RS
278extern const char *mips_output_conditional_branch (rtx, rtx *, const char *,
279 const char *);
280extern const char *mips_output_order_conditional_branch (rtx, rtx *, bool);
b4966b1b
RS
281extern const char *mips_output_division (const char *, rtx *);
282extern unsigned int mips_hard_regno_nregs (int, enum machine_mode);
39ba1719 283extern bool mips_linked_madd_p (rtx, rtx);
65239d20 284extern bool mips_store_data_bypass_p (rtx, rtx);
4767c570 285extern rtx mips_prefetch_cookie (rtx, rtx);
b4966b1b 286
3c7404d3 287extern void irix_asm_output_align (FILE *, unsigned);
b4966b1b
RS
288extern const char *current_section_name (void);
289extern unsigned int current_section_flags (void);
65239d20 290extern bool mips_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
bd9f1972 291
e1260576
RS
292extern const char *mips16e_output_save_restore (rtx, HOST_WIDE_INT);
293extern bool mips16e_save_restore_pattern_p (rtx, HOST_WIDE_INT,
294 struct mips16e_save_restore_info *);
49bce30a 295extern void mips_expand_compare_and_swap_12 (rtx, rtx, rtx, rtx);
e1260576 296
88657302 297#endif /* ! GCC_MIPS_PROTOS_H */