Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel'
[palacios.git] / kitten / include / arch-x86_64 / string.h
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 void *memset(void *s, int c, size_t n);
44
45 #define __HAVE_ARCH_MEMMOVE
46 void * memmove(void * dest,const void *src,size_t count);
47
48 int memcmp(const void * cs,const void * ct,size_t count);
49 size_t strlen(const char * s);
50 char *strcpy(char * dest,const char *src);
51 char *strcat(char * dest, const char * src);
52 int strcmp(const char * cs,const char * ct);
53
54 #endif /* __KERNEL__ */
55
56 #endif