00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "src/common/shared.hpp"
00018 #include "src/memory/memset.hpp"
00019
00020
00021 void *memmove(void* dest, const void* src, uint32 count)
00022 { _Pf("memmove");
00023 if (count == 0)
00024 complain("count=0");
00025 if (dest < src)
00026 {
00027 asm volatile ("cld");
00028 asm volatile ("rep movsb" : : "c" (count), "S" (src), "D" (dest));
00029 } else
00030 {
00031 asm volatile ("std");
00032 asm volatile ("rep movsb" : : "c" (count), "S" ((uint32)src + count - 1), "D" ((uint32)dest + count - 1));
00033 }
00034 preturn(dest);
00035 }
00036
00037
00038 void *memset(void *buffer, int c, uint32 num)
00039 {_Pf("memset");
00040 uint32 cnt;
00041 if (num == 0)
00042 complain("num=0");
00043
00044 for (cnt=0; cnt < (num >> 2); cnt++)
00045 ((int*)buffer)[cnt] = c;
00046
00047 if (num & 3)
00048 ((char*)buffer)[num-4] = c;
00049
00050 preturn(buffer);
00051 }
00052
00053
00054
00055
00056
00057
00058