[PATCH] x86_64 merge: arch + asm
[opensuse:kernel.git] / include / asm-x86_64 / string.h
1 #ifndef _X86_64_STRING_H_
2 #define _X86_64_STRING_H_
3
4 #ifdef __KERNEL__
5 #include <linux/config.h>
6
7 #define struct_cpy(x,y) (*(x)=*(y))
8
9 #define __HAVE_ARCH_MEMCMP
10 #define __HAVE_ARCH_STRLEN
11
12 #define memset __builtin_memset
13 #define memcpy __builtin_memcpy
14 #define memcmp __builtin_memcmp
15
16 /* Work around "undefined reference to strlen" linker errors.  */
17 /* #define strlen __builtin_strlen */
18
19 #define __HAVE_ARCH_STRLEN
20 static inline size_t strlen(const char * s)
21 {
22 int d0;
23 register int __res;
24 __asm__ __volatile__(
25         "repne\n\t"
26         "scasb\n\t"
27         "notl %0\n\t"
28         "decl %0"
29         :"=c" (__res), "=&D" (d0) :"1" (s),"a" (0), "0" (0xffffffff));
30 return __res;
31 }
32
33
34 extern char *strstr(const char *cs, const char *ct);
35
36 #endif /* __KERNEL__ */
37
38 #endif