diff options
author | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-23 14:58:04 +0000 |
---|---|---|
committer | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-23 14:58:04 +0000 |
commit | e5716f7e9b7da60c9806358114ddc330205b2264 (patch) | |
tree | ba228b73246416a6497ea772591933f9c542e10f /gcc/builtins.c | |
parent | d4c4d95c284764c421a80212300f1c6a6ac52e0f (diff) | |
download | gcc-e5716f7e9b7da60c9806358114ddc330205b2264.tar.gz |
* gcc/explow.c (convert_memory_address): Fix conversion of CONSTs.
Fix permutation of conversion and plus/mult.
* gcc/builtins.c (expand_builtin_memcpy) Ensure return pointer is
ptr_mode and not Pmode when POINTERS_EXTEND_UNSIGNED is defined.
(expand_builtin_strncpy) Ditto.
(expand_builtin_memset) Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55679 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 457067649c0..1c8e8a8ea4d 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -1981,7 +1981,12 @@ expand_builtin_memcpy (arglist, target, mode) store_by_pieces (dest_mem, INTVAL (len_rtx), builtin_memcpy_read_str, (PTR) src_str, dest_align); - return force_operand (XEXP (dest_mem, 0), NULL_RTX); + dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX); +#ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dest_mem) != ptr_mode) + dest_mem = convert_memory_address (ptr_mode, dest_mem); +#endif + return dest_mem; } src_mem = get_memory_rtx (src); @@ -1991,7 +1996,13 @@ expand_builtin_memcpy (arglist, target, mode) dest_addr = emit_block_move (dest_mem, src_mem, len_rtx); if (dest_addr == 0) - dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); + { + dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); +#ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dest_addr) != ptr_mode) + dest_addr = convert_memory_address (ptr_mode, dest_addr); +#endif + } return dest_addr; } @@ -2107,7 +2118,12 @@ expand_builtin_strncpy (arglist, target, mode) store_by_pieces (dest_mem, tree_low_cst (len, 1), builtin_strncpy_read_str, (PTR) p, dest_align); - return force_operand (XEXP (dest_mem, 0), NULL_RTX); + dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX); +#ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dest_mem) != ptr_mode) + dest_mem = convert_memory_address (ptr_mode, dest_mem); +#endif + return dest_mem; } /* OK transform into builtin memcpy. */ @@ -2232,7 +2248,12 @@ expand_builtin_memset (exp, target, mode) store_by_pieces (dest_mem, tree_low_cst (len, 1), builtin_memset_gen_str, (PTR)val_rtx, dest_align); - return force_operand (XEXP (dest_mem, 0), NULL_RTX); + dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX); +#ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dest_mem) != ptr_mode) + dest_mem = convert_memory_address (ptr_mode, dest_mem); +#endif + return dest_mem; } if (target_char_cast (val, &c)) @@ -2251,7 +2272,12 @@ expand_builtin_memset (exp, target, mode) store_by_pieces (dest_mem, tree_low_cst (len, 1), builtin_memset_read_str, (PTR) &c, dest_align); - return force_operand (XEXP (dest_mem, 0), NULL_RTX); + dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX); +#ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dest_mem) != ptr_mode) + dest_mem = convert_memory_address (ptr_mode, dest_mem); +#endif + return dest_mem; } len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); @@ -2261,7 +2287,13 @@ expand_builtin_memset (exp, target, mode) dest_addr = clear_storage (dest_mem, len_rtx); if (dest_addr == 0) - dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); + { + dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); +#ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dest_addr) != ptr_mode) + dest_addr = convert_memory_address (ptr_mode, dest_addr); +#endif + } return dest_addr; } |