diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/asm-x86_64/string.h |
Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/asm-x86_64/string.h')
-rw-r--r-- | include/asm-x86_64/string.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/include/asm-x86_64/string.h b/include/asm-x86_64/string.h new file mode 100644 index 00000000000..a3493ee282b --- /dev/null +++ b/include/asm-x86_64/string.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #ifndef _X86_64_STRING_H_ | ||
2 | #define _X86_64_STRING_H_ | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | /* Written 2002 by Andi Kleen */ | ||
7 | |||
8 | /* Only used for special circumstances. Stolen from i386/string.h */ | ||
9 | static inline void * __inline_memcpy(void * to, const void * from, size_t n) | ||
10 | { | ||
11 | unsigned long d0, d1, d2; | ||
12 | __asm__ __volatile__( | ||
13 | "rep ; movsl\n\t" | ||
14 | "testb $2,%b4\n\t" | ||
15 | "je 1f\n\t" | ||
16 | "movsw\n" | ||
17 | "1:\ttestb $1,%b4\n\t" | ||
18 | "je 2f\n\t" | ||
19 | "movsb\n" | ||
20 | "2:" | ||
21 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) | ||
22 | :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from) | ||
23 | : "memory"); | ||
24 | return (to); | ||
25 | } | ||
26 | |||
27 | /* Even with __builtin_ the compiler may decide to use the out of line | ||
28 | function. */ | ||
29 | |||
30 | #define __HAVE_ARCH_MEMCPY 1 | ||
31 | extern void *__memcpy(void *to, const void *from, size_t len); | ||
32 | #define memcpy(dst,src,len) \ | ||
33 | ({ size_t __len = (len); \ | ||
34 | void *__ret; \ | ||
35 | if (__builtin_constant_p(len) && __len >= 64) \ | ||
36 | __ret = __memcpy((dst),(src),__len); \ | ||
37 | else \ | ||
38 | __ret = __builtin_memcpy((dst),(src),__len); \ | ||
39 | __ret; }) | ||
40 | |||
41 | |||
42 | #define __HAVE_ARCH_MEMSET | ||
43 | #define memset __builtin_memset | ||
44 | |||
45 | #define __HAVE_ARCH_MEMMOVE | ||
46 | void * memmove(void * dest,const void *src,size_t count); | ||
47 | |||
48 | /* Use C out of line version for memcmp */ | ||
49 | #define memcmp __builtin_memcmp | ||
50 | int memcmp(const void * cs,const void * ct,size_t count); | ||
51 | |||
52 | /* out of line string functions use always C versions */ | ||
53 | #define strlen __builtin_strlen | ||
54 | size_t strlen(const char * s); | ||
55 | |||
56 | #define strcpy __builtin_strcpy | ||
57 | char * strcpy(char * dest,const char *src); | ||
58 | |||
59 | #define strcat __builtin_strcat | ||
60 | char * strcat(char * dest, const char * src); | ||
61 | |||
62 | #define strcmp __builtin_strcmp | ||
63 | int strcmp(const char * cs,const char * ct); | ||
64 | |||
65 | #endif /* __KERNEL__ */ | ||
66 | |||
67 | #endif | ||