diff options
author | Jan Hubicka <jh@suse.cz> | 2006-11-27 17:00:26 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2006-11-27 16:00:26 +0000 |
commit | 8c996513856f2769aee1730cb211050fef055fb5 (patch) | |
tree | 0fffda932600cccb90f66739f0c0ad7403474356 /gcc/expr.h | |
parent | d3d3d8986db75c95a43be00918c9888ca7569d41 (diff) | |
download | gcc-8c996513856f2769aee1730cb211050fef055fb5.zip gcc-8c996513856f2769aee1730cb211050fef055fb5.tar.gz gcc-8c996513856f2769aee1730cb211050fef055fb5.tar.bz2 |
expr.c (emit_block_move_via_libcall): Export.
* expr.c (emit_block_move_via_libcall): Export.
(clear_storage_via_libcall): Rename to ...
(set_storage_via_libcall): ... this one; handle arbitrary value to set.
(clear_storage): Update to set_storage_via_libcall.
* expr.h (emit_block_move_via_libcall): Declare
* config/i386/i386.h (stringop_alg): New enum.
(MAX_STRINGOP_ALGS): New constant.
(stringop_algs): New struct.
(processor_costs): Add memcpy/memset descriptors.
(TARGET_REP_MOVEL_OPTIMAL): Remove.
* config/i386/i386.md (movsi_insv_1_rex64): New pattern.
(strmovsi, strmovdi, strsetsi, strsetdi): Update; accept all operands
for memset.
* config/i386/i386.opt (minline-stringops-dynamically,
mstringop-strategy): New
parameters.
* config/i386/i386-prostos.h (ix86_expand_movmem): Update prototype.
(ix86_expand-clrmem): Rename to ...
(ix86_expand_setmem): ... this one; update prototype.
* config/i386/i386.c (DUMMY_STRINGOP_ALGS): New constant.
(size_cost, i386_cost, i486_cost, pentium_cost, pentiumpro_cost,
geode_cost, k6_cost, athlon_cost, k8_cost, pentium4_cost,
nocona_cost, core2_cost, generic_cost, generic64_cost,
generic32_cost): Add memcpy/memset descriptors.
(x86_rep_movl_optimal): Remove.
(stringop_alg): New static variable.
(ix86_expand_aligntest): Handle predictions.
(override_options): Add strgop_alg handling.
(predict_jump): New function.
(scale_counter): New function.
(expand_set_or_movmem_via_loop): New function.
(expand_movmem_via_rep_mov): New function.
(expand_setmem_via_rep_stots): New function.
(emit_strmov): New function.
(expand_movmem_epilogue): New function.
(expand_setmem_epilogue_via_loop): New function.
(expand_setmem_epilogue): New function.
(expand_movmem_prologue): New function.
(expand_setmem_prologue): New function.
(decide_alg): New function.
(decide_alignment): New function.
(ix86_exand_movmem): Rewrite.
(promote_duplicated_reg): New function.
(ix86_expand_clrmem): Rename to ...
(ix86_expand_setmem): ... this one. Rewrite.
* invoke.texi (minline-stringops-dynamically): New command line option.
(mstringop-strategy): Likewise.
From-SVN: r119252
Diffstat (limited to 'gcc/expr.h')
-rw-r--r-- | gcc/expr.h | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -377,6 +377,7 @@ extern void init_block_move_fn (const char *); extern void init_block_clear_fn (const char *); extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods); +extern rtx emit_block_move_via_libcall (rtx, rtx, rtx, bool); /* Copy all or part of a value X into registers starting at REGNO. The number of registers to be filled is NREGS. */ @@ -423,6 +424,8 @@ extern void use_group_regs (rtx *, rtx); /* Write zeros through the storage of OBJECT. If OBJECT has BLKmode, SIZE is its length in bytes. */ extern rtx clear_storage (rtx, rtx, enum block_op_methods); +/* The same, but always output an library call. */ +rtx set_storage_via_libcall (rtx, rtx, rtx, bool); /* Expand a setmem pattern; return true if successful. */ extern bool set_storage_via_setmem (rtx, rtx, rtx, unsigned int); |