POK
/home/jaouen/pok_official/pok/trunk/libpok/libc/string/x86/memcpy.c
00001 /*
00002  *                               POK header
00003  * 
00004  * The following file is a part of the POK project. Any modification should
00005  * made according to the POK licence. You CANNOT use this file or a part of
00006  * this file is this part of a file for your own project
00007  *
00008  * For more information on the POK licence, please see our LICENCE FILE
00009  *
00010  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
00011  *
00012  *                                      Copyright (c) 2007-2009 POK team 
00013  *
00014  * Created by julien on Thu Jan 15 23:34:13 2009 
00015  */
00016 
00017 
00018 #include <libc/string.h>
00019 
00020 void            *memcpy(void * to, const void * from, size_t n)
00021 {
00022   int           d0;
00023   int           d1;
00024   int           d2;
00025 
00026   __asm__ __volatile__(
00027                        "rep ; movsl\n\t"
00028                        "testb $2,%b4\n\t"
00029                        "je 1f\n\t"
00030                        "movsw\n"
00031                        "1:\ttestb $1,%b4\n\t"
00032                        "je 2f\n\t"
00033                        "movsb\n"
00034                        "2:"
00035                        : "=&c" (d0), "=&D" (d1), "=&S" (d2)
00036                        :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
00037                        : "memory");
00038   return (to);
00039 }
00040