patch v2 add restrict to string.h methods
Joel Sherrill
joel.sherrill@oarcorp.com
Fri Jul 19 14:17:00 GMT 2013
Thanks Sebastian.
Attached is v3. OK this time?
On 7/19/2013 8:37 AM, Sebastian Huber wrote:
> On 2013-07-19 15:30, Joel Sherrill wrote:
>> Index: libc/machine/xscale/memcpy.c
>> ===================================================================
>> RCS file: /cvs/src/src/newlib/libc/machine/xscale/memcpy.c,v
>> retrieving revision 1.2
>> diff -u -r1.2 memcpy.c
>> --- libc/machine/xscale/memcpy.c 20 Apr 2002 00:29:51 -0000 1.2
>> +++ libc/machine/xscale/memcpy.c 19 Jul 2013 13:16:15 -0000
>> @@ -8,7 +8,7 @@
>> #include "xscale.h"
>>
>> void *
>> -memcpy (void *dst0, const void *src0, size_t len)
>> +memcpy (void *_restrict dst0, const void *_restrict src0, size_t len)
> This should be __restrict.
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill@OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
-------------- next part --------------
2013-07-18 Sahil Patnayakuni <sahilp@rtems.org>
* libc/include/string.h, libc/string/memccpy.c, libc/string/memcpy.c,
libc/string/stpcpy.c, libc/string/stpncpy.c, libc/string/strcat.c,
libc/string/strncat.c, libc/string/strncpy.c, libc/string/strtok.c,
libc/string/strtok_r.c, libc/string/strxfrm.c
libc/machine/microblaze/strcpy.c, libc/machine/xscale/memcpy.c,
libc/machine/cris/memcpy.c: Add __restrict to prototype to
increase standards compliance.
Index: libc/include/string.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/string.h,v
retrieving revision 1.34
diff -u -r1.34 string.h
--- libc/include/string.h 24 Jun 2013 15:11:24 -0000 1.34
+++ libc/include/string.h 19 Jul 2013 14:12:30 -0000
@@ -20,47 +20,47 @@
_PTR _EXFUN(memchr,(const _PTR, int, size_t));
int _EXFUN(memcmp,(const _PTR, const _PTR, size_t));
-_PTR _EXFUN(memcpy,(_PTR, const _PTR, size_t));
+_PTR _EXFUN(memcpy,(_PTR __restrict, const _PTR __restrict, size_t));
_PTR _EXFUN(memmove,(_PTR, const _PTR, size_t));
_PTR _EXFUN(memset,(_PTR, int, size_t));
-char *_EXFUN(strcat,(char *, const char *));
+char *_EXFUN(strcat,(char *__restrict, const char *__restrict));
char *_EXFUN(strchr,(const char *, int));
int _EXFUN(strcmp,(const char *, const char *));
int _EXFUN(strcoll,(const char *, const char *));
-char *_EXFUN(strcpy,(char *, const char *));
+char *_EXFUN(strcpy,(char *__restrict, const char *__restrict));
size_t _EXFUN(strcspn,(const char *, const char *));
char *_EXFUN(strerror,(int));
size_t _EXFUN(strlen,(const char *));
-char *_EXFUN(strncat,(char *, const char *, size_t));
+char *_EXFUN(strncat,(char *__restrict, const char *__restrict, size_t));
int _EXFUN(strncmp,(const char *, const char *, size_t));
-char *_EXFUN(strncpy,(char *, const char *, size_t));
+char *_EXFUN(strncpy,(char *__restrict, const char *__restrict, size_t));
char *_EXFUN(strpbrk,(const char *, const char *));
char *_EXFUN(strrchr,(const char *, int));
size_t _EXFUN(strspn,(const char *, const char *));
char *_EXFUN(strstr,(const char *, const char *));
#ifndef _REENT_ONLY
-char *_EXFUN(strtok,(char *, const char *));
+char *_EXFUN(strtok,(char *__restrict, const char *__restrict));
#endif
-size_t _EXFUN(strxfrm,(char *, const char *, size_t));
+size_t _EXFUN(strxfrm,(char *__restrict, const char *__restrict, size_t));
#ifndef __STRICT_ANSI__
-char *_EXFUN(strtok_r,(char *, const char *, char **));
+char *_EXFUN(strtok_r,(char *__restrict, const char *__restrict, char **__restrict));
int _EXFUN(bcmp,(const void *, const void *, size_t));
void _EXFUN(bcopy,(const void *, void *, size_t));
void _EXFUN(bzero,(void *, size_t));
int _EXFUN(ffs,(int));
char *_EXFUN(index,(const char *, int));
-_PTR _EXFUN(memccpy,(_PTR, const _PTR, int, size_t));
+_PTR _EXFUN(memccpy,(_PTR __restrict, const _PTR __restrict, int, size_t));
_PTR _EXFUN(mempcpy,(_PTR, const _PTR, size_t));
_PTR _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t));
_PTR _EXFUN(memrchr,(const _PTR, int, size_t));
_PTR _EXFUN(rawmemchr,(const _PTR, int));
char *_EXFUN(rindex,(const char *, int));
-char *_EXFUN(stpcpy,(char *, const char *));
-char *_EXFUN(stpncpy,(char *, const char *, size_t));
+char *_EXFUN(stpcpy,(char *__restrict, const char *__restrict));
+char *_EXFUN(stpncpy,(char *__restrict, const char *__restrict, size_t));
int _EXFUN(strcasecmp,(const char *, const char *));
char *_EXFUN(strcasestr,(const char *, const char *));
char *_EXFUN(strchrnul,(const char *, int));
Index: libc/machine/microblaze/strcpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/microblaze/strcpy.c,v
retrieving revision 1.2
diff -u -r1.2 strcpy.c
--- libc/machine/microblaze/strcpy.c 16 Jul 2013 07:48:53 -0000 1.2
+++ libc/machine/microblaze/strcpy.c 19 Jul 2013 14:12:30 -0000
@@ -36,7 +36,7 @@
ANSI_SYNOPSIS
#include <string.h>
- char *strcpy(char *<[dst]>, const char *<[src]>);
+ char *strcpy(char *restrict <[dst]>, const char *restrict <[src]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -88,8 +88,8 @@
char*
_DEFUN (strcpy, (dst0, src0),
- char *dst0 _AND
- _CONST char *src0)
+ char *__restrict dst0 _AND
+ _CONST char *__restrict src0)
{
#ifndef HAVE_HW_PCMP
Index: libc/machine/xscale/memcpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/xscale/memcpy.c,v
retrieving revision 1.2
diff -u -r1.2 memcpy.c
--- libc/machine/xscale/memcpy.c 20 Apr 2002 00:29:51 -0000 1.2
+++ libc/machine/xscale/memcpy.c 19 Jul 2013 14:12:30 -0000
@@ -8,7 +8,7 @@
#include "xscale.h"
void *
-memcpy (void *dst0, const void *src0, size_t len)
+memcpy (void *__restrict dst0, const void *__restrict src0, size_t len)
{
int dummy;
asm volatile (
Index: libc/machine/cris/memcpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/cris/memcpy.c,v
retrieving revision 1.1
diff -u -r1.1 memcpy.c
--- libc/machine/cris/memcpy.c 27 Jan 2005 23:54:44 -0000 1.1
+++ libc/machine/cris/memcpy.c 19 Jul 2013 14:12:30 -0000
@@ -40,7 +40,7 @@
__asm__ (".syntax no_register_prefix");
void *
-memcpy(void *pdst, const void *psrc, size_t pn)
+memcpy(void *__restrict pdst, const void *__restrict psrc, size_t pn)
{
/* Now we want the parameters put in special registers.
Make sure the compiler is able to make something useful of this.
Index: libc/string/memccpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/memccpy.c,v
retrieving revision 1.2
diff -u -r1.2 memccpy.c
--- libc/string/memccpy.c 22 Sep 2010 03:15:07 -0000 1.2
+++ libc/string/memccpy.c 19 Jul 2013 14:12:30 -0000
@@ -4,7 +4,7 @@
ANSI_SYNOPSIS
#include <string.h>
- void* memccpy(void *<[out]>, const void *<[in]>,
+ void* memccpy(void *restrict <[out]>, const void *restrict <[in]>,
int <[endchar]>, size_t <[n]>);
TRAD_SYNOPSIS
@@ -64,8 +64,8 @@
_PTR
_DEFUN (memccpy, (dst0, src0, endchar, len0),
- _PTR dst0 _AND
- _CONST _PTR src0 _AND
+ _PTR __restrict dst0 _AND
+ _CONST _PTR __restrict src0 _AND
int endchar0 _AND
size_t len0)
{
Index: libc/string/memcpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/memcpy.c,v
retrieving revision 1.3
diff -u -r1.3 memcpy.c
--- libc/string/memcpy.c 22 Sep 2010 03:15:07 -0000 1.3
+++ libc/string/memcpy.c 19 Jul 2013 14:12:30 -0000
@@ -4,7 +4,8 @@
ANSI_SYNOPSIS
#include <string.h>
- void* memcpy(void *<[out]>, const void *<[in]>, size_t <[n]>);
+ void* memcpy(void *restrict <[out]>, const void *restrict <[in]>,
+ size_t <[n]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -51,8 +52,8 @@
_PTR
_DEFUN (memcpy, (dst0, src0, len0),
- _PTR dst0 _AND
- _CONST _PTR src0 _AND
+ _PTR __restrict dst0 _AND
+ _CONST _PTR __restrict src0 _AND
size_t len0)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
Index: libc/string/stpcpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/stpcpy.c,v
retrieving revision 1.1
diff -u -r1.1 stpcpy.c
--- libc/string/stpcpy.c 28 Jun 2007 17:07:23 -0000 1.1
+++ libc/string/stpcpy.c 19 Jul 2013 14:12:30 -0000
@@ -7,7 +7,7 @@
ANSI_SYNOPSIS
#include <string.h>
- char *stpcpy(char *<[dst]>, const char *<[src]>);
+ char *stpcpy(char *restrict <[dst]>, const char *restrict <[src]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -60,8 +60,8 @@
char*
_DEFUN (stpcpy, (dst, src),
- char *dst _AND
- _CONST char *src)
+ char *__restrict dst _AND
+ _CONST char *__restrict src)
{
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
long *aligned_dst;
Index: libc/string/stpncpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/stpncpy.c,v
retrieving revision 1.1
diff -u -r1.1 stpncpy.c
--- libc/string/stpncpy.c 28 Jun 2007 17:07:23 -0000 1.1
+++ libc/string/stpncpy.c 19 Jul 2013 14:12:30 -0000
@@ -7,7 +7,8 @@
ANSI_SYNOPSIS
#include <string.h>
- char *stpncpy(char *<[dst]>, const char *<[src]>, size_t <[length]>);
+ char *stpncpy(char *restrict <[dst]>, const char *restrict <[src]>,
+ size_t <[length]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -68,8 +69,8 @@
char *
_DEFUN (stpncpy, (dst, src),
- char *dst _AND
- _CONST char *src _AND
+ char *__restrict dst _AND
+ _CONST char *__restrict src _AND
size_t count)
{
char *ret = NULL;
Index: libc/string/strcat.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strcat.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 strcat.c
--- libc/string/strcat.c 17 Feb 2000 19:39:48 -0000 1.1.1.1
+++ libc/string/strcat.c 19 Jul 2013 14:12:30 -0000
@@ -7,7 +7,7 @@
ANSI_SYNOPSIS
#include <string.h>
- char *strcat(char *<[dst]>, const char *<[src]>);
+ char *strcat(char *restrict <[dst]>, const char *restrict <[src]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -61,8 +61,8 @@
char *
_DEFUN (strcat, (s1, s2),
- char *s1 _AND
- _CONST char *s2)
+ char *__restrict s1 _AND
+ _CONST char *__restrict s2)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
char *s = s1;
Index: libc/string/strncat.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strncat.c,v
retrieving revision 1.2
diff -u -r1.2 strncat.c
--- libc/string/strncat.c 28 Oct 2005 21:21:07 -0000 1.2
+++ libc/string/strncat.c 19 Jul 2013 14:12:30 -0000
@@ -7,7 +7,8 @@
ANSI_SYNOPSIS
#include <string.h>
- char *strncat(char *<[dst]>, const char *<[src]>, size_t <[length]>);
+ char *strncat(char *<restrict [dst]>, const char *<restrict [src]>,
+ size_t <[length]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -65,8 +66,8 @@
char *
_DEFUN (strncat, (s1, s2, n),
- char *s1 _AND
- _CONST char *s2 _AND
+ char *__restrict s1 _AND
+ _CONST char *__restrict s2 _AND
size_t n)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
Index: libc/string/strncpy.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strncpy.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 strncpy.c
--- libc/string/strncpy.c 17 Feb 2000 19:39:48 -0000 1.1.1.1
+++ libc/string/strncpy.c 19 Jul 2013 14:12:30 -0000
@@ -7,7 +7,8 @@
ANSI_SYNOPSIS
#include <string.h>
- char *strncpy(char *<[dst]>, const char *<[src]>, size_t <[length]>);
+ char *strncpy(char *restrict <[dst]>, const char *restrict <[src]>,
+ size_t <[length]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -66,8 +67,8 @@
char *
_DEFUN (strncpy, (dst0, src0),
- char *dst0 _AND
- _CONST char *src0 _AND
+ char *__restrict dst0 _AND
+ _CONST char *__restrict src0 _AND
size_t count)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
Index: libc/string/strtok.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strtok.c,v
retrieving revision 1.7
diff -u -r1.7 strtok.c
--- libc/string/strtok.c 29 Apr 2013 21:06:23 -0000 1.7
+++ libc/string/strtok.c 19 Jul 2013 14:12:30 -0000
@@ -13,9 +13,11 @@
ANSI_SYNOPSIS
#include <string.h>
- char *strtok(char *<[source]>, const char *<[delimiters]>)
- char *strtok_r(char *<[source]>, const char *<[delimiters]>,
- char **<[lasts]>)
+ char *strtok(char *restrict <[source]>,
+ const char *restrict <[delimiters]>)
+ char *strtok_r(char *restrict <[source]>,
+ const char *restrict <[delimiters]>,
+ char **<[lasts]>)
char *strsep(char **<[source_ptr]>, const char *<[delimiters]>)
TRAD_SYNOPSIS
@@ -92,8 +94,8 @@
char *
_DEFUN (strtok, (s, delim),
- register char *s _AND
- register const char *delim)
+ register char *__restrict s _AND
+ register const char *__restrict delim)
{
struct _reent *reent = _REENT;
Index: libc/string/strtok_r.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strtok_r.c,v
retrieving revision 1.3
diff -u -r1.3 strtok_r.c
--- libc/string/strtok_r.c 29 Aug 2002 19:47:43 -0000 1.3
+++ libc/string/strtok_r.c 19 Jul 2013 14:12:30 -0000
@@ -91,9 +91,9 @@
char *
_DEFUN (strtok_r, (s, delim, lasts),
- register char *s _AND
- register const char *delim _AND
- char **lasts)
+ register char *__restrict s _AND
+ register const char *__restrict delim _AND
+ char **__restrict lasts)
{
return __strtok_r (s, delim, lasts, 1);
}
Index: libc/string/strxfrm.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/string/strxfrm.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 strxfrm.c
--- libc/string/strxfrm.c 17 Feb 2000 19:39:48 -0000 1.1.1.1
+++ libc/string/strxfrm.c 19 Jul 2013 14:12:30 -0000
@@ -7,7 +7,8 @@
ANSI_SYNOPSIS
#include <string.h>
- size_t strxfrm(char *<[s1]>, const char *<[s2]>, size_t <[n]>);
+ size_t strxfrm(char *restrict <[s1]>, const char *restrict <[s2]>,
+ size_t <[n]>);
TRAD_SYNOPSIS
#include <string.h>
@@ -52,8 +53,8 @@
size_t
_DEFUN (strxfrm, (s1, s2, n),
- char *s1 _AND
- _CONST char *s2 _AND
+ char *__restrict s1 _AND
+ _CONST char *__restrict s2 _AND
size_t n)
{
size_t res;
More information about the Newlib
mailing list