summaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorsje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>2002-07-23 14:58:04 +0000
committersje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>2002-07-23 14:58:04 +0000
commite5716f7e9b7da60c9806358114ddc330205b2264 (patch)
treeba228b73246416a6497ea772591933f9c542e10f /gcc/builtins.c
parentd4c4d95c284764c421a80212300f1c6a6ac52e0f (diff)
downloadgcc-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.c44
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;
}