/* Definitions for code generation pass of GNU compiler.
- Copyright (C) 1987, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 91-95, 1996 Free Software Foundation, Inc.
This file is part of GNU CC.
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-
-#ifndef __STDC__
-#ifndef const
-#define const
-#endif
-#endif
-
/* The default branch cost is 1. */
#ifndef BRANCH_COST
#define BRANCH_COST 1
extern rtx memset_libfunc;
extern rtx bzero_libfunc;
+extern rtx throw_libfunc;
+
extern rtx eqhf2_libfunc;
extern rtx nehf2_libfunc;
extern rtx gthf2_libfunc;
/* This array records the insn_code of insns to perform block moves. */
extern enum insn_code movstr_optab[NUM_MACHINE_MODES];
+/* This array records the insn_code of insns to perform block clears. */
+extern enum insn_code clrstr_optab[NUM_MACHINE_MODES];
+
/* Define functions given in optabs.c. */
/* Expand a binary operation given optab and rtx operands. */
extern rtx emit_store_flag PROTO((rtx, enum rtx_code, rtx, rtx,
enum machine_mode, int, int));
+/* Like emit_store_flag, but always succeeds. */
+extern rtx emit_store_flag_force PROTO((rtx, enum rtx_code, rtx, rtx,
+ enum machine_mode, int, int));
+
/* Functions from loop.c: */
/* Given a JUMP_INSN, return a description of the test being made. */
The number of registers to be filled is NREGS. */
extern void move_block_from_reg PROTO((int, rtx, int, int));
+/* Load a BLKmode value into non-consecutive registers represented by a
+ PARALLEL. */
+extern void emit_group_load PROTO((rtx, rtx));
+/* Store a BLKmode value from non-consecutive registers represented by a
+ PARALLEL. */
+extern void emit_group_store PROTO((rtx, rtx));
+
/* Mark REG as holding a parameter for the next CALL_INSN. */
-extern void use_reg PROTO((rtx*, rtx));
+extern void use_reg PROTO((rtx *, rtx));
/* Mark NREGS consecutive regs, starting at REGNO, as holding parameters
for the next CALL_INSN. */
-extern void use_regs PROTO((rtx*, int, int));
+extern void use_regs PROTO((rtx *, int, int));
+/* Mark a PARALLEL as holding a parameter for the next CALL_INSN. */
+extern void use_group_regs PROTO((rtx *, rtx));
/* Write zeros through the storage of OBJECT.
- If OBJECT has BLKmode, SIZE is its length in bytes. */
-extern void clear_storage PROTO((rtx, rtx));
+ If OBJECT has BLKmode, SIZE is its length in bytes and ALIGN is its
+ alignment. */
+extern void clear_storage PROTO((rtx, rtx, int));
/* Emit insns to set X from Y. */
extern rtx emit_move_insn PROTO((rtx, rtx));
says how many bytes. */
extern rtx allocate_dynamic_stack_space PROTO((rtx, rtx, int));
-/* Emit code to copy function value to a new temp reg and return that reg. */
-extern rtx function_value ();
-
/* Return an rtx that refers to the value returned by a library call
in its original home. This becomes invalid if any more code is emitted. */
extern rtx hard_libcall_value PROTO((enum machine_mode));
It is up to the language front end to install a hook
if it has any such codes that expand_expr needs to know about. */
extern rtx (*lang_expand_expr) ();
+
+#ifdef TREE_CODE
+/* Build bytecode call descriptor for function SUBR. */
+extern rtx bc_build_calldesc PROTO((tree));
+
+/* Emit a type code to be used by the runtime support in handling
+ parameter passing. The type code consists of the machine mode
+ plus the minimal alignment shifted left 8 bits. */
+extern tree bc_runtime_type_code PROTO((tree));
+#endif