diff options
author | Jan Hubicka <jh@suse.cz> | 2000-04-27 14:13:48 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2000-04-27 14:13:48 +0000 |
commit | 2a5b96fdb1cdccc1dfe2c8feb36ddaec7ac08069 (patch) | |
tree | 457e538cbad868c1a66850e6c9b2be338a4339f3 /gcc/expr.c | |
parent | 6d844225475f369c544da9102d808b915d71d4d9 (diff) | |
download | gcc-2a5b96fdb1cdccc1dfe2c8feb36ddaec7ac08069.zip gcc-2a5b96fdb1cdccc1dfe2c8feb36ddaec7ac08069.tar.gz gcc-2a5b96fdb1cdccc1dfe2c8feb36ddaec7ac08069.tar.bz2 |
expr.c (store_expr): Use clear_storage instead of direct memset libcall.
* expr.c (store_expr): Use clear_storage instead of direct memset
libcall.
From-SVN: r33484
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 23 |
1 files changed, 7 insertions, 16 deletions
@@ -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) |