OSDN Git Service

* config/stormy16/stormy16.h: Remove DEFAULT_VTABLE_THUNKS.
[pf3gnuchains/gcc-fork.git] / gcc / expr.h
index 9bf2adb..764e081 100644 (file)
@@ -2,22 +2,22 @@
    Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
    1999, 2000 Free Software Foundation, Inc.
 
-This file is part of GNU CC.
+This file is part of GCC.
 
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
 
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.  */
 
 /* The default branch cost is 1.  */
 #ifndef BRANCH_COST
@@ -284,7 +284,7 @@ extern rtx expand_simple_unop PARAMS ((enum machine_mode, enum rtx_code,
    perform the operation described by CODE and MODE.  */
 extern int have_insn_for PARAMS ((enum rtx_code, enum machine_mode));
 
-/* Emit code to make a call to a constant function or a library call. */
+/* Emit code to make a call to a constant function or a library call.  */
 extern void emit_libcall_block PARAMS ((rtx, rtx, rtx, rtx));
 
 /* Create but don't emit one rtl instruction to perform certain operations.
@@ -302,8 +302,7 @@ extern int have_sub2_insn PARAMS ((rtx, rtx));
 /* Emit a pair of rtl insns to compare two rtx's and to jump 
    to a label if the comparison is true.  */
 extern void emit_cmp_and_jump_insns PARAMS ((rtx, rtx, enum rtx_code, rtx,
-                                            enum machine_mode, int,
-                                            unsigned int, rtx));
+                                            enum machine_mode, int, rtx));
 
 /* Generate code to indirectly jump to a location given in the rtx LOC.  */
 extern void emit_indirect_jump PARAMS ((rtx));
@@ -371,6 +370,7 @@ extern void record_base_value               PARAMS ((unsigned int, rtx, int));
 extern void record_alias_subset         PARAMS ((HOST_WIDE_INT,
                                                 HOST_WIDE_INT));
 extern HOST_WIDE_INT new_alias_set             PARAMS ((void));
+extern int can_address_p               PARAMS ((tree));
 \f
 /* Functions from expr.c:  */
 
@@ -410,7 +410,7 @@ extern rtx convert_modes PARAMS ((enum machine_mode, enum machine_mode,
                                  rtx, int));
 
 /* Emit code to move a block Y to a block X.  */
-extern rtx emit_block_move PARAMS ((rtx, rtx, rtx, unsigned int));
+extern rtx emit_block_move PARAMS ((rtx, rtx, rtx));
 
 /* Copy all or part of a value X into registers starting at REGNO.
    The number of registers to be filled is NREGS.  */
@@ -422,14 +422,14 @@ extern void move_block_from_reg PARAMS ((int, rtx, int, int));
 
 /* Load a BLKmode value into non-consecutive registers represented by a
    PARALLEL.  */
-extern void emit_group_load PARAMS ((rtx, rtx, int, unsigned int));
+extern void emit_group_load PARAMS ((rtx, rtx, int));
 
 /* Store a BLKmode value from non-consecutive registers represented by a
    PARALLEL.  */
-extern void emit_group_store PARAMS ((rtx, rtx, int, unsigned int));
+extern void emit_group_store PARAMS ((rtx, rtx, int));
 
 #ifdef TREE_CODE
-/* Copy BLKmode object from a set of registers. */
+/* Copy BLKmode object from a set of registers.  */
 extern rtx copy_blkmode_from_reg PARAMS ((rtx,rtx,tree));
 #endif
 
@@ -444,9 +444,8 @@ extern void use_regs PARAMS ((rtx *, int, int));
 extern void use_group_regs PARAMS ((rtx *, rtx));
 
 /* Write zeros through the storage of OBJECT.
-   If OBJECT has BLKmode, SIZE is its length in bytes and ALIGN is its
-   alignment.  */
-extern rtx clear_storage PARAMS ((rtx, rtx, unsigned int));
+   If OBJECT has BLKmode, SIZE is its length in bytes.  */
+extern rtx clear_storage PARAMS ((rtx, rtx));
 
 /* Return non-zero if it is desirable to store LEN bytes generated by
    CONSTFUN with several move instructions by store_by_pieces
@@ -483,7 +482,7 @@ extern void emit_push_insn PARAMS ((rtx, enum machine_mode, tree, rtx,
                                    unsigned int, int, rtx, int, rtx, rtx,
                                    int, rtx));
 
-/* Expand an assignment that stores the value of FROM into TO. */
+/* Expand an assignment that stores the value of FROM into TO.  */
 extern rtx expand_assignment PARAMS ((tree, tree, int, int));
 
 /* Generate code for computing expression EXP,
@@ -498,13 +497,20 @@ extern rtx store_expr PARAMS ((tree, rtx, int));
    Useful after calling expand_expr with 1 as sum_ok.  */
 extern rtx force_operand PARAMS ((rtx, rtx));
 
