xref: /dflybsd-src/contrib/gcc-4.7/gcc/output.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Declarations for insn-output.c.  These functions are defined in recog.c,
2*e4b17023SJohn Marino    final.c, and varasm.c.
3*e4b17023SJohn Marino    Copyright (C) 1987, 1991, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
4*e4b17023SJohn Marino    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
5*e4b17023SJohn Marino    Free Software Foundation, Inc.
6*e4b17023SJohn Marino 
7*e4b17023SJohn Marino This file is part of GCC.
8*e4b17023SJohn Marino 
9*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify it under
10*e4b17023SJohn Marino the terms of the GNU General Public License as published by the Free
11*e4b17023SJohn Marino Software Foundation; either version 3, or (at your option) any later
12*e4b17023SJohn Marino version.
13*e4b17023SJohn Marino 
14*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15*e4b17023SJohn Marino WARRANTY; without even the implied warranty of MERCHANTABILITY or
16*e4b17023SJohn Marino FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17*e4b17023SJohn Marino for more details.
18*e4b17023SJohn Marino 
19*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
20*e4b17023SJohn Marino along with GCC; see the file COPYING3.  If not see
21*e4b17023SJohn Marino <http://www.gnu.org/licenses/>.  */
22*e4b17023SJohn Marino 
23*e4b17023SJohn Marino #ifndef GCC_OUTPUT_H
24*e4b17023SJohn Marino #define GCC_OUTPUT_H
25*e4b17023SJohn Marino 
26*e4b17023SJohn Marino /* Initialize data in final at the beginning of a compilation.  */
27*e4b17023SJohn Marino extern void init_final (const char *);
28*e4b17023SJohn Marino 
29*e4b17023SJohn Marino /* Enable APP processing of subsequent output.
30*e4b17023SJohn Marino    Used before the output from an `asm' statement.  */
31*e4b17023SJohn Marino extern void app_enable (void);
32*e4b17023SJohn Marino 
33*e4b17023SJohn Marino /* Disable APP processing of subsequent output.
34*e4b17023SJohn Marino    Called from varasm.c before most kinds of output.  */
35*e4b17023SJohn Marino extern void app_disable (void);
36*e4b17023SJohn Marino 
37*e4b17023SJohn Marino /* Return the number of slots filled in the current
38*e4b17023SJohn Marino    delayed branch sequence (we don't count the insn needing the
39*e4b17023SJohn Marino    delay slot).   Zero if not in a delayed branch sequence.  */
40*e4b17023SJohn Marino extern int dbr_sequence_length (void);
41*e4b17023SJohn Marino 
42*e4b17023SJohn Marino /* Indicate that branch shortening hasn't yet been done.  */
43*e4b17023SJohn Marino extern void init_insn_lengths (void);
44*e4b17023SJohn Marino 
45*e4b17023SJohn Marino /* Obtain the current length of an insn.  If branch shortening has been done,
46*e4b17023SJohn Marino    get its actual length.  Otherwise, get its maximum length.  */
47*e4b17023SJohn Marino extern int get_attr_length (rtx);
48*e4b17023SJohn Marino 
49*e4b17023SJohn Marino /* Obtain the current length of an insn.  If branch shortening has been done,
50*e4b17023SJohn Marino    get its actual length.  Otherwise, get its minimum length.  */
51*e4b17023SJohn Marino extern int get_attr_min_length (rtx);
52*e4b17023SJohn Marino 
53*e4b17023SJohn Marino /* Make a pass over all insns and compute their actual lengths by shortening
54*e4b17023SJohn Marino    any branches of variable length if possible.  */
55*e4b17023SJohn Marino extern void shorten_branches (rtx);
56*e4b17023SJohn Marino 
57*e4b17023SJohn Marino /* Output assembler code for the start of a function,
58*e4b17023SJohn Marino    and initialize some of the variables in this file
59*e4b17023SJohn Marino    for the new function.  The label for the function and associated
60*e4b17023SJohn Marino    assembler pseudo-ops have already been output in
61*e4b17023SJohn Marino    `assemble_start_function'.  */
62*e4b17023SJohn Marino extern void final_start_function (rtx, FILE *, int);
63*e4b17023SJohn Marino 
64*e4b17023SJohn Marino /* Output assembler code for the end of a function.
65*e4b17023SJohn Marino    For clarity, args are same as those of `final_start_function'
66*e4b17023SJohn Marino    even though not all of them are needed.  */
67*e4b17023SJohn Marino extern void final_end_function (void);
68*e4b17023SJohn Marino 
69*e4b17023SJohn Marino /* Output assembler code for some insns: all or part of a function.  */
70*e4b17023SJohn Marino extern void final (rtx, FILE *, int);
71*e4b17023SJohn Marino 
72*e4b17023SJohn Marino /* The final scan for one insn, INSN.  Args are same as in `final', except
73*e4b17023SJohn Marino    that INSN is the insn being scanned.  Value returned is the next insn to
74*e4b17023SJohn Marino    be scanned.  */
75*e4b17023SJohn Marino extern rtx final_scan_insn (rtx, FILE *, int, int, int *);
76*e4b17023SJohn Marino 
77*e4b17023SJohn Marino /* Replace a SUBREG with a REG or a MEM, based on the thing it is a
78*e4b17023SJohn Marino    subreg of.  */
79*e4b17023SJohn Marino extern rtx alter_subreg (rtx *);
80*e4b17023SJohn Marino 
81*e4b17023SJohn Marino /* Print an operand using machine-dependent assembler syntax.  */
82*e4b17023SJohn Marino extern void output_operand (rtx, int);
83*e4b17023SJohn Marino 
84*e4b17023SJohn Marino /* Report inconsistency between the assembler template and the operands.
85*e4b17023SJohn Marino    In an `asm', it's the user's fault; otherwise, the compiler's fault.  */
86*e4b17023SJohn Marino extern void output_operand_lossage (const char *, ...) ATTRIBUTE_PRINTF_1;
87*e4b17023SJohn Marino 
88*e4b17023SJohn Marino /* Output a string of assembler code, substituting insn operands.
89*e4b17023SJohn Marino    Defined in final.c.  */
90*e4b17023SJohn Marino extern void output_asm_insn (const char *, rtx *);
91*e4b17023SJohn Marino 
92*e4b17023SJohn Marino /* Compute a worst-case reference address of a branch so that it
93*e4b17023SJohn Marino    can be safely used in the presence of aligned labels.
94*e4b17023SJohn Marino    Defined in final.c.  */
95*e4b17023SJohn Marino extern int insn_current_reference_address (rtx);
96*e4b17023SJohn Marino 
97*e4b17023SJohn Marino /* Find the alignment associated with a CODE_LABEL.
98*e4b17023SJohn Marino    Defined in final.c.  */
99*e4b17023SJohn Marino extern int label_to_alignment (rtx);
100*e4b17023SJohn Marino 
101*e4b17023SJohn Marino /* Find the alignment maximum skip associated with a CODE_LABEL.
102*e4b17023SJohn Marino    Defined in final.c.  */
103*e4b17023SJohn Marino extern int label_to_max_skip (rtx);
104*e4b17023SJohn Marino 
105*e4b17023SJohn Marino /* Output a LABEL_REF, or a bare CODE_LABEL, as an assembler symbol.  */
106*e4b17023SJohn Marino extern void output_asm_label (rtx);
107*e4b17023SJohn Marino 
108*e4b17023SJohn Marino /* Marks SYMBOL_REFs in x as referenced through use of assemble_external.  */
109*e4b17023SJohn Marino extern void mark_symbol_refs_as_used (rtx);
110*e4b17023SJohn Marino 
111*e4b17023SJohn Marino /* Print a memory reference operand for address X
112*e4b17023SJohn Marino    using machine-dependent assembler syntax.  */
113*e4b17023SJohn Marino extern void output_address (rtx);
114*e4b17023SJohn Marino 
115*e4b17023SJohn Marino /* Print an integer constant expression in assembler syntax.
116*e4b17023SJohn Marino    Addition and subtraction are the only arithmetic
117*e4b17023SJohn Marino    that may appear in these expressions.  */
118*e4b17023SJohn Marino extern void output_addr_const (FILE *, rtx);
119*e4b17023SJohn Marino 
120*e4b17023SJohn Marino /* Output a string of assembler code, substituting numbers, strings
121*e4b17023SJohn Marino    and fixed syntactic prefixes.  */
122*e4b17023SJohn Marino #if GCC_VERSION >= 3004
123*e4b17023SJohn Marino #define ATTRIBUTE_ASM_FPRINTF(m, n) __attribute__ ((__format__ (__asm_fprintf__, m, n))) ATTRIBUTE_NONNULL(m)
124*e4b17023SJohn Marino /* This is a magic identifier which allows GCC to figure out the type
125*e4b17023SJohn Marino    of HOST_WIDE_INT for %wd specifier checks.  You must issue this
126*e4b17023SJohn Marino    typedef before using the __asm_fprintf__ format attribute.  */
127*e4b17023SJohn Marino typedef HOST_WIDE_INT __gcc_host_wide_int__;
128*e4b17023SJohn Marino #else
129*e4b17023SJohn Marino #define ATTRIBUTE_ASM_FPRINTF(m, n) ATTRIBUTE_NONNULL(m)
130*e4b17023SJohn Marino #endif
131*e4b17023SJohn Marino 
132*e4b17023SJohn Marino extern void fprint_whex (FILE *, unsigned HOST_WIDE_INT);
133*e4b17023SJohn Marino extern void fprint_ul (FILE *, unsigned long);
134*e4b17023SJohn Marino extern int sprint_ul (char *, unsigned long);
135*e4b17023SJohn Marino 
136*e4b17023SJohn Marino extern void asm_fprintf (FILE *file, const char *p, ...)
137*e4b17023SJohn Marino      ATTRIBUTE_ASM_FPRINTF(2, 3);
138*e4b17023SJohn Marino 
139*e4b17023SJohn Marino /* Split up a CONST_DOUBLE or integer constant rtx into two rtx's for single
140*e4b17023SJohn Marino    words.  */
141*e4b17023SJohn Marino extern void split_double (rtx, rtx *, rtx *);
142*e4b17023SJohn Marino 
143*e4b17023SJohn Marino /* Return nonzero if this function has no function calls.  */
144*e4b17023SJohn Marino extern int leaf_function_p (void);
145*e4b17023SJohn Marino 
146*e4b17023SJohn Marino /* Return 1 if branch is a forward branch.
147*e4b17023SJohn Marino    Uses insn_shuid array, so it works only in the final pass.  May be used by
148*e4b17023SJohn Marino    output templates to add branch prediction hints, for example.  */
149*e4b17023SJohn Marino extern int final_forward_branch_p (rtx);
150*e4b17023SJohn Marino 
151*e4b17023SJohn Marino /* Return 1 if this function uses only the registers that can be
152*e4b17023SJohn Marino    safely renumbered.  */
153*e4b17023SJohn Marino extern int only_leaf_regs_used (void);
154*e4b17023SJohn Marino 
155*e4b17023SJohn Marino /* Scan IN_RTX and its subexpressions, and renumber all regs into those
156*e4b17023SJohn Marino    available in leaf functions.  */
157*e4b17023SJohn Marino extern void leaf_renumber_regs_insn (rtx);
158*e4b17023SJohn Marino 
159*e4b17023SJohn Marino /* Locate the proper template for the given insn-code.  */
160*e4b17023SJohn Marino extern const char *get_insn_template (int, rtx);
161*e4b17023SJohn Marino 
162*e4b17023SJohn Marino /* Functions in varasm.c.  */
163*e4b17023SJohn Marino 
164*e4b17023SJohn Marino /* Declare DECL to be a weak symbol.  */
165*e4b17023SJohn Marino extern void declare_weak (tree);
166*e4b17023SJohn Marino /* Merge weak status.  */
167*e4b17023SJohn Marino extern void merge_weak (tree, tree);
168*e4b17023SJohn Marino 
169*e4b17023SJohn Marino /* Emit any pending weak declarations.  */
170*e4b17023SJohn Marino extern void weak_finish (void);
171*e4b17023SJohn Marino 
172*e4b17023SJohn Marino /* Return the default TLS model for a given variable.  */
173*e4b17023SJohn Marino extern enum tls_model decl_default_tls_model (const_tree);
174*e4b17023SJohn Marino 
175*e4b17023SJohn Marino /* Decode an `asm' spec for a declaration as a register name.
176*e4b17023SJohn Marino    Return the register number, or -1 if nothing specified,
177*e4b17023SJohn Marino    or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
178*e4b17023SJohn Marino    or -3 if ASMSPEC is `cc' and is not recognized,
179*e4b17023SJohn Marino    or -4 if ASMSPEC is `memory' and is not recognized.
180*e4b17023SJohn Marino    Accept an exact spelling or a decimal number.
181*e4b17023SJohn Marino    Prefixes such as % are optional.  */
182*e4b17023SJohn Marino extern int decode_reg_name (const char *);
183*e4b17023SJohn Marino 
184*e4b17023SJohn Marino /* Similar to decode_reg_name, but takes an extra parameter that is a
185*e4b17023SJohn Marino    pointer to the number of (internal) registers described by the
186*e4b17023SJohn Marino    external name.  */
187*e4b17023SJohn Marino extern int decode_reg_name_and_count (const char *, int *);
188*e4b17023SJohn Marino 
189*e4b17023SJohn Marino extern void assemble_alias (tree, tree);
190*e4b17023SJohn Marino 
191*e4b17023SJohn Marino extern void default_assemble_visibility (tree, int);
192*e4b17023SJohn Marino 
193*e4b17023SJohn Marino /* Output a string of literal assembler code
194*e4b17023SJohn Marino    for an `asm' keyword used between functions.  */
195*e4b17023SJohn Marino extern void assemble_asm (tree);
196*e4b17023SJohn Marino 
197*e4b17023SJohn Marino /* Output assembler code for the constant pool of a function and associated
198*e4b17023SJohn Marino    with defining the name of the function.  DECL describes the function.
199*e4b17023SJohn Marino    NAME is the function's name.  For the constant pool, we use the current
200*e4b17023SJohn Marino    constant pool data.  */
201*e4b17023SJohn Marino extern void assemble_start_function (tree, const char *);
202*e4b17023SJohn Marino 
203*e4b17023SJohn Marino /* Output assembler code associated with defining the size of the
204*e4b17023SJohn Marino    function.  DECL describes the function.  NAME is the function's name.  */
205*e4b17023SJohn Marino extern void assemble_end_function (tree, const char *);
206*e4b17023SJohn Marino 
207*e4b17023SJohn Marino /* Assemble everything that is needed for a variable or function declaration.
208*e4b17023SJohn Marino    Not used for automatic variables, and not used for function definitions.
209*e4b17023SJohn Marino    Should not be called for variables of incomplete structure type.
210*e4b17023SJohn Marino 
211*e4b17023SJohn Marino    TOP_LEVEL is nonzero if this variable has file scope.
212*e4b17023SJohn Marino    AT_END is nonzero if this is the special handling, at end of compilation,
213*e4b17023SJohn Marino    to define things that have had only tentative definitions.
214*e4b17023SJohn Marino    DONT_OUTPUT_DATA if nonzero means don't actually output the
215*e4b17023SJohn Marino    initial value (that will be done by the caller).  */
216*e4b17023SJohn Marino extern void assemble_variable (tree, int, int, int);
217*e4b17023SJohn Marino 
218*e4b17023SJohn Marino /* Compute the alignment of variable specified by DECL.
219*e4b17023SJohn Marino    DONT_OUTPUT_DATA is from assemble_variable.  */
220*e4b17023SJohn Marino extern void align_variable (tree decl, bool dont_output_data);
221*e4b17023SJohn Marino 
222*e4b17023SJohn Marino /* Queue for outputting something to declare an external symbol to the
223*e4b17023SJohn Marino    assembler.  (Most assemblers don't need this, so we normally output
224*e4b17023SJohn Marino    nothing.)  Do nothing if DECL is not external.  */
225*e4b17023SJohn Marino extern void assemble_external (tree);
226*e4b17023SJohn Marino 
227*e4b17023SJohn Marino /* Assemble code to leave SIZE bytes of zeros.  */
228*e4b17023SJohn Marino extern void assemble_zeros (unsigned HOST_WIDE_INT);
229*e4b17023SJohn Marino 
230*e4b17023SJohn Marino /* Assemble an alignment pseudo op for an ALIGN-bit boundary.  */
231*e4b17023SJohn Marino extern void assemble_align (int);
232*e4b17023SJohn Marino 
233*e4b17023SJohn Marino /* Assemble a string constant with the specified C string as contents.  */
234*e4b17023SJohn Marino extern void assemble_string (const char *, int);
235*e4b17023SJohn Marino 
236*e4b17023SJohn Marino /* Similar, for calling a library function FUN.  */
237*e4b17023SJohn Marino extern void assemble_external_libcall (rtx);
238*e4b17023SJohn Marino 
239*e4b17023SJohn Marino /* Assemble a label named NAME.  */
240*e4b17023SJohn Marino extern void assemble_label (FILE *, const char *);
241*e4b17023SJohn Marino 
242*e4b17023SJohn Marino /* Output to FILE (an assembly file) a reference to NAME.  If NAME
243*e4b17023SJohn Marino    starts with a *, the rest of NAME is output verbatim.  Otherwise
244*e4b17023SJohn Marino    NAME is transformed in a target-specific way (usually by the
245*e4b17023SJohn Marino    addition of an underscore).  */
246*e4b17023SJohn Marino extern void assemble_name_raw (FILE *, const char *);
247*e4b17023SJohn Marino 
248*e4b17023SJohn Marino /* Like assemble_name_raw, but should be used when NAME might refer to
249*e4b17023SJohn Marino    an entity that is also represented as a tree (like a function or
250*e4b17023SJohn Marino    variable).  If NAME does refer to such an entity, that entity will
251*e4b17023SJohn Marino    be marked as referenced.  */
252*e4b17023SJohn Marino extern void assemble_name (FILE *, const char *);
253*e4b17023SJohn Marino 
254*e4b17023SJohn Marino /* Return the assembler directive for creating a given kind of integer
255*e4b17023SJohn Marino    object.  SIZE is the number of bytes in the object and ALIGNED_P
256*e4b17023SJohn Marino    indicates whether it is known to be aligned.  Return NULL if the
257*e4b17023SJohn Marino    assembly dialect has no such directive.
258*e4b17023SJohn Marino 
259*e4b17023SJohn Marino    The returned string should be printed at the start of a new line and
260*e4b17023SJohn Marino    be followed immediately by the object's initial value.  */
261*e4b17023SJohn Marino extern const char *integer_asm_op (int, int);
262*e4b17023SJohn Marino 
263*e4b17023SJohn Marino /* Use directive OP to assemble an integer object X.  Print OP at the
264*e4b17023SJohn Marino    start of the line, followed immediately by the value of X.  */
265*e4b17023SJohn Marino extern void assemble_integer_with_op (const char *, rtx);
266*e4b17023SJohn Marino 
267*e4b17023SJohn Marino /* The default implementation of the asm_out.integer target hook.  */
268*e4b17023SJohn Marino extern bool default_assemble_integer (rtx, unsigned int, int);
269*e4b17023SJohn Marino 
270*e4b17023SJohn Marino /* Assemble the integer constant X into an object of SIZE bytes.  ALIGN is
271*e4b17023SJohn Marino    the alignment of the integer in bits.  Return 1 if we were able to output
272*e4b17023SJohn Marino    the constant, otherwise 0.  If FORCE is nonzero the constant must
273*e4b17023SJohn Marino    be outputable. */
274*e4b17023SJohn Marino extern bool assemble_integer (rtx, unsigned, unsigned, int);
275*e4b17023SJohn Marino 
276*e4b17023SJohn Marino /* Return section for TEXT_SECITON_NAME if DECL or DECL_SECTION_NAME (DECL)
277*e4b17023SJohn Marino    is NULL.  */
278*e4b17023SJohn Marino extern section *get_named_text_section (tree, const char *, const char *);
279*e4b17023SJohn Marino 
280*e4b17023SJohn Marino /* An interface to assemble_integer for the common case in which a value is
281*e4b17023SJohn Marino    fully aligned and must be printed.  VALUE is the value of the integer
282*e4b17023SJohn Marino    object and SIZE is the number of bytes it contains.  */
283*e4b17023SJohn Marino #define assemble_aligned_integer(SIZE, VALUE) \
284*e4b17023SJohn Marino   assemble_integer (VALUE, SIZE, (SIZE) * BITS_PER_UNIT, 1)
285*e4b17023SJohn Marino 
286*e4b17023SJohn Marino #ifdef REAL_VALUE_TYPE_SIZE
287*e4b17023SJohn Marino /* Assemble the floating-point constant D into an object of size MODE.  */
288*e4b17023SJohn Marino extern void assemble_real (REAL_VALUE_TYPE, enum machine_mode, unsigned);
289*e4b17023SJohn Marino #endif
290*e4b17023SJohn Marino 
291*e4b17023SJohn Marino /* Write the address of the entity given by SYMBOL to SEC.  */
292*e4b17023SJohn Marino extern void assemble_addr_to_section (rtx, section *);
293*e4b17023SJohn Marino 
294*e4b17023SJohn Marino /* Return the size of the constant pool.  */
295*e4b17023SJohn Marino extern int get_pool_size (void);
296*e4b17023SJohn Marino 
297*e4b17023SJohn Marino #ifdef HAVE_peephole
298*e4b17023SJohn Marino extern rtx peephole (rtx);
299*e4b17023SJohn Marino #endif
300*e4b17023SJohn Marino 
301*e4b17023SJohn Marino extern void output_shared_constant_pool (void);
302*e4b17023SJohn Marino 
303*e4b17023SJohn Marino extern void output_object_blocks (void);
304*e4b17023SJohn Marino 
305*e4b17023SJohn Marino extern void output_quoted_string (FILE *, const char *);
306*e4b17023SJohn Marino 
307*e4b17023SJohn Marino /* Whether a constructor CTOR is a valid static constant initializer if all
308*e4b17023SJohn Marino    its elements are.  This used to be internal to initializer_constant_valid_p
309*e4b17023SJohn Marino    and has been exposed to let other functions like categorize_ctor_elements
310*e4b17023SJohn Marino    evaluate the property while walking a constructor for other purposes.  */
311*e4b17023SJohn Marino 
312*e4b17023SJohn Marino extern bool constructor_static_from_elts_p (const_tree);
313*e4b17023SJohn Marino 
314*e4b17023SJohn Marino /* Return nonzero if VALUE is a valid constant-valued expression
315*e4b17023SJohn Marino    for use in initializing a static variable; one that can be an
316*e4b17023SJohn Marino    element of a "constant" initializer.
317*e4b17023SJohn Marino 
318*e4b17023SJohn Marino    Return null_pointer_node if the value is absolute;
319*e4b17023SJohn Marino    if it is relocatable, return the variable that determines the relocation.
320*e4b17023SJohn Marino    We assume that VALUE has been folded as much as possible;
321*e4b17023SJohn Marino    therefore, we do not need to check for such things as
322*e4b17023SJohn Marino    arithmetic-combinations of integers.  */
323*e4b17023SJohn Marino extern tree initializer_constant_valid_p (tree, tree);
324*e4b17023SJohn Marino 
325*e4b17023SJohn Marino /* Return true if VALUE is a valid constant-valued expression
326*e4b17023SJohn Marino    for use in initializing a static bit-field; one that can be
327*e4b17023SJohn Marino    an element of a "constant" initializer.  */
328*e4b17023SJohn Marino extern bool initializer_constant_valid_for_bitfield_p (tree);
329*e4b17023SJohn Marino 
330*e4b17023SJohn Marino /* Output assembler code for constant EXP to FILE, with no label.
331*e4b17023SJohn Marino    This includes the pseudo-op such as ".int" or ".byte", and a newline.
332*e4b17023SJohn Marino    Assumes output_addressed_constants has been done on EXP already.
333*e4b17023SJohn Marino 
334*e4b17023SJohn Marino    Generate exactly SIZE bytes of assembler data, padding at the end
335*e4b17023SJohn Marino    with zeros if necessary.  SIZE must always be specified.
336*e4b17023SJohn Marino 
337*e4b17023SJohn Marino    ALIGN is the alignment in bits that may be assumed for the data.  */
338*e4b17023SJohn Marino extern void output_constant (tree, unsigned HOST_WIDE_INT, unsigned int);
339*e4b17023SJohn Marino 
340*e4b17023SJohn Marino /* When outputting delayed branch sequences, this rtx holds the
341*e4b17023SJohn Marino    sequence being output.  It is null when no delayed branch
342*e4b17023SJohn Marino    sequence is being output, so it can be used as a test in the
343*e4b17023SJohn Marino    insn output code.
344*e4b17023SJohn Marino 
345*e4b17023SJohn Marino    This variable is defined  in final.c.  */
346*e4b17023SJohn Marino extern rtx final_sequence;
347*e4b17023SJohn Marino 
348*e4b17023SJohn Marino /* The line number of the beginning of the current function.  Various
349*e4b17023SJohn Marino    md code needs this so that it can output relative linenumbers.  */
350*e4b17023SJohn Marino 
351*e4b17023SJohn Marino #ifdef SDB_DEBUGGING_INFO /* Avoid undef sym in certain broken linkers.  */
352*e4b17023SJohn Marino extern int sdb_begin_function_line;
353*e4b17023SJohn Marino #endif
354*e4b17023SJohn Marino 
355*e4b17023SJohn Marino /* File in which assembler code is being written.  */
356*e4b17023SJohn Marino 
357*e4b17023SJohn Marino #ifdef BUFSIZ
358*e4b17023SJohn Marino extern FILE *asm_out_file;
359*e4b17023SJohn Marino #endif
360*e4b17023SJohn Marino 
361*e4b17023SJohn Marino /* The first global object in the file.  */
362*e4b17023SJohn Marino extern const char *first_global_object_name;
363*e4b17023SJohn Marino 
364*e4b17023SJohn Marino /* The first weak object in the file.  */
365*e4b17023SJohn Marino extern const char *weak_global_object_name;
366*e4b17023SJohn Marino 
367*e4b17023SJohn Marino /* Nonzero if function being compiled doesn't contain any calls
368*e4b17023SJohn Marino    (ignoring the prologue and epilogue).  This is set prior to
369*e4b17023SJohn Marino    local register allocation and is valid for the remaining
370*e4b17023SJohn Marino    compiler passes.  */
371*e4b17023SJohn Marino 
372*e4b17023SJohn Marino extern int current_function_is_leaf;
373*e4b17023SJohn Marino 
374*e4b17023SJohn Marino /* Nonzero if function being compiled doesn't modify the stack pointer
375*e4b17023SJohn Marino    (ignoring the prologue and epilogue).  This is only valid after
376*e4b17023SJohn Marino    pass_stack_ptr_mod has run.  */
377*e4b17023SJohn Marino 
378*e4b17023SJohn Marino extern int current_function_sp_is_unchanging;
379*e4b17023SJohn Marino 
380*e4b17023SJohn Marino /* Nonzero if the function being compiled is a leaf function which only
381*e4b17023SJohn Marino    uses leaf registers.  This is valid after reload (specifically after
382*e4b17023SJohn Marino    sched2) and is useful only if the port defines LEAF_REGISTERS.  */
383*e4b17023SJohn Marino 
384*e4b17023SJohn Marino extern int current_function_uses_only_leaf_regs;
385*e4b17023SJohn Marino 
386*e4b17023SJohn Marino /* Default file in which to dump debug output.  */
387*e4b17023SJohn Marino 
388*e4b17023SJohn Marino #ifdef BUFSIZ
389*e4b17023SJohn Marino extern FILE *dump_file;
390*e4b17023SJohn Marino #endif
391*e4b17023SJohn Marino 
392*e4b17023SJohn Marino /* Nonnull if the insn currently being emitted was a COND_EXEC pattern.  */
393*e4b17023SJohn Marino extern rtx current_insn_predicate;
394*e4b17023SJohn Marino 
395*e4b17023SJohn Marino /* Last insn processed by final_scan_insn.  */
396*e4b17023SJohn Marino extern rtx current_output_insn;
397*e4b17023SJohn Marino 
398*e4b17023SJohn Marino /* Nonzero while outputting an `asm' with operands.
399*e4b17023SJohn Marino    This means that inconsistencies are the user's fault, so don't die.
400*e4b17023SJohn Marino    The precise value is the insn being output, to pass to error_for_asm.  */
401*e4b17023SJohn Marino extern rtx this_is_asm_operands;
402*e4b17023SJohn Marino 
403*e4b17023SJohn Marino /* Carry information from ASM_DECLARE_OBJECT_NAME
404*e4b17023SJohn Marino    to ASM_FINISH_DECLARE_OBJECT.  */
405*e4b17023SJohn Marino extern int size_directive_output;
406*e4b17023SJohn Marino extern tree last_assemble_variable_decl;
407*e4b17023SJohn Marino 
408*e4b17023SJohn Marino extern bool first_function_block_is_cold;
409*e4b17023SJohn Marino 
410*e4b17023SJohn Marino /* Decide whether DECL needs to be in a writable section.
411*e4b17023SJohn Marino    RELOC is the same as for SELECT_SECTION.  */
412*e4b17023SJohn Marino extern bool decl_readonly_section (const_tree, int);
413*e4b17023SJohn Marino 
414*e4b17023SJohn Marino /* This can be used to compute RELOC for the function above, when
415*e4b17023SJohn Marino    given a constant expression.  */
416*e4b17023SJohn Marino extern int compute_reloc_for_constant (tree);
417*e4b17023SJohn Marino 
418*e4b17023SJohn Marino /* User label prefix in effect for this compilation.  */
419*e4b17023SJohn Marino extern const char *user_label_prefix;
420*e4b17023SJohn Marino 
421*e4b17023SJohn Marino /* Default target function prologue and epilogue assembler output.  */
422*e4b17023SJohn Marino extern void default_function_pro_epilogue (FILE *, HOST_WIDE_INT);
423*e4b17023SJohn Marino 
424*e4b17023SJohn Marino /* Default target function switched text sections.  */
425*e4b17023SJohn Marino extern void default_function_switched_text_sections (FILE *, tree, bool);
426*e4b17023SJohn Marino 
427*e4b17023SJohn Marino /* Default target hook that outputs nothing to a stream.  */
428*e4b17023SJohn Marino extern void no_asm_to_stream (FILE *);
429*e4b17023SJohn Marino 
430*e4b17023SJohn Marino /* Flags controlling properties of a section.  */
431*e4b17023SJohn Marino #define SECTION_ENTSIZE	 0x000ff	/* entity size in section */
432*e4b17023SJohn Marino #define SECTION_CODE	 0x00100	/* contains code */
433*e4b17023SJohn Marino #define SECTION_WRITE	 0x00200	/* data is writable */
434*e4b17023SJohn Marino #define SECTION_DEBUG	 0x00400	/* contains debug data */
435*e4b17023SJohn Marino #define SECTION_LINKONCE 0x00800	/* is linkonce */
436*e4b17023SJohn Marino #define SECTION_SMALL	 0x01000	/* contains "small data" */
437*e4b17023SJohn Marino #define SECTION_BSS	 0x02000	/* contains zeros only */
438*e4b17023SJohn Marino #define SECTION_FORGET	 0x04000	/* forget that we've entered the section */
439*e4b17023SJohn Marino #define SECTION_MERGE	 0x08000	/* contains mergeable data */
440*e4b17023SJohn Marino #define SECTION_STRINGS  0x10000	/* contains zero terminated strings without
441*e4b17023SJohn Marino 					   embedded zeros */
442*e4b17023SJohn Marino #define SECTION_OVERRIDE 0x20000	/* allow override of default flags */
443*e4b17023SJohn Marino #define SECTION_TLS	 0x40000	/* contains thread-local storage */
444*e4b17023SJohn Marino #define SECTION_NOTYPE	 0x80000	/* don't output @progbits */
445*e4b17023SJohn Marino #define SECTION_DECLARED 0x100000	/* section has been used */
446*e4b17023SJohn Marino #define SECTION_STYLE_MASK 0x600000	/* bits used for SECTION_STYLE */
447*e4b17023SJohn Marino #define SECTION_COMMON   0x800000	/* contains common data */
448*e4b17023SJohn Marino #define SECTION_RELRO	 0x1000000	/* data is readonly after relocation processing */
449*e4b17023SJohn Marino #define SECTION_EXCLUDE  0x2000000	/* discarded by the linker */
450*e4b17023SJohn Marino #define SECTION_MACH_DEP 0x4000000	/* subsequent bits reserved for target */
451*e4b17023SJohn Marino 
452*e4b17023SJohn Marino /* This SECTION_STYLE is used for unnamed sections that we can switch
453*e4b17023SJohn Marino    to using a special assembler directive.  */
454*e4b17023SJohn Marino #define SECTION_UNNAMED	 0x000000
455*e4b17023SJohn Marino 
456*e4b17023SJohn Marino /* This SECTION_STYLE is used for named sections that we can switch
457*e4b17023SJohn Marino    to using a general section directive.  */
458*e4b17023SJohn Marino #define SECTION_NAMED	 0x200000
459*e4b17023SJohn Marino 
460*e4b17023SJohn Marino /* This SECTION_STYLE is used for sections that we cannot switch to at
461*e4b17023SJohn Marino    all.  The choice of section is implied by the directive that we use
462*e4b17023SJohn Marino    to declare the object.  */
463*e4b17023SJohn Marino #define SECTION_NOSWITCH 0x400000
464*e4b17023SJohn Marino 
465*e4b17023SJohn Marino /* A helper function for default_elf_select_section and
466*e4b17023SJohn Marino    default_elf_unique_section.  Categorizes the DECL.  */
467*e4b17023SJohn Marino 
468*e4b17023SJohn Marino enum section_category
469*e4b17023SJohn Marino {
470*e4b17023SJohn Marino   SECCAT_TEXT,
471*e4b17023SJohn Marino 
472*e4b17023SJohn Marino   SECCAT_RODATA,
473*e4b17023SJohn Marino   SECCAT_RODATA_MERGE_STR,
474*e4b17023SJohn Marino   SECCAT_RODATA_MERGE_STR_INIT,
475*e4b17023SJohn Marino   SECCAT_RODATA_MERGE_CONST,
476*e4b17023SJohn Marino   SECCAT_SRODATA,
477*e4b17023SJohn Marino 
478*e4b17023SJohn Marino   SECCAT_DATA,
479*e4b17023SJohn Marino 
480*e4b17023SJohn Marino   /* To optimize loading of shared programs, define following subsections
481*e4b17023SJohn Marino      of data section:
482*e4b17023SJohn Marino 	_REL	Contains data that has relocations, so they get grouped
483*e4b17023SJohn Marino 		together and dynamic linker will visit fewer pages in memory.
484*e4b17023SJohn Marino 	_RO	Contains data that is otherwise read-only.  This is useful
485*e4b17023SJohn Marino 		with prelinking as most relocations won't be dynamically
486*e4b17023SJohn Marino 		linked and thus stay read only.
487*e4b17023SJohn Marino 	_LOCAL	Marks data containing relocations only to local objects.
488*e4b17023SJohn Marino 		These relocations will get fully resolved by prelinking.  */
489*e4b17023SJohn Marino   SECCAT_DATA_REL,
490*e4b17023SJohn Marino   SECCAT_DATA_REL_LOCAL,
491*e4b17023SJohn Marino   SECCAT_DATA_REL_RO,
492*e4b17023SJohn Marino   SECCAT_DATA_REL_RO_LOCAL,
493*e4b17023SJohn Marino 
494*e4b17023SJohn Marino   SECCAT_SDATA,
495*e4b17023SJohn Marino   SECCAT_TDATA,
496*e4b17023SJohn Marino 
497*e4b17023SJohn Marino   SECCAT_BSS,
498*e4b17023SJohn Marino   SECCAT_SBSS,
499*e4b17023SJohn Marino   SECCAT_TBSS
500*e4b17023SJohn Marino };
501*e4b17023SJohn Marino 
502*e4b17023SJohn Marino /* Information that is provided by all instances of the section type.  */
503*e4b17023SJohn Marino struct GTY(()) section_common {
504*e4b17023SJohn Marino   /* The set of SECTION_* flags that apply to this section.  */
505*e4b17023SJohn Marino   unsigned int flags;
506*e4b17023SJohn Marino };
507*e4b17023SJohn Marino 
508*e4b17023SJohn Marino /* Information about a SECTION_NAMED section.  */
509*e4b17023SJohn Marino struct GTY(()) named_section {
510*e4b17023SJohn Marino   struct section_common common;
511*e4b17023SJohn Marino 
512*e4b17023SJohn Marino   /* The name of the section.  */
513*e4b17023SJohn Marino   const char *name;
514*e4b17023SJohn Marino 
515*e4b17023SJohn Marino   /* If nonnull, the VAR_DECL or FUNCTION_DECL with which the
516*e4b17023SJohn Marino      section is associated.  */
517*e4b17023SJohn Marino   tree decl;
518*e4b17023SJohn Marino };
519*e4b17023SJohn Marino 
520*e4b17023SJohn Marino /* A callback that writes the assembly code for switching to an unnamed
521*e4b17023SJohn Marino    section.  The argument provides callback-specific data.  */
522*e4b17023SJohn Marino typedef void (*unnamed_section_callback) (const void *);
523*e4b17023SJohn Marino 
524*e4b17023SJohn Marino /* Information about a SECTION_UNNAMED section.  */
525*e4b17023SJohn Marino struct GTY(()) unnamed_section {
526*e4b17023SJohn Marino   struct section_common common;
527*e4b17023SJohn Marino 
528*e4b17023SJohn Marino   /* The callback used to switch to the section, and the data that
529*e4b17023SJohn Marino      should be passed to the callback.  */
530*e4b17023SJohn Marino   unnamed_section_callback GTY ((skip)) callback;
531*e4b17023SJohn Marino   const void *GTY ((skip)) data;
532*e4b17023SJohn Marino 
533*e4b17023SJohn Marino   /* The next entry in the chain of unnamed sections.  */
534*e4b17023SJohn Marino   section *next;
535*e4b17023SJohn Marino };
536*e4b17023SJohn Marino 
537*e4b17023SJohn Marino /* A callback that writes the assembly code for a decl in a
538*e4b17023SJohn Marino    SECTION_NOSWITCH section.  DECL is the decl that should be assembled
539*e4b17023SJohn Marino    and NAME is the name of its SYMBOL_REF.  SIZE is the size of the decl
540*e4b17023SJohn Marino    in bytes and ROUNDED is that size rounded up to the next
541*e4b17023SJohn Marino    BIGGEST_ALIGNMENT / BITS_PER_UNIT boundary.
542*e4b17023SJohn Marino 
543*e4b17023SJohn Marino    Return true if the callback used DECL_ALIGN to set the object's
544*e4b17023SJohn Marino    alignment.  A false return value implies that we are relying
545*e4b17023SJohn Marino    on the rounded size to align the decl.  */
546*e4b17023SJohn Marino typedef bool (*noswitch_section_callback) (tree decl, const char *name,
547*e4b17023SJohn Marino 					   unsigned HOST_WIDE_INT size,
548*e4b17023SJohn Marino 					   unsigned HOST_WIDE_INT rounded);
549*e4b17023SJohn Marino 
550*e4b17023SJohn Marino /* Information about a SECTION_NOSWITCH section.  */
551*e4b17023SJohn Marino struct GTY(()) noswitch_section {
552*e4b17023SJohn Marino   struct section_common common;
553*e4b17023SJohn Marino 
554*e4b17023SJohn Marino   /* The callback used to assemble decls in this section.  */
555*e4b17023SJohn Marino   noswitch_section_callback GTY ((skip)) callback;
556*e4b17023SJohn Marino };
557*e4b17023SJohn Marino 
558*e4b17023SJohn Marino /* Information about a section, which may be named or unnamed.  */
559*e4b17023SJohn Marino union GTY ((desc ("SECTION_STYLE (&(%h))"))) section {
560*e4b17023SJohn Marino   struct section_common GTY ((skip)) common;
561*e4b17023SJohn Marino   struct named_section GTY ((tag ("SECTION_NAMED"))) named;
562*e4b17023SJohn Marino   struct unnamed_section GTY ((tag ("SECTION_UNNAMED"))) unnamed;
563*e4b17023SJohn Marino   struct noswitch_section GTY ((tag ("SECTION_NOSWITCH"))) noswitch;
564*e4b17023SJohn Marino };
565*e4b17023SJohn Marino 
566*e4b17023SJohn Marino /* Return the style of section SECT.  */
567*e4b17023SJohn Marino #define SECTION_STYLE(SECT) ((SECT)->common.flags & SECTION_STYLE_MASK)
568*e4b17023SJohn Marino 
569*e4b17023SJohn Marino struct object_block;
570*e4b17023SJohn Marino 
571*e4b17023SJohn Marino /* Special well-known sections.  */
572*e4b17023SJohn Marino extern GTY(()) section *text_section;
573*e4b17023SJohn Marino extern GTY(()) section *data_section;
574*e4b17023SJohn Marino extern GTY(()) section *readonly_data_section;
575*e4b17023SJohn Marino extern GTY(()) section *sdata_section;
576*e4b17023SJohn Marino extern GTY(()) section *ctors_section;
577*e4b17023SJohn Marino extern GTY(()) section *dtors_section;
578*e4b17023SJohn Marino extern GTY(()) section *bss_section;
579*e4b17023SJohn Marino extern GTY(()) section *sbss_section;
580*e4b17023SJohn Marino extern GTY(()) section *exception_section;
581*e4b17023SJohn Marino extern GTY(()) section *eh_frame_section;
582*e4b17023SJohn Marino extern GTY(()) section *tls_comm_section;
583*e4b17023SJohn Marino extern GTY(()) section *comm_section;
584*e4b17023SJohn Marino extern GTY(()) section *lcomm_section;
585*e4b17023SJohn Marino extern GTY(()) section *bss_noswitch_section;
586*e4b17023SJohn Marino 
587*e4b17023SJohn Marino extern GTY(()) section *in_section;
588*e4b17023SJohn Marino extern GTY(()) bool in_cold_section_p;
589*e4b17023SJohn Marino 
590*e4b17023SJohn Marino extern section *get_unnamed_section (unsigned int, void (*) (const void *),
591*e4b17023SJohn Marino 				     const void *);
592*e4b17023SJohn Marino extern section *get_section (const char *, unsigned int, tree);
593*e4b17023SJohn Marino extern section *get_named_section (tree, const char *, int);
594*e4b17023SJohn Marino extern section *get_variable_section (tree, bool);
595*e4b17023SJohn Marino extern void place_block_symbol (rtx);
596*e4b17023SJohn Marino extern rtx get_section_anchor (struct object_block *, HOST_WIDE_INT,
597*e4b17023SJohn Marino 			       enum tls_model);
598*e4b17023SJohn Marino extern section *mergeable_constant_section (enum machine_mode,
599*e4b17023SJohn Marino 					    unsigned HOST_WIDE_INT,
600*e4b17023SJohn Marino 					    unsigned int);
601*e4b17023SJohn Marino extern section *function_section (tree);
602*e4b17023SJohn Marino extern section *unlikely_text_section (void);
603*e4b17023SJohn Marino extern section *current_function_section (void);
604*e4b17023SJohn Marino 
605*e4b17023SJohn Marino /* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if
606*e4b17023SJohn Marino    not) section for PRIORITY.  */
607*e4b17023SJohn Marino extern section *get_cdtor_priority_section (int, bool);
608*e4b17023SJohn Marino 
609*e4b17023SJohn Marino extern bool unlikely_text_section_p (section *);
610*e4b17023SJohn Marino extern void switch_to_section (section *);
611*e4b17023SJohn Marino extern void output_section_asm_op (const void *);
612*e4b17023SJohn Marino 
613*e4b17023SJohn Marino extern void record_tm_clone_pair (tree, tree);
614*e4b17023SJohn Marino extern void finish_tm_clone_pairs (void);
615*e4b17023SJohn Marino extern tree get_tm_clone_pair (tree);
616*e4b17023SJohn Marino 
617*e4b17023SJohn Marino extern void default_asm_output_source_filename (FILE *, const char *);
618*e4b17023SJohn Marino extern void output_file_directive (FILE *, const char *);
619*e4b17023SJohn Marino 
620*e4b17023SJohn Marino extern unsigned int default_section_type_flags (tree, const char *, int);
621*e4b17023SJohn Marino 
622*e4b17023SJohn Marino extern bool have_global_bss_p (void);
623*e4b17023SJohn Marino extern void default_no_named_section (const char *, unsigned int, tree);
624*e4b17023SJohn Marino extern void default_elf_asm_named_section (const char *, unsigned int, tree);
625*e4b17023SJohn Marino extern enum section_category categorize_decl_for_section (const_tree, int);
626*e4b17023SJohn Marino extern void default_coff_asm_named_section (const char *, unsigned int, tree);
627*e4b17023SJohn Marino extern void default_pe_asm_named_section (const char *, unsigned int, tree);
628*e4b17023SJohn Marino 
629*e4b17023SJohn Marino extern void default_stabs_asm_out_destructor (rtx, int);
630*e4b17023SJohn Marino extern void default_named_section_asm_out_destructor (rtx, int);
631*e4b17023SJohn Marino extern void default_dtor_section_asm_out_destructor (rtx, int);
632*e4b17023SJohn Marino extern void default_stabs_asm_out_constructor (rtx, int);
633*e4b17023SJohn Marino extern void default_named_section_asm_out_constructor (rtx, int);
634*e4b17023SJohn Marino extern void default_ctor_section_asm_out_constructor (rtx, int);
635*e4b17023SJohn Marino 
636*e4b17023SJohn Marino extern section *default_select_section (tree, int, unsigned HOST_WIDE_INT);
637*e4b17023SJohn Marino extern section *default_elf_select_section (tree, int, unsigned HOST_WIDE_INT);
638*e4b17023SJohn Marino extern void default_unique_section (tree, int);
639*e4b17023SJohn Marino extern section *default_function_rodata_section (tree);
640*e4b17023SJohn Marino extern section *default_no_function_rodata_section (tree);
641*e4b17023SJohn Marino extern section *default_clone_table_section (void);
642*e4b17023SJohn Marino extern section *default_select_rtx_section (enum machine_mode, rtx,
643*e4b17023SJohn Marino 					    unsigned HOST_WIDE_INT);
644*e4b17023SJohn Marino extern section *default_elf_select_rtx_section (enum machine_mode, rtx,
645*e4b17023SJohn Marino 						unsigned HOST_WIDE_INT);
646*e4b17023SJohn Marino extern void default_encode_section_info (tree, rtx, int);
647*e4b17023SJohn Marino extern const char *default_strip_name_encoding (const char *);
648*e4b17023SJohn Marino extern void default_asm_output_anchor (rtx);
649*e4b17023SJohn Marino extern bool default_use_anchors_for_symbol_p (const_rtx);
650*e4b17023SJohn Marino extern bool default_binds_local_p (const_tree);
651*e4b17023SJohn Marino extern bool default_binds_local_p_1 (const_tree, int);
652*e4b17023SJohn Marino extern void default_globalize_label (FILE *, const char *);
653*e4b17023SJohn Marino extern void default_globalize_decl_name (FILE *, tree);
654*e4b17023SJohn Marino extern void default_emit_unwind_label (FILE *, tree, int, int);
655*e4b17023SJohn Marino extern void default_emit_except_table_label (FILE *);
656*e4b17023SJohn Marino extern void default_generate_internal_label (char *, const char *,
657*e4b17023SJohn Marino 					     unsigned long);
658*e4b17023SJohn Marino extern void default_internal_label (FILE *, const char *, unsigned long);
659*e4b17023SJohn Marino extern void default_asm_declare_constant_name (FILE *, const char *,
660*e4b17023SJohn Marino 					       const_tree, HOST_WIDE_INT);
661*e4b17023SJohn Marino extern void default_file_start (void);
662*e4b17023SJohn Marino extern void file_end_indicate_exec_stack (void);
663*e4b17023SJohn Marino extern void file_end_indicate_split_stack (void);
664*e4b17023SJohn Marino 
665*e4b17023SJohn Marino extern void default_elf_asm_output_external (FILE *file, tree,
666*e4b17023SJohn Marino 					     const char *);
667*e4b17023SJohn Marino extern void default_elf_asm_output_limited_string (FILE *, const char *);
668*e4b17023SJohn Marino extern void default_elf_asm_output_ascii (FILE *, const char *, unsigned int);
669*e4b17023SJohn Marino extern void default_elf_internal_label (FILE *, const char *, unsigned long);
670*e4b17023SJohn Marino 
671*e4b17023SJohn Marino extern void default_elf_init_array_asm_out_constructor (rtx, int);
672*e4b17023SJohn Marino extern void default_elf_fini_array_asm_out_destructor (rtx, int);
673*e4b17023SJohn Marino extern int maybe_assemble_visibility (tree);
674*e4b17023SJohn Marino 
675*e4b17023SJohn Marino extern int default_address_cost (rtx, bool);
676*e4b17023SJohn Marino 
677*e4b17023SJohn Marino /* Output stack usage information.  */
678*e4b17023SJohn Marino extern void output_stack_usage (void);
679*e4b17023SJohn Marino 
680*e4b17023SJohn Marino /* dbxout helper functions */
681*e4b17023SJohn Marino #if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO
682*e4b17023SJohn Marino 
683*e4b17023SJohn Marino extern void dbxout_int (int);
684*e4b17023SJohn Marino extern void dbxout_stabd (int, int);
685*e4b17023SJohn Marino extern void dbxout_begin_stabn (int);
686*e4b17023SJohn Marino extern void dbxout_begin_stabn_sline (int);
687*e4b17023SJohn Marino extern void dbxout_begin_empty_stabs (int);
688*e4b17023SJohn Marino extern void dbxout_begin_simple_stabs (const char *, int);
689*e4b17023SJohn Marino extern void dbxout_begin_simple_stabs_desc (const char *, int, int);
690*e4b17023SJohn Marino 
691*e4b17023SJohn Marino extern void dbxout_stab_value_zero (void);
692*e4b17023SJohn Marino extern void dbxout_stab_value_label (const char *);
693*e4b17023SJohn Marino extern void dbxout_stab_value_label_diff (const char *, const char *);
694*e4b17023SJohn Marino extern void dbxout_stab_value_internal_label (const char *, int *);
695*e4b17023SJohn Marino extern void dbxout_stab_value_internal_label_diff (const char *, int *,
696*e4b17023SJohn Marino 						   const char *);
697*e4b17023SJohn Marino 
698*e4b17023SJohn Marino #endif
699*e4b17023SJohn Marino 
700*e4b17023SJohn Marino #endif /* ! GCC_OUTPUT_H */
701