[uClibc-cvs] CVS update of uClibc/ldso/include (dl-string.h)
Joakim Tjernlund
jocke at codepoet.org
Tue Aug 10 15:06:31 UTC 2004
Date: Tuesday, August 10, 2004 @ 09:06:31
Author: jocke
Path: /var/cvs/uClibc/ldso/include
Modified: dl-string.h (1.7 -> 1.8)
_dl_strlen,_dl_strcat,_dl_strcpy,_dl_strcmp,_dl_strncmp,
_dl_strchr,_dl_strrchr,_dl_strstr,_dl_memcmp:
Optimize for archs which can do pre increment/decrement and load/store
in one instruction.
Index: uClibc/ldso/include/dl-string.h
diff -u uClibc/ldso/include/dl-string.h:1.7 uClibc/ldso/include/dl-string.h:1.8
--- uClibc/ldso/include/dl-string.h:1.7 Tue Aug 10 08:44:34 2004
+++ uClibc/ldso/include/dl-string.h Tue Aug 10 09:06:30 2004
@@ -24,45 +24,42 @@
static inline size_t _dl_strlen(const char * str)
{
- register char *ptr = (char *) str;
+ register const char *ptr = (char *) str-1;
- while (*ptr)
- ptr++;
+ while (*++ptr);
return (ptr - str);
}
static inline char *_dl_strcat(char *dst, const char *src)
{
- register char *ptr = dst;
-
- while (*ptr)
- ptr++;
-
- while (*src)
- *ptr++ = *src++;
- *ptr = '\0';
+ register char *ptr = dst-1;
+ src--;
+ while (*++ptr)
+ ;/* empty */
+ ptr--;
+ while ((*++ptr = *++src) != 0)
+ ;/* empty */
return dst;
}
static inline char * _dl_strcpy(char * dst,const char *src)
{
register char *ptr = dst;
-
- while (*src)
- *dst++ = *src++;
- *dst = '\0';
-
+
+ dst--;src--;
+ while ((*++dst = *++src) != 0);
+
return ptr;
}
static inline int _dl_strcmp(const char * s1,const char * s2)
{
register unsigned char c1, c2;
-
+ s1--;s2--;
do {
- c1 = (unsigned char) *s1++;
- c2 = (unsigned char) *s2++;
+ c1 = (unsigned char) *++s1;
+ c2 = (unsigned char) *++s2;
if (c1 == '\0')
return c1 - c2;
}
@@ -76,25 +73,24 @@
register unsigned char c1 = '\0';
register unsigned char c2 = '\0';
+ s1--;s2--;
while (len > 0) {
- c1 = (unsigned char) *s1++;
- c2 = (unsigned char) *s2++;
+ c1 = (unsigned char) *++s1;
+ c2 = (unsigned char) *++s2;
if (c1 == '\0' || c1 != c2)
return c1 - c2;
len--;
}
-
return c1 - c2;
}
static inline char * _dl_strchr(const char * str,int c)
{
register char ch;
-
+ str--;
do {
- if ((ch = *str) == c)
+ if ((ch = *++str) == c)
return (char *) str;
- str++;
}
while (ch);
@@ -104,19 +100,17 @@
static inline char *_dl_strrchr(const char *str, int c)
{
register char *prev = 0;
- register char *ptr = (char *) str;
+ register char *ptr = (char *) str-1;
- while (*ptr != '\0') {
+ while (*++ptr != '\0') {
if (*ptr == c)
prev = ptr;
- ptr++;
}
if (c == '\0')
return(ptr);
return(prev);
}
-
static inline char *_dl_strstr(const char *s1, const char *s2)
{
register const char *s = s1;
@@ -150,17 +144,15 @@
return dst;
}
-
static inline int _dl_memcmp(const void * s1,const void * s2,size_t len)
{
- unsigned char *c1 = (unsigned char *)s1;
- unsigned char *c2 = (unsigned char *)s2;
+ unsigned char *c1 = (unsigned char *)s1-1;
+ unsigned char *c2 = (unsigned char *)s2-1;
- while (len--) {
- if (*c1 != *c2)
+ while (len) {
+ if (*++c1 != *++c2)
return *c1 - *c2;
- c1++;
- c2++;
+ len--;
}
return 0;
}
More information about the uClibc-cvs
mailing list