git.ucc.asn.au
/
tpg
/
acess2.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
fc0af40
)
Usermode/libc - Fixing little bugs/speed issues
author
John Hodge
<
[email protected]
>
Thu, 17 Nov 2011 07:51:56 +0000
(15:51 +0800)
committer
John Hodge
<
[email protected]
>
Thu, 17 Nov 2011 07:51:56 +0000
(15:51 +0800)
Usermode/Libraries/Makefile.cfg
patch
|
blob
|
history
Usermode/Libraries/libc.so_src/string.c
patch
|
blob
|
history
Usermode/include/errno.h
patch
|
blob
|
history
Usermode/include/string.h
patch
|
blob
|
history
diff --git
a/Usermode/Libraries/Makefile.cfg
b/Usermode/Libraries/Makefile.cfg
index
c3b2466
..
d7dab2d
100644
(file)
--- a/
Usermode/Libraries/Makefile.cfg
+++ b/
Usermode/Libraries/Makefile.cfg
@@
-7,5
+7,5
@@
MAKEDEP = $(CC) -M
ASFLAGS += -D ARCHDIR=$(ARCHDIR) -D __ASSEMBLER__=1
CPPFLAGS := -I$(ACESSDIR)/Usermode/include/ -DARCHDIR=$(ARCHDIR) -DARCHDIR_is_$(ARCHDIR)=1
ASFLAGS += -D ARCHDIR=$(ARCHDIR) -D __ASSEMBLER__=1
CPPFLAGS := -I$(ACESSDIR)/Usermode/include/ -DARCHDIR=$(ARCHDIR) -DARCHDIR_is_$(ARCHDIR)=1
-CFLAGS := -g -Wall -fPIC -fno-
builtin -fno-stack-protector $(CPPFLAGS)
+CFLAGS := -g -Wall -fPIC -fno-
stack-protector -O3
LDFLAGS := -g -nostdlib -shared -I/Acess/Libs/ld-acess.so -lld-acess -e SoMain -x -L$(OUTPUTDIR)Libs/ --no-undefined
LDFLAGS := -g -nostdlib -shared -I/Acess/Libs/ld-acess.so -lld-acess -e SoMain -x -L$(OUTPUTDIR)Libs/ --no-undefined
diff --git
a/Usermode/Libraries/libc.so_src/string.c
b/Usermode/Libraries/libc.so_src/string.c
index
a5becf8
..
e9e1574
100644
(file)
--- a/
Usermode/Libraries/libc.so_src/string.c
+++ b/
Usermode/Libraries/libc.so_src/string.c
@@
-14,7
+14,7
@@
*/
EXPORT int strcmp(const char *s1, const char *s2)
{
*/
EXPORT int strcmp(const char *s1, const char *s2)
{
- while(*s1
== *s2 && *s1 != '\0' && *s2 != '\0'
) {
+ while(*s1
&& *s1 == *s2
) {
s1++; s2++;
}
return (int)*s1 - (int)*s2;
s1++; s2++;
}
return (int)*s1 - (int)*s2;
@@
-26,7
+26,7
@@
EXPORT int strcmp(const char *s1, const char *s2)
*/
EXPORT int strncmp(const char *s1, const char *s2, size_t n)
{
*/
EXPORT int strncmp(const char *s1, const char *s2, size_t n)
{
- while(n && *s1
== *s2 && *s1 != '\0' && *s2 != '\0'
)
+ while(n && *s1
&& *s1 == *s2
)
{
s1++; s2++;
n --;
{
s1++; s2++;
n --;
@@
-229,6
+229,21
@@
EXPORT void *memcpy(void *__dest, const void *__src, size_t count)
const char *sp = __src;
while(count--) *dp++ = *sp ++;
}
const char *sp = __src;
while(count--) *dp++ = *sp ++;
}
+ // TODO: Bulk aligned copies
+ #if 0
+ else if(count > 128 && (dst & 15) == (src & 15) )
+ {
+ // SSE/bulk copy
+ for( ; dst & 15; count -- )
+ *(char*)dst++ = *(char*)src++;
+ memcpy_16byte(dst, src, count / 16);
+ dst += count & ~15;
+ src += count & ~15;
+ count &= 15;
+ while(count --)
+ *(char*)dst++ = *(char*)src++;
+ }
+ #endif
else
{
void **dp, **sp;
else
{
void **dp, **sp;
@@
-255,14
+270,14
@@
EXPORT void *memcpy(void *__dest, const void *__src, size_t count)
*/
EXPORT void *memmove(void *dest, const void *src, size_t count)
{
*/
EXPORT void *memmove(void *dest, const void *src, size_t count)
{
- char *sp = (char *)src;
- char *dp = (char *)dest;
- // Check if
corruption will happen
+
char *sp = (char *)src;
+
char *dp = (char *)dest;
+ // Check if
the areas overlap
if( (intptr_t)dest > (intptr_t)src && (intptr_t)dest < (intptr_t)src+count )
for(;count--;) dp[count] = sp[count];
else
if( (intptr_t)dest > (intptr_t)src && (intptr_t)dest < (intptr_t)src+count )
for(;count--;) dp[count] = sp[count];
else
- for(;count--;) *dp++ = *sp++;
- return dest;
+
for(;count--;) *dp++ = *sp++;
+
return dest;
}
/**
}
/**
@@
-274,12
+289,13
@@
EXPORT void *memmove(void *dest, const void *src, size_t count)
*/
EXPORT int memcmp(const void *mem1, const void *mem2, size_t count)
{
*/
EXPORT int memcmp(const void *mem1, const void *mem2, size_t count)
{
+ const unsigned char *p1 = mem1, *p2 = mem2;
while(count--)
{
while(count--)
{
- if( *
(unsigned char*)mem1 != *(unsigned char*)mem
2 )
- return *
(unsigned char*)mem1 - *(unsigned char*)mem
2;
-
mem
1 ++;
-
mem
2 ++;
+ if( *
p1 != *p
2 )
+ return *
p1 - *p
2;
+
p
1 ++;
+
p
2 ++;
}
return 0;
}
}
return 0;
}
diff --git
a/Usermode/include/errno.h
b/Usermode/include/errno.h
index
e4228b7
..
738541d
100644
(file)
--- a/
Usermode/include/errno.h
+++ b/
Usermode/include/errno.h
@@
-1,8
+1,15
@@
#ifndef _ERRNO_H_
#define _ERRNO_H_
#ifndef _ERRNO_H_
#define _ERRNO_H_
+// TODO: Fully implement errno.h, make sure it matches the kernel one
+
#define errno _errno
#define strerror(_x) "Unimplemented"
#define errno _errno
#define strerror(_x) "Unimplemented"
+enum
+{
+ EINVAL
+};
+
#endif
#endif
diff --git
a/Usermode/include/string.h
b/Usermode/include/string.h
index
b77d807
..
7c38602
100644
(file)
--- a/
Usermode/include/string.h
+++ b/
Usermode/include/string.h
@@
-18,7
+18,7
@@
extern char *strcpy(char *dst, const char *src);
extern char *strncpy(char *dst, const char *src, size_t num);
extern char *strcat(char *dst, const char *src);
extern char *strdup(const char *src);
extern char *strncpy(char *dst, const char *src, size_t num);
extern char *strcat(char *dst, const char *src);
extern char *strdup(const char *src);
-extern char *strndup(const char *src,
in
t length);
+extern char *strndup(const char *src,
size_
t length);
extern char *strchr(const char *str, int character);
extern char *strrchr(const char *str, int character);
extern char *strstr(const char *str1, const char *str2);
extern char *strchr(const char *str, int character);
extern char *strrchr(const char *str, int character);
extern char *strstr(const char *str1, const char *str2);
UCC
git Repository :: git.ucc.asn.au