Annotation of gcc/output.h, revision 1.1.1.6

1.1       root        1: /* Declarations for insn-output.c.  These functions are defined in recog.c,
                      2:    final.c, and varasm.c.
1.1.1.5   root        3:    Copyright (C) 1987, 1991, 1994 Free Software Foundation, Inc.
1.1       root        4: 
                      5: This file is part of GNU CC.
                      6: 
                      7: GNU CC is free software; you can redistribute it and/or modify
                      8: it under the terms of the GNU General Public License as published by
                      9: the Free Software Foundation; either version 2, or (at your option)
                     10: any later version.
                     11: 
                     12: GNU CC is distributed in the hope that it will be useful,
                     13: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15: GNU General Public License for more details.
                     16: 
                     17: You should have received a copy of the GNU General Public License
                     18: along with GNU CC; see the file COPYING.  If not, write to
1.1.1.6 ! root       19: the Free Software Foundation, 59 Temple Place - Suite 330,
        !            20: Boston, MA 02111-1307, USA.  */
1.1       root       21: 
1.1.1.5   root       22: /* Initialize data in final at the beginning of a compilation.  */
                     23: extern void init_final         PROTO((char *));
                     24: 
                     25: /* Called at end of source file,
                     26:    to output the block-profiling table for this entire compilation.  */
                     27: extern void end_final          PROTO((char *));
                     28: 
                     29: /* Enable APP processing of subsequent output.
                     30:    Used before the output from an `asm' statement.  */
                     31: extern void app_enable         PROTO((void));
                     32: 
                     33: /* Disable APP processing of subsequent output.
                     34:    Called from varasm.c before most kinds of output.  */
                     35: extern void app_disable                PROTO((void));
                     36: 
                     37: /* Return the number of slots filled in the current 
                     38:    delayed branch sequence (we don't count the insn needing the
                     39:    delay slot).   Zero if not in a delayed branch sequence.  */
                     40: extern int dbr_sequence_length PROTO((void));
                     41: 
                     42: /* Indicate that branch shortening hasn't yet been done.  */
                     43: extern void init_insn_lengths  PROTO((void));
                     44: 
1.1.1.6 ! root       45: #ifdef RTX_CODE
1.1.1.5   root       46: /* Obtain the current length of an insn.  If branch shortening has been done,
                     47:    get its actual length.  Otherwise, get its maximum length.  */
                     48: extern int get_attr_length     PROTO((rtx));
                     49: 
                     50: /* Make a pass over all insns and compute their actual lengths by shortening
                     51:    any branches of variable length if possible.  */
                     52: extern void shorten_branches   PROTO((rtx));
                     53: 
                     54: /* Output assembler code for the start of a function,
                     55:    and initialize some of the variables in this file
                     56:    for the new function.  The label for the function and associated
                     57:    assembler pseudo-ops have already been output in
                     58:    `assemble_start_function'.  */
                     59: extern void final_start_function  STDIO_PROTO((rtx, FILE *, int));
                     60: 
                     61: /* Output assembler code for the end of a function.
                     62:    For clarity, args are same as those of `final_start_function'
                     63:    even though not all of them are needed.  */
                     64: extern void final_end_function  STDIO_PROTO((rtx, FILE *, int));
                     65: 
                     66: /* Output assembler code for some insns: all or part of a function.  */
                     67: extern void final              STDIO_PROTO((rtx, FILE *, int, int));
                     68: 
                     69: /* The final scan for one insn, INSN.  Args are same as in `final', except
                     70:    that INSN is the insn being scanned.  Value returned is the next insn to
                     71:    be scanned.  */
                     72: extern rtx final_scan_insn     STDIO_PROTO((rtx, FILE *, int, int, int));
                     73: 
                     74: /* Replace a SUBREG with a REG or a MEM, based on the thing it is a
                     75:    subreg of.  */
                     76: extern rtx alter_subreg PROTO((rtx));
                     77: 
                     78: /* Report inconsistency between the assembler template and the operands.
                     79:    In an `asm', it's the user's fault; otherwise, the compiler's fault.  */
                     80: extern void output_operand_lossage  PROTO((char *));
