diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-27 14:13:48 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-27 14:13:48 +0000 |
commit | 045efd34d7f2bf9b8ea0a372d4b67f6cde0af3ef (patch) | |
tree | 457e538cbad868c1a66850e6c9b2be338a4339f3 /gcc/expr.c | |
parent | b024f1ba39461f4df2cb4b4d1cc60b3efd10c785 (diff) | |
download | gcc-045efd34d7f2bf9b8ea0a372d4b67f6cde0af3ef.tar.gz |
* expr.c (store_expr): Use clear_storage instead of direct memset
libcall.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33484 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index fa249bbddcd..a0b8465cab8 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -3933,6 +3933,7 @@ store_expr (exp, target, want_value) = size_binop (MIN_EXPR, make_tree (sizetype, size), size_int (TREE_STRING_LENGTH (exp))); + int align = TYPE_ALIGN (TREE_TYPE (exp)); rtx copy_size_rtx = expand_expr (copy_size, NULL_RTX, VOIDmode, 0); rtx label = 0; @@ -3951,6 +3952,9 @@ store_expr (exp, target, want_value) { addr = plus_constant (addr, TREE_STRING_LENGTH (exp)); size = plus_constant (size, - TREE_STRING_LENGTH (exp)); + align = MIN (align, (BITS_PER_UNIT + * (INTVAL (copy_size_rtx) + & - INTVAL (copy_size_rtx)))); } else { @@ -3963,10 +3967,12 @@ store_expr (exp, target, want_value) copy_size_rtx, NULL_RTX, 0, OPTAB_LIB_WIDEN); + align = BITS_PER_UNIT; label = gen_label_rtx (); emit_cmp_and_jump_insns (size, const0_rtx, LT, NULL_RTX, GET_MODE (size), 0, 0, label); } + align = MIN (align, expr_align (copy_size)); if (size != const0_rtx) { @@ -3977,22 +3983,7 @@ store_expr (exp, target, want_value) size, TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_WO), TYPE_MODE (integer_type_node)); -#ifdef TARGET_MEM_FUNCTIONS - emit_library_call (memset_libfunc, 0, VOIDmode, 3, - addr, ptr_mode, - const0_rtx, TYPE_MODE (integer_type_node), - convert_to_mode (TYPE_MODE (sizetype), - size, - TREE_UNSIGNED (sizetype)), - TYPE_MODE (sizetype)); -#else - emit_library_call (bzero_libfunc, 0, VOIDmode, 2, - addr, ptr_mode, - convert_to_mode (TYPE_MODE (integer_type_node), - size, - TREE_UNSIGNED (integer_type_node)), - TYPE_MODE (integer_type_node)); -#endif + clear_storage (gen_rtx_MEM (BLKmode, addr), size, align); } if (label) |