X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fexpr.h;h=beb44bd80b7d051887770e2221f9a98e06a25ee4;hp=64604d75f95a8b72158c288c4fe0753fca3ba90f;hb=f69b7efb46e48bce7beb22bf8f1e26f487998aac;hpb=361223260284576c96bd022e66409ae36b5193a6 diff --git a/gcc/expr.h b/gcc/expr.h index 64604d75f95..beb44bd80b7 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -84,6 +84,13 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM, #define CLEAR_RATIO (optimize_size ? 3 : 15) #endif #endif + +/* If a memory set (to value other than zero) operation would take + SET_RATIO or more simple move-instruction sequences, we will do a movmem + or libcall instead. */ +#ifndef SET_RATIO +#define SET_RATIO MOVE_RATIO +#endif enum direction {none, upward, downward}; @@ -341,12 +348,13 @@ extern void expand_builtin_setjmp_setup (rtx, rtx); extern void expand_builtin_setjmp_receiver (rtx); extern rtx expand_builtin_saveregs (void); extern void expand_builtin_trap (void); +extern rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, enum machine_mode); /* Functions from expr.c: */ -/* This is run once per compilation to set up which modes can be used - directly in memory and to initialize the block move optab. */ -extern void init_expr_once (void); +/* This is run during target initialization to set up which modes can be + used directly in memory and to initialize the block move optab. */ +extern void init_expr_target (void); /* This is run at the start of compiling a function. */ extern void init_expr (void); @@ -443,20 +451,23 @@ extern int can_move_by_pieces (unsigned HOST_WIDE_INT, unsigned int); CONSTFUN with several move instructions by store_by_pieces function. CONSTFUNDATA is a pointer which will be passed as argument in every CONSTFUN call. - ALIGN is maximum alignment we can assume. */ + ALIGN is maximum alignment we can assume. + MEMSETP is true if this is a real memset/bzero, not a copy + of a const string. */ extern int can_store_by_pieces (unsigned HOST_WIDE_INT, rtx (*) (void *, HOST_WIDE_INT, enum machine_mode), - void *, unsigned int); + void *, unsigned int, bool); /* Generate several move instructions to store LEN bytes generated by CONSTFUN to block TO. (A MEM rtx with BLKmode). CONSTFUNDATA is a pointer which will be passed as argument in every CONSTFUN call. ALIGN is maximum alignment we can assume. + MEMSETP is true if this is a real memset/bzero, not a copy. Returns TO + LEN. */ extern rtx store_by_pieces (rtx, unsigned HOST_WIDE_INT, rtx (*) (void *, HOST_WIDE_INT, enum machine_mode), - void *, unsigned int, int); + void *, unsigned int, bool, int); /* Emit insns to set X from Y. */ extern rtx emit_move_insn (rtx, rtx); @@ -509,8 +520,6 @@ expand_normal (tree exp) return expand_expr_real (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL, NULL); } -extern void expand_var (tree); - /* At the start of a function, record that we have no previously-pushed arguments waiting to be popped. */ extern void init_pending_stack_adjust (void); @@ -546,7 +555,7 @@ extern void do_compare_rtx_and_jump (rtx, rtx, enum rtx_code, int, enum machine_mode, rtx, rtx, rtx); /* Two different ways of generating switch statements. */ -extern int try_casesi (tree, tree, tree, tree, rtx, rtx); +extern int try_casesi (tree, tree, tree, tree, rtx, rtx, rtx); extern int try_tablejump (tree, tree, tree, tree, rtx, rtx); /* Smallest number of adjacent cases before we use a jump table. @@ -567,7 +576,7 @@ extern HOST_WIDE_INT int_expr_size (tree); /* 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 (tree, tree, tree, int); +extern rtx hard_function_value (const_tree, const_tree, const_tree, int); extern rtx prepare_call_address (rtx, rtx, rtx *, int, int); @@ -605,9 +614,6 @@ extern rtx eliminate_constant_term (rtx, rtx *); by emitting insns to perform arithmetic if nec. */ extern rtx memory_address (enum machine_mode, rtx); -/* Like `memory_address' but pretend `flag_force_addr' is 0. */ -extern rtx memory_address_noforce (enum machine_mode, rtx); - /* 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. @@ -688,7 +694,7 @@ extern rtx force_reg (enum machine_mode, rtx); extern rtx force_not_mem (rtx); /* Return mode and signedness to use when object is promoted. */ -extern enum machine_mode promote_mode (tree, enum machine_mode, int *, int); +extern enum machine_mode promote_mode (const_tree, enum machine_mode, int *, int); /* Remove some bytes from the stack. An rtx says how many. */ extern void adjust_stack (rtx); @@ -736,11 +742,12 @@ extern void store_bit_field (rtx, unsigned HOST_WIDE_INT, extern rtx extract_bit_field (rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, int, rtx, enum machine_mode, enum machine_mode); +extern rtx extract_low_bits (enum machine_mode, enum machine_mode, rtx); extern rtx expand_mult (enum machine_mode, rtx, rtx, rtx, int); extern rtx expand_mult_highpart_adjust (enum machine_mode, rtx, rtx, rtx, rtx, int); extern rtx assemble_static_space (unsigned HOST_WIDE_INT); -extern int safe_from_p (rtx, tree, int); +extern int safe_from_p (const_rtx, tree, int); /* Call this once to initialize the contents of the optabs appropriately for the current target machine. */