1.1.1.4   root       81: 
1.1       root       82: /* Output a string of assembler code, substituting insn operands.
                     83:    Defined in final.c.  */
1.1.1.5   root       84: extern void output_asm_insn    PROTO((char *, rtx *));
1.1       root       85: 
1.1.1.5   root       86: /* Output a LABEL_REF, or a bare CODE_LABEL, as an assembler symbol.  */
                     87: extern void output_asm_label   PROTO((rtx));
                     88: 
                     89: /* Print a memory reference operand for address X
                     90:    using machine-dependent assembler syntax.  */
                     91: extern void output_address     PROTO((rtx));
1.1       root       92: 
1.1.1.3   root       93: /* Print an integer constant expression in assembler syntax.
                     94:    Addition and subtraction are the only arithmetic
                     95:    that may appear in these expressions.  */
1.1.1.4   root       96: extern void output_addr_const STDIO_PROTO((FILE *, rtx));
1.1.1.3   root       97: 
1.1.1.5   root       98: /* Output a string of assembler code, substituting numbers, strings
                     99:    and fixed syntactic prefixes.  */
                    100: extern void asm_fprintf                STDIO_PROTO(PVPROTO((FILE *file,
                    101:                                                     char *p, ...)));
                    102: 
                    103: /* Split up a CONST_DOUBLE or integer constant rtx into two rtx's for single
                    104:    words.  */
                    105: extern void split_double       PROTO((rtx, rtx *, rtx *));
                    106: 
                    107: /* Return nonzero if this function has no function calls.  */
                    108: extern int leaf_function_p     PROTO((void));
                    109: 
                    110: /* Return 1 if this function uses only the registers that can be
                    111:    safely renumbered.  */
                    112: extern int only_leaf_regs_used PROTO((void));
                    113: 
                    114: /* Scan IN_RTX and its subexpressions, and renumber all regs into those
                    115:    available in leaf functions.  */
                    116: extern void leaf_renumber_regs_insn PROTO((rtx));
