Subversion Repositories Kolibri OS

Rev

Rev 1157 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1157 Rev 1163
Line 4... Line 4...
4
 
4
 
5
static void *memmove(void *dst,const void *src,size_t length)
5
static void *memmove(void *dst,const void *src,size_t length)
6
{
6
{
Line -... Line 7...
-
 
7
	void *value;
-
 
8
 
7
	void *value;
9
	if (length & 3)
8
 
10
	{//length not aligned in 4 bytes use reb movsb
9
	__asm__ __volatile__(
11
		__asm__ __volatile__(
10
	"movl %%edi,%%eax\n\t"
12
		"movl %%edi,%%eax\n\t"
11
	"cld\n\t"
13
		"cld\n\t"
12
	"rep\n\t"
14
		"rep\n\t"
13
	"movsb"
15
		"movsb"
14
	:"=D"(value)
16
		:"=D"(value)
-
 
17
		:"c"(length),"S"(src),"D"(dst)
-
 
18
		:"eax");
-
 
19
	}
-
 
20
	else
-
 
21
	{//length aligned in 4 bytes use rep movsd
-
 
22
		length=length >> 2;//length=length/4
-
 
23
		__asm__ __volatile__(
-
 
24
		"movl %%edi,%%eax\n\t"
-
 
25
		"cld\n\t"
-
 
26
		"rep\n\t"
-
 
27
		"movsd"
-
 
28
		:"=D"(value)
Line -... Line 29...
-
 
29
		:"c"(length),"S"(src),"D"(dst)
15
	:"c"(length),"S"(src),"D"(dst)
30
		:"eax");
16
	:"eax");
31
 
Line 17... Line 32...
17
 
32
	}
18
	return(value);
33
	return(value);