POK
|
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