So a value padded in memory at the upper end can't go in a register.
For a little-endian machine, the reverse is true. */
+/* ??? Perhaps later rename this to FUNCTION_ARG_MUST_PASS_IN_STACK?
+ (although it is a little long). */
+
+#ifndef MUST_PASS_IN_STACK
+
#if BYTES_BIG_ENDIAN
#define MUST_PASS_IN_STACK_BAD_PADDING upward
#else
|| ((MODE) == BLKmode \
&& (FUNCTION_ARG_PADDING (MODE, TYPE) \
== MUST_PASS_IN_STACK_BAD_PADDING))))
+#endif
/* Nonzero if type TYPE should be returned in memory.
Most machines can use the following default definition. */
extern optab cos_optab; /* Cosine */
extern optab strlen_optab; /* String length */
+/* Tables of patterns for extending one integer mode to another. */
+extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2];
+
+/* Tables of patterns for converting between fixed and floating point. */
+extern enum insn_code fixtab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
+extern enum insn_code fixtrunctab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
+extern enum insn_code floattab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
+
/* Passed to expand_binop and expand_unop to say which options to try to use
if the requested operation can't be open-coded on the requisite mode.
Either OPTAB_LIB or OPTAB_LIB_WIDEN says try using a library call.
extern enum insn_code setcc_gen_code[NUM_RTX_CODE];
+/* This array records the insn_code of insns to perform block moves. */
+extern enum insn_code movstr_optab[NUM_MACHINE_MODES];
+
/* Define functions given in optabs.c. */
/* Expand a binary operation given optab and rtx operands. */
in its original home. This becomes invalid if any more code is emitted. */
extern rtx hard_function_value PROTO((tree, tree));
-
-extern rtx prepare_call_address PROTO((rtx, tree, rtx*));
+extern rtx prepare_call_address PROTO((rtx, tree, rtx *));
extern rtx expand_call PROTO((tree, rtx, int));
-extern void emit_call_1 PROTO((rtx, tree, int, int, rtx, rtx, int, rtx, int));
extern rtx expand_shift PROTO((enum tree_code, enum machine_mode, rtx, tree, rtx, int));
extern rtx expand_divmod PROTO((int, enum tree_code, enum machine_mode, rtx, rtx, rtx, int));
extern rtx expand_inline_function PROTO((tree, tree, rtx, int, tree, rtx));
/* Return the CODE_LABEL rtx for a LABEL_DECL, creating it if necessary. */
extern rtx label_rtx PROTO((tree));
-#else
-/* Return an rtx for the size in bytes of the value of an expr. */
-extern rtx expr_size ();
-
-extern rtx lookup_static_chain ();
-
-/* Convert a stack slot address ADDR valid in function FNDECL
- into an address valid in this function (using a static chain). */
-extern rtx fix_lexical_addr ();
-
-/* Return the address of the trampoline for entering nested fn FUNCTION. */
-extern rtx trampoline_address ();
-
-/* Return an rtx that refers to the value returned by a function
- in its original home. This becomes invalid if any more code is emitted. */
-extern rtx hard_function_value ();
-
-extern rtx prepare_call_address ();
-extern rtx expand_call ();
-extern void emit_call_1 ();
-extern rtx expand_shift ();
-extern rtx expand_divmod ();
-extern void locate_and_pad_parm ();
-extern rtx expand_inline_function ();
-
-/* Return the CODE_LABEL rtx for a LABEL_DECL, creating it if necessary. */
-extern rtx label_rtx ();
#endif
/* Indicate how an input argument register was promoted. */
-extern rtx promoted_input_arg ();
+extern rtx promoted_input_arg PROTO((int, enum machine_mode *, int *));
/* Return an rtx like arg but sans any constant terms.
Returns the original rtx if it has no constant terms.
extern rtx validize_mem PROTO((rtx));
-/* Convert a stack slot address ADDR valid in function FNDECL
- into an address valid in this function (using a static chain). */
-extern rtx fix_lexical_addr ();
-
/* Assemble the static constant template for function entry trampolines. */
extern rtx assemble_trampoline_template PROTO((void));
in its original home. This becomes invalid if any more code is emitted. */
extern rtx hard_libcall_value PROTO((enum machine_mode));
-/* Emit code to copy function value to a specified place. */
-extern void copy_function_value ();
-
/* Given an rtx, return an rtx for a value rounded up to a multiple
of STACK_BOUNDARY / BITS_PER_UNIT. */
extern rtx round_push PROTO((rtx));
extern rtx extract_bit_field PROTO((rtx, int, int, int, rtx, enum machine_mode, enum machine_mode, int, int));
extern rtx expand_mult PROTO((enum machine_mode, rtx, rtx, rtx, int));
extern rtx expand_mult_add PROTO((rtx, rtx, rtx, rtx,enum machine_mode, int));
-extern rtx expand_stmt_expr ();
extern rtx assemble_static_space PROTO((int));