]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/expr.h
(emit_float_lib_cmp): Add declaration here.
[gcc.git] / gcc / expr.h
index f47580b9595faebe86851b986c6bb1fa1adad2f6..d94d1f9d15cb3aa973ebe2578b84bdc3eda5407f 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for code generation pass of GNU compiler.
-   Copyright (C) 1987, 1991, 1992, 1993 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -179,7 +179,7 @@ enum direction {none, upward, downward};  /* Value has this type.  */
 #define FUNCTION_ARG_PADDING(MODE, TYPE)                               \
   (((MODE) == BLKmode                                                  \
     ? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST           \
-       && int_size_in_bytes (TYPE) < PARM_BOUNDARY / BITS_PER_UNIT)    \
+       && int_size_in_bytes (TYPE) < (PARM_BOUNDARY / BITS_PER_UNIT))  \
     : GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY)                         \
    ? downward : upward)
 #else
@@ -211,11 +211,6 @@ enum direction {none, upward, downward};  /* Value has this type.  */
    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
@@ -227,9 +222,11 @@ enum direction {none, upward, downward};  /* Value has this type.  */
    && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST     \
        || TREE_ADDRESSABLE (TYPE)                      \
        || ((MODE) == BLKmode                           \
+          && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
+                && 0 == (int_size_in_bytes (TYPE)      \
+                         % (PARM_BOUNDARY / BITS_PER_UNIT))) \
           && (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.  */
@@ -333,6 +330,9 @@ 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];
 
+/* Contains the optab used for each rtx code.  */
+extern optab code_to_optab[NUM_RTX_CODE + 1];
+
 /* 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.
@@ -506,6 +506,10 @@ extern void emit_cmp_insn PROTO((rtx, rtx, enum rtx_code, rtx,
    (without splitting it into pieces).  */
 extern int can_compare_p PROTO((enum machine_mode));
 
+/* Emit a library call comparison between floating point X and Y.
+   COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.).  */
+extern void emit_float_lib_cmp PROTO((rtx, rtx, enum rtx_code));
+
 /* Generate code to indirectly jump to a location given in the rtx LOC.  */
 extern void emit_indirect_jump PROTO((rtx));
 
@@ -543,7 +547,7 @@ extern void expand_fix PROTO((rtx, rtx, int));
    appropriately for the current target machine.  */
 extern void init_optabs        PROTO((void));
 \f
-/* Functions from expmed.c:  (/
+/* Functions from expmed.c:  */
 
 /* Arguments MODE, RTX: return an rtx for the negation of that value.
    May emit insns.  */
@@ -584,7 +588,10 @@ extern void convert_move PROTO((rtx, rtx, int));
 /* Convert an rtx to specified machine mode and return the result.  */
 extern rtx convert_to_mode PROTO((enum machine_mode, rtx, int));
 
-/* Emit code to move a block Y to a block X.
+/* Convert an rtx to MODE from OLDMODE and return the result.  */
+extern rtx convert_modes PROTO((enum machine_mode, enum machine_mode, rtx, int));
+
+/* Emit code to move a block Y to a block X.  */
 extern void emit_block_move PROTO((rtx, rtx, rtx, int));
 
 /* Copy all or part of a value X into registers starting at REGNO.
@@ -593,7 +600,7 @@ extern void move_block_to_reg PROTO((int, rtx, int, enum machine_mode));
 
 /* Copy all or part of a BLKmode value X out of registers starting at REGNO.
    The number of registers to be filled is NREGS.  */
-extern void move_block_from_reg PROTO((int, rtx, int));
+extern void move_block_from_reg PROTO((int, rtx, int, int));
 
 /* Mark NREGS consecutive regs, starting at REGNO, as being live now.  */
 extern void use_regs PROTO((int, int));
@@ -620,10 +627,11 @@ extern rtx gen_push_operand PROTO((void));
 extern void emit_push_insn PROTO((rtx, enum machine_mode, tree, rtx, int,
                                  int, rtx, int, rtx, rtx));
 
-/* Emit library call.  These cannot have accurate prototypes since they have
-   a variable number of args.  */
-extern void emit_library_call ();
-extern void emit_library_call_value ();
+/* Emit library call.  */
+extern void emit_library_call PVPROTO((rtx orgfun, int no_queue,
+  enum machine_mode outmode, int nargs, ...));
+extern rtx emit_library_call_value PVPROTO((rtx orgfun, rtx value, int no_queue,
+  enum machine_mode outmode, int nargs, ...));
 
 /* Expand an assignment that stores the value of FROM into TO. */
 extern rtx expand_assignment PROTO((tree, tree, int, int));
This page took 0.034506 seconds and 5 git commands to generate.