1.1.1.6 ! root      117: #endif
        !           118: 
        !           119: /* Functions in varasm.c.  */
        !           120: 
        !           121: /* Tell assembler to switch to text section.  */
        !           122: extern void text_section               PROTO((void));
        !           123: 
        !           124: /* Tell assembler to switch to data section.  */
        !           125: extern void data_section               PROTO((void));
        !           126: 
        !           127: /* Tell assembler to switch to read-only data section.  This is normally
        !           128:    the text section.  */
        !           129: extern void readonly_data_section      PROTO((void));
        !           130: 
        !           131: /* Determine if we're in the text section. */
        !           132: extern int in_text_section             PROTO((void));
        !           133: 
        !           134: #ifdef TREE_CODE
        !           135: /* Tell assembler to change to section NAME for DECL.
        !           136:    If DECL is NULL, just switch to section NAME.
        !           137:    If NAME is NULL, get the name from DECL.  */
        !           138: extern void named_section              PROTO((tree, char *));
        !           139: 
        !           140: /* Tell assembler to switch to the section for function DECL.  */
        !           141: extern void function_section           PROTO((tree));
        !           142: 
        !           143: /* Create the rtl to represent a function, for a function definition.
        !           144:    DECL is a FUNCTION_DECL node which describes which function.
        !           145:    The rtl is stored into DECL.  */
        !           146: extern void make_function_rtl          PROTO((tree));
        !           147: 
        !           148: /* Decode an `asm' spec for a declaration as a register name.
        !           149:    Return the register number, or -1 if nothing specified,
        !           150:    or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
        !           151:    or -3 if ASMSPEC is `cc' and is not recognized,
        !           152:    or -4 if ASMSPEC is `memory' and is not recognized.
        !           153:    Accept an exact spelling or a decimal number.
        !           154:    Prefixes such as % are optional.  */
        !           155: extern int decode_reg_name             PROTO((char *));
        !           156: 
        !           157: /* Create the DECL_RTL for a declaration for a static or external variable
        !           158:    or static or external function.
        !           159:    ASMSPEC, if not 0, is the string which the user specified
        !           160:    as the assembler symbol name.
        !           161:    TOP_LEVEL is nonzero if this is a file-scope variable.
        !           162: 
        !           163:    This is never called for PARM_DECL nodes.  */
        !           164: extern void make_decl_rtl              PROTO((tree, char *, int));
        !           165: 
        !           166: /* Make the rtl for variable VAR be volatile.
        !           167:    Use this only for static variables.  */
        !           168: extern void make_var_volatile          PROTO((tree));
        !           169: 
        !           170: /* Output alignment directive to align for constant expression EXP.  */
        !           171: extern void assemble_constant_align    PROTO((tree));
        !           172: 
        !           173: /* Output a string of literal assembler code
        !           174:    for an `asm' keyword used between functions.  */
        !           175: extern void assemble_asm               PROTO((tree));
        !           176: 
        !           177: /* Record an element in the table of global destructors.
        !           178:    How this is done depends on what sort of assembler and linker
        !           179:    are in use.
        !           180: 
        !           181:    NAME should be the name of a global function to be called
        !           182:    at exit time.  This name is output using assemble_name.  */
        !           183: extern void assemble_destructor                PROTO((char *));
        !           184: 
        !           185: /* Likewise for global constructors.  */
        !           186: extern void assemble_constructor       PROTO((char *));
        !           187: 
        !           188: /* Likewise for entries we want to record for garbage collection.
        !           189:    Garbage collection is still under development.  */
        !           190: extern void assemble_gc_entry          PROTO((char *));
        !           191: 
        !           192: /* Output assembler code for the constant pool of a function and associated
        !           193:    with defining the name of the function.  DECL describes the function.
        !           194:    NAME is the function's name.  For the constant pool, we use the current
        !           195:    constant pool data.  */
        !           196: extern void assemble_start_function    PROTO((tree, char *));
        !           197: 
        !           198: /* Output assembler code associated with defining the size of the
        !           199:    function.  DECL describes the function.  NAME is the function's name.  */
        !           200: extern void assemble_end_function      PROTO((tree, char *));
        !           201: 
        !           202: /* Assemble code to leave SIZE bytes of zeros.  */
        !           203: extern void assemble_zeros             PROTO((int));
        !           204: 
        !           205: /* Assemble an alignment pseudo op for an ALIGN-bit boundary.  */
        !           206: extern void assemble_align             PROTO((int));
        !           207: 
        !           208: /* Assemble a string constant with the specified C string as contents.  */
        !           209: extern void assemble_string            PROTO((char *, int));
        !           210: /* Assemble everything that is needed for a variable or function declaration.
        !           211:    Not used for automatic variables, and not used for function definitions.
        !           212:    Should not be called for variables of incomplete structure type.
        !           213: 
        !           214:    TOP_LEVEL is nonzero if this variable has file scope.
        !           215:    AT_END is nonzero if this is the special handling, at end of compilation,
        !           216:    to define things that have had only tentative definitions.
        !           217:    DONT_OUTPUT_DATA if nonzero means don't actually output the
        !           218:    initial value (that will be done by the caller).  */
        !           219: extern void assemble_variable          PROTO((tree, int, int, int));
        !           220: 
        !           221: /* Output text storage for constructor CONSTR. */
        !           222: extern void bc_output_constructor      PROTO((tree, int));
        !           223: 
        !           224: /* Create storage for constructor CONSTR. */
        !           225: extern void bc_output_data_constructor PROTO((tree));
        !           226: 
        !           227: /* Output something to declare an external symbol to the assembler.
        !           228:    (Most assemblers don't need this, so we normally output nothing.)
        !           229:    Do nothing if DECL is not external.  */
        !           230: extern void assemble_external          PROTO((tree));
        !           231: #endif
        !           232: 
        !           233: #ifdef RTX_CODE
        !           234: /* Similar, for calling a library function FUN.  */
        !           235: extern void assemble_external_libcall  PROTO((rtx));
        !           236: #endif
        !           237: 
        !           238: /* Declare the label NAME global.  */
        !           239: extern void assemble_global            PROTO((char *));