-#ifdef TREE_CODE
+/* Return an object on the placeholder list that matches EXP, a
+   PLACEHOLDER_EXPR.  An object "matches" if it is of the type of the
+   PLACEHOLDER_EXPR or a pointer type to it.  For further information, see
+   tree.def.  If no such object is found, abort.  If PLIST is nonzero, it is
+   a location which initially points to a starting location in the
+   placeholder list (zero means start of the list) and where a pointer into
+   the placeholder list at which the object is found is placed.  */
+extern tree find_placeholder PARAMS ((tree, tree *));
+
 /* Generate code for computing expression EXP.
    An rtx for the computed value is returned.  The value is never null.
    In the case of a void EXP, const0_rtx is returned.  */
 extern rtx expand_expr PARAMS ((tree, rtx, enum machine_mode,
                                enum expand_modifier));
-#endif
 
 /* At the start of a function, record that we have no previously-pushed
    arguments waiting to be popped.  */
@@ -535,10 +541,10 @@ extern void do_jump PARAMS ((tree, rtx, rtx));
 
 /* Generate rtl to compare two rtx's, will call emit_cmp_insn.  */
 extern rtx compare_from_rtx PARAMS ((rtx, rtx, enum rtx_code, int,
-                                    enum machine_mode, rtx, unsigned int));
+                                    enum machine_mode, rtx));
 extern void do_compare_rtx_and_jump PARAMS ((rtx, rtx, enum rtx_code, int,
                                             enum machine_mode, rtx,
-                                            unsigned int, rtx, rtx));
+                                            rtx, rtx));
 
 /* Two different ways of generating switch statements.  */
 extern int try_casesi    PARAMS ((tree, tree, tree, tree, rtx, rtx));
@@ -602,23 +608,49 @@ extern rtx memory_address PARAMS ((enum machine_mode, rtx));
 /* Like `memory_address' but pretent `flag_force_addr' is 0.  */
 extern rtx memory_address_noforce PARAMS ((enum machine_mode, rtx));
 
+/* Set the alias set of MEM to SET.  */
+extern void set_mem_alias_set PARAMS ((rtx, HOST_WIDE_INT));
+
+/* Set the alignment of MEM to ALIGN bits.  */
+extern void set_mem_align PARAMS ((rtx, unsigned int));
+
+/* Set the DECL for MEM to DECL.  */
+extern void set_mem_decl PARAMS ((rtx, tree));
+
 /* Return a memory reference like MEMREF, but with its mode changed
    to MODE and its address changed to ADDR.
    (VOIDmode means don't change the mode.
-   NULL for ADDR means don't change the address.)
-   VALIDATE is nonzero if the returned memory location is required to be
-   valid.  */
-extern rtx change_address_1 PARAMS ((rtx, enum machine_mode, rtx, int));
-
-#define change_address(MEMREF, MODE, ADDR) \
-  change_address_1 (MEMREF, MODE, ADDR, 1)
+   NULL for ADDR means don't change the address.)  */
+extern rtx change_address PARAMS ((rtx, enum machine_mode, rtx));
 
 /* Return a memory reference like MEMREF, but with its mode changed
    to MODE and its address offset by OFFSET bytes.  */
-extern rtx adjust_address PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT));
+#define adjust_address(MEMREF, MODE, OFFSET) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1)
 
 /* Likewise, but the reference is not required to be valid.  */
-extern rtx adjust_address_nv PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT));
+#define adjust_address_nv(MEMREF, MODE, OFFSET) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1)
+
+/* Return a memory reference like MEMREF, but with its mode changed
+   to MODE and its address changed to ADDR, which is assumed to be
+   increased by OFFSET bytes from MEMREF.  */
+#define adjust_automodify_address(MEMREF, MODE, ADDR, OFFSET) \
+  adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 1)
+
+/* Likewise, but the reference is not required to be valid.  */
+#define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \
+  adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0)
+
+extern rtx adjust_address_1 PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT,
+                                    int, int));
+extern rtx adjust_automodify_address_1 PARAMS ((rtx, enum machine_mode,
+                                               rtx, HOST_WIDE_INT, int));
+
+/* Return a memory reference like MEMREF, but whose address is changed by
+   adding OFFSET, an RTX, to it.  POW2 is the highest power of two factor
+   known to be in OFFSET (possibly 1).  */
+extern rtx offset_address PARAMS ((rtx, rtx, HOST_WIDE_INT));
 
 /* Return a memory reference like MEMREF, but with its address changed to
    ADDR.  The caller is asserting that the actual piece of memory pointed
@@ -725,12 +757,11 @@ mode_for_extraction PARAMS ((enum extraction_pattern, int));
 
 extern rtx store_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT,
                                    unsigned HOST_WIDE_INT,
-                                   enum machine_mode, rtx,
-                                   unsigned int, HOST_WIDE_INT));
+                                   enum machine_mode, rtx, HOST_WIDE_INT));
 extern rtx extract_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT,
                                      unsigned HOST_WIDE_INT, int, rtx,
                                      enum machine_mode, enum machine_mode,
-                                     unsigned int, HOST_WIDE_INT));
+                                     HOST_WIDE_INT));
 extern rtx expand_mult PARAMS ((enum machine_mode, rtx, rtx, rtx, int));
 extern rtx expand_mult_add PARAMS ((rtx, rtx, rtx, rtx,enum machine_mode, int));
 extern rtx expand_mult_highpart_adjust PARAMS ((enum machine_mode, rtx, rtx, rtx, rtx, int));