Main Page | Alphabetical List | Class List | File List | Class Members | File Members

memcpy.h

Go to the documentation of this file.
00001 #ifndef _MEMCPY_H_
00002 #define _MEMCPY_H_
00003 
00004 #include <nlibc.h>
00005 
00006 #define memcpy(DEST,SRC,N)  wmemcpy((DEST),(SRC),((N+15)>>4))
00007 
00013 #ifndef __HAS_MAIN
00014 extern void *wmemcpy(void * restrict dest, const void * restrict src, size_t words);
00015 #else
00016 #if !defined(__cflow_processed) || defined(_uses_wmemcpy_memcpy_h)
00017 void *wmemcpy(void * restrict dest, const void * restrict src, size_t words) {
00018         int todo, i = 0;
00019         todo = words;
00020         for(i = 0; i+6 <= words; i+=6 ) { 
00021                 asm("\tlmtr [%R0 %R1 %R2 %R3 %R4 %R5] 0.%2.%0\n" 
00022                     "\trtm 0.%2.%1 [%R0 %R1 %R2 %R3 %R4 %R5]" :: "r" (src), "r" (dest), "r" (i));
00023                 todo -= 6;
00024         }
00025         switch( todo ) {
00026           case 5: asm("\tlmtr [%R0 %R1 %R2 %R3 %R4] 0.%2.%0\n" 
00027                       "\trtm 0.%2.%1 [%R0 %R1 %R2 %R3 %R4]" :: "r" (src), "r" (dest), "r" (i));
00028                   break;
00029           case 4: asm("\tlmtr [%R0 %R1 %R2 %R3] 0.%2.%0\n" 
00030                       "\trtm 0.%2.%1 [%R0 %R1 %R2 %R3]" :: "r" (src), "r" (dest), "r" (i));
00031                   break;
00032           case 3: asm("\tlmtr [%R0 %R1 %R2] 0.%2.%0\n" 
00033                       "\trtm 0.%2.%1 [%R0 %R1 %R2]" :: "r" (src), "r" (dest), "r" (i));
00034                   break;
00035           case 2: asm("\tlmtr [%R0 %R1] 0.%2.%0\n" 
00036                       "\trtm 0.%2.%1 [%R0 %R1]" :: "r" (src), "r" (dest), "r" (i));
00037                   break;
00038           case 1: asm("\tlmtr %R0 0.%2.%0\n" 
00039                       "\trtm 0.%2.%1 %R0" :: "r" (src), "r" (dest), "r" (i));
00040                   break;
00041           default: break;
00042         }
00043         return dest;
00044 }
00045 #endif // _uses_wmemcpy_memcpy_h
00046 #endif // Has Main
00047 
00048 #endif // _MEMCPY_H_

Generated on Fri Jul 14 10:51:31 2006 for nlibc by doxygen 1.3.5