1.1.1.5   root      240: 
1.1.1.6 ! root      241: /* Assemble a label named NAME.  */
        !           242: extern void assemble_label             PROTO((char *));
        !           243: 
        !           244: /* Output to FILE a reference to the assembler name of a C-level name NAME.
        !           245:    If NAME starts with a *, the rest of NAME is output verbatim.
        !           246:    Otherwise NAME is transformed in an implementation-defined way
        !           247:    (usually by the addition of an underscore).
        !           248:    Many macros in the tm file are defined to call this function.  */
        !           249: extern void assemble_name              STDIO_PROTO((FILE *, char *));
        !           250: 
        !           251: #ifdef RTX_CODE
        !           252: /* Assemble the integer constant X into an object of SIZE bytes.
        !           253:    X must be either a CONST_INT or CONST_DOUBLE.
        !           254: 
        !           255:    Return 1 if we were able to output the constant, otherwise 0.  If FORCE is
        !           256:    non-zero, abort if we can't output the constant.  */
        !           257: extern int assemble_integer            PROTO((rtx, int, int));
        !           258: 
        !           259: #ifdef EMUSHORT
        !           260: /* Assemble the floating-point constant D into an object of size MODE.  */
        !           261: extern void assemble_real              PROTO((REAL_VALUE_TYPE,
        !           262:                                               enum machine_mode));
        !           263: #endif
        !           264: #endif
        !           265: 
        !           266: /* At the end of a function, forget the memory-constants
        !           267:    previously made for CONST_DOUBLEs.  Mark them as not on real_constant_chain.
        !           268:    Also clear out real_constant_chain and clear out all the chain-pointers.  */
        !           269: extern void clear_const_double_mem     PROTO((void));
        !           270: 
        !           271: /* Start deferring output of subconstants.  */
        !           272: extern void defer_addressed_constants  PROTO((void));
        !           273: 
        !           274: /* Stop deferring output of subconstants,
        !           275:    and output now all those that have been deferred.  */
        !           276: extern void output_deferred_addressed_constants PROTO((void));
        !           277: 
        !           278: /* Initialize constant pool hashing for next function.  */
        !           279: extern void init_const_rtx_hash_table  PROTO((void));
        !           280: 
        !           281: /* Return the size of the constant pool.  */
        !           282: extern int get_pool_size               PROTO((void));
        !           283: 
        !           284: #ifdef TREE_CODE
        !           285: /* Write all the constants in the constant pool.  */
        !           286: extern void output_constant_pool       PROTO((char *, tree));
        !           287: 
        !           288: /* Output assembler code for constant EXP to FILE, with no label.
        !           289:    This includes the pseudo-op such as ".int" or ".byte", and a newline.
        !           290:    Assumes output_addressed_constants has been done on EXP already.
        !           291: 
        !           292:    Generate exactly SIZE bytes of assembler data, padding at the end
        !           293:    with zeros if necessary.  SIZE must always be specified.  */
        !           294: extern void output_constant            PROTO((tree, int));
        !           295: #endif
1.1.1.3   root      296: 
1.1       root      297: /* When outputting assembler code, indicates which alternative
                    298:    of the constraints was actually satisfied.  */
                    299: extern int which_alternative;
                    300: 
1.1.1.6 ! root      301: #ifdef RTX_CODE
1.1       root      302: /* When outputting delayed branch sequences, this rtx holds the
                    303:    sequence being output.  It is null when no delayed branch
                    304:    sequence is being output, so it can be used as a test in the
                    305:    insn output code.
                    306: 
                    307:    This variable is defined  in final.c.  */
                    308: extern rtx final_sequence;
