Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_unix/sys/src/libc/386/memmove.s – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
TEXT memmove(SB), $0
2
	MOVL	p1+0(FP), DI
3
	MOVL	DI, AX			/* return value */
4
	MOVL	p2+4(FP), SI
5
	MOVL	n+8(FP), BX
6
	CMPL	BX, $0
7
	JGT	_ok
8
	JEQ	_return			/* nothing to do if n == 0 */
9
	MOVL	$0, SI			/* fault if n < 0 */
10
 
11
/*
12
 * check and set for backwards:
13
 *	(p2 < p1) && ((p2+n) > p1)
14
 */
15
_ok:
16
	CMPL	SI, DI
17
	JGT	_forward
18
	JEQ	_return			/* nothing to do if p2 == p1 */
19
	MOVL	SI, DX
20
	ADDL	BX, DX
21
	CMPL	DX, DI
22
	JGT	_back
23
 
24
/*
25
 * copy whole longs
26
 */
27
_forward:
28
	MOVL	BX, CX
29
	CLD
30
	SHRL	$2, CX
31
	ANDL	$3, BX
32
	REP;	MOVSL
33
 
34
/*
35
 * copy the rest, by bytes
36
 */
37
	JEQ	_return			/* flags set by above ANDL */
38
	MOVL	BX, CX
39
	REP;	MOVSB
40
 
41
	RET
42
 
43
/*
44
 * whole thing backwards has
45
 * adjusted addresses
46
 */
47
_back:
48
	ADDL	BX, DI
49
	ADDL	BX, SI
50
	STD
51
	SUBL	$4, DI
52
	SUBL	$4, SI
53
/*
54
 * copy whole longs
55
 */
56
	MOVL	BX, CX
57
	SHRL	$2, CX
58
	ANDL	$3, BX
59
	REP;	MOVSL
60
/*
61
 * copy the rest, by bytes
62
 */
63
	JEQ	_return			/* flags set by above ANDL */
64
 
65
	ADDL	$3, DI
66
	ADDL	$3, SI
67
	MOVL	BX, CX
68
	REP;	MOVSB
69
 
70
_return:
71
	RET