aboutsummaryrefslogtreecommitdiff
path: root/string
diff options
context:
space:
mode:
authorAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-06-20 19:40:55 -0500
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-06-20 19:42:05 -0500
commit85c2e6110c9a01ec817c30f1b7e20549d7229987 (patch)
tree9b044403d906f9aaa6930484ae6d60dc687ecc19 /string
parentb8c792af85fe3ff65c0cd68e2f291072a60cd953 (diff)
downloadglibc-85c2e6110c9a01ec817c30f1b7e20549d7229987.zip
glibc-85c2e6110c9a01ec817c30f1b7e20549d7229987.tar.gz
glibc-85c2e6110c9a01ec817c30f1b7e20549d7229987.tar.bz2
Fix loop construction to functions calls
Check wheter the compiler has the option -fno-tree-loop-distribute-patterns to inhibit loop transformation to library calls and uses it on memset and memmove default implementation to avoid recursive calls.
Diffstat (limited to 'string')
-rw-r--r--string/memmove.c1
-rw-r--r--string/memset.c1
-rw-r--r--string/test-memmove.c1
-rw-r--r--string/test-memset.c1
4 files changed, 4 insertions, 0 deletions
diff --git a/string/memmove.c b/string/memmove.c
index 9dcd2f1..ec61e28 100644
--- a/string/memmove.c
+++ b/string/memmove.c
@@ -41,6 +41,7 @@
#endif
rettype
+inhibit_loop_to_libcall
MEMMOVE (a1, a2, len)
a1const void *a1;
a2const void *a2;
diff --git a/string/memset.c b/string/memset.c
index 868be53..74b5409 100644
--- a/string/memset.c
+++ b/string/memset.c
@@ -21,6 +21,7 @@
#undef memset
void *
+inhibit_loop_to_libcall
memset (dstpp, c, len)
void *dstpp;
int c;
diff --git a/string/test-memmove.c b/string/test-memmove.c
index 4ec55b2..94576a2 100644
--- a/string/test-memmove.c
+++ b/string/test-memmove.c
@@ -47,6 +47,7 @@ IMPL (memmove, 1)
#endif
char *
+inhibit_loop_to_libcall
simple_memmove (char *dst, const char *src, size_t n)
{
char *ret = dst;
diff --git a/string/test-memset.c b/string/test-memset.c
index 9981fce..72a390e 100644
--- a/string/test-memset.c
+++ b/string/test-memset.c
@@ -64,6 +64,7 @@ builtin_memset (char *s, int c, size_t n)
#endif
char *
+inhibit_loop_to_libcall
simple_memset (char *s, int c, size_t n)
{
char *r = s, *end = s + n;