1.1.1.6 ! root      309: #endif
1.1       root      310: 
                    311: /* Number of bytes of args popped by function being compiled on its return.
                    312:    Zero if no bytes are to be popped.
                    313:    May affect compilation of return insn or of function epilogue.  */
                    314: 
                    315: extern int current_function_pops_args;
                    316: 
                    317: /* Nonzero if function being compiled needs to be given an address
                    318:    where the value should be stored.  */
                    319: 
                    320: extern int current_function_returns_struct;
                    321: 
                    322: /* Nonzero if function being compiled needs to
                    323:    return the address of where it has put a structure value.  */
                    324: 
                    325: extern int current_function_returns_pcc_struct;
                    326: 
                    327: /* Nonzero if function being compiled needs to be passed a static chain.  */
                    328: 
                    329: extern int current_function_needs_context;
                    330: 
                    331: /* Nonzero if function being compiled can call setjmp.  */
                    332: 
                    333: extern int current_function_calls_setjmp;
                    334: 
                    335: /* Nonzero if function being compiled can call longjmp.  */
                    336: 
                    337: extern int current_function_calls_longjmp;
                    338: 
                    339: /* Nonzero if function being compiled can call alloca,
                    340:    either as a subroutine or builtin.  */
                    341: 
                    342: extern int current_function_calls_alloca;
                    343: 
                    344: /* Nonzero if function being compiled receives nonlocal gotos
                    345:    from nested functions.  */
                    346: 
                    347: extern int current_function_has_nonlocal_label;
                    348: 
                    349: /* Nonzero if function being compiled contains nested functions.  */
                    350: 
                    351: extern int current_function_contains_functions;
                    352: 
                    353: /* Nonzero if the current function returns a pointer type */
                    354: 
                    355: extern int current_function_returns_pointer;
                    356: 
                    357: /* If function's args have a fixed size, this is that size, in bytes.
                    358:    Otherwise, it is -1.
                    359:    May affect compilation of return insn or of function epilogue.  */
                    360: 
                    361: extern int current_function_args_size;
                    362: 
                    363: /* # bytes the prologue should push and pretend that the caller pushed them.
                    364:    The prologue must do this, but only if parms can be passed in registers.  */
                    365: 
                    366: extern int current_function_pretend_args_size;
                    367: 
                    368: /* # of bytes of outgoing arguments required to be pushed by the prologue.
                    369:    If this is non-zero, it means that ACCUMULATE_OUTGOING_ARGS was defined
                    370:    and no stack adjusts will be done on function calls.  */
                    371: 
                    372: extern int current_function_outgoing_args_size;
                    373: 
                    374: /* Nonzero if current function uses varargs.h or equivalent.
                    375:    Zero for functions that use stdarg.h.  */
                    376: 
                    377: extern int current_function_varargs;
                    378: 
1.1.1.6 ! root      379: /* Nonzero if current function uses stdarg.h or equivalent.
        !           380:    Zero for functions that use varargs.h.  */
        !           381: 
        !           382: extern int current_function_stdarg;
        !           383: 
1.1       root      384: /* Quantities of various kinds of registers
                    385:    used for the current function's args.  */
                    386: 
                    387: extern CUMULATIVE_ARGS current_function_args_info;
                    388: 
                    389: /* Name of function now being compiled.  */
                    390: 
                    391: extern char *current_function_name;
                    392: 
1.1.1.6 ! root      393: #ifdef RTX_CODE
1.1       root      394: /* If non-zero, an RTL expression for that location at which the current
                    395:    function returns its result.  Usually equal to
                    396:    DECL_RTL (DECL_RESULT (current_function_decl)).  */
                    397: 
                    398: extern rtx current_function_return_rtx;
                    399: 
                    400: /* If some insns can be deferred to the delay slots of the epilogue, the
                    401:    delay list for them is recorded here.  */
                    402: 
                    403: extern rtx current_function_epilogue_delay_list;
1.1.1.6 ! root      404: #endif
1.1       root      405: 
                    406: /* Nonzero means generate position-independent code.
                    407:    This is not fully implemented yet.  */
                    408: 
                    409: extern int flag_pic;
                    410: 
                    411: /* This is nonzero if the current function uses pic_offset_table_rtx.  */
                    412: extern int current_function_uses_pic_offset_table;
                    413: 
1.1.1.2   root      414: /* This is nonzero if the current function uses the constant pool.  */
                    415: extern int current_function_uses_const_pool;
                    416: 
1.1       root      417: /* The line number of the beginning of the current function.
                    418:    sdbout.c needs this so that it can output relative linenumbers.  */
                    419: 
                    420: #ifdef SDB_DEBUGGING_INFO /* Avoid undef sym in certain broken linkers.  */
                    421: extern int sdb_begin_function_line;
                    422: #endif
                    423: 
                    424: /* File in which assembler code is being written.  */
                    425: 
1.1.1.4   root      426: #ifdef BUFSIZ
1.1       root      427: extern FILE *asm_out_file;
                    428: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.