Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
TEXT ptclbsum(SB), $0
2
	MOVL	addr+0(FP), SI
3
	MOVL	len+4(FP), CX
4
 
5
	XORL	AX, AX			/* sum */
6
 
7
	TESTL	$1, SI			/* byte aligned? */
8
	MOVL	SI, DI
9
	JEQ	_2align
10
 
11
	DECL	CX
12
	JLT	_return
13
 
14
	MOVB	0x00(SI), AH
15
	INCL	SI
16
 
17
_2align:
18
	TESTL	$2, SI			/* word aligned? */
19
	JEQ	_32loop
20
 
21
	CMPL	CX, $2			/* less than 2 bytes? */
22
	JLT	_1dreg
23
	SUBL	$2, CX
24
 
25
	XORL	BX, BX
26
	MOVW	0x00(SI), BX
27
	ADDL	BX, AX
28
	ADCL	$0, AX
29
	LEAL	2(SI), SI
30
 
31
_32loop:
32
	CMPL	CX, $0x20
33
	JLT	_8loop
34
 
35
	MOVL	CX, BP
36
	SHRL	$5, BP
37
	ANDL	$0x1F, CX
38
 
39
_32loopx:
40
	MOVL	0x00(SI), BX
41
	MOVL	0x1C(SI), DX
42
	ADCL	BX, AX
43
	MOVL	0x04(SI), BX
44
	ADCL	DX, AX
45
	MOVL	0x10(SI), DX
46
	ADCL	BX, AX
47
	MOVL	0x08(SI), BX
48
	ADCL	DX, AX
49
	MOVL	0x14(SI), DX
50
	ADCL	BX, AX
51
	MOVL	0x0C(SI), BX
52
	ADCL	DX, AX
53
	MOVL	0x18(SI), DX
54
	ADCL	BX, AX
55
	LEAL	0x20(SI), SI
56
	ADCL	DX, AX
57
 
58
	DECL	BP
59
	JNE	_32loopx
60
 
61
	ADCL	$0, AX
62
 
63
_8loop:
64
	CMPL	CX, $0x08
65
	JLT	_2loop
66
 
67
	MOVL	CX, BP
68
	SHRL	$3, BP
69
	ANDL	$0x07, CX
70
 
71
_8loopx:
72
	MOVL	0x00(SI), BX
73
	ADCL	BX, AX
74
	MOVL	0x04(SI), DX
75
	ADCL	DX, AX
76
 
77
	LEAL	0x08(SI), SI
78
	DECL	BP
79
	JNE	_8loopx
80
 
81
	ADCL	$0, AX
82
 
83
_2loop:
84
	CMPL	CX, $0x02
85
	JLT	_1dreg
86
 
87
	MOVL	CX, BP
88
	SHRL	$1, BP
89
	ANDL	$0x01, CX
90
 
91
_2loopx:
92
	MOVWLZX	0x00(SI), BX
93
	ADCL	BX, AX
94
 
95
	LEAL	0x02(SI), SI
96
	DECL	BP
97
	JNE	_2loopx
98
 
99
	ADCL	$0, AX
100
 
101
_1dreg:
102
	TESTL	$1, CX			/* 1 byte left? */
103
	JEQ	_fold
104
 
105
	XORL	BX, BX
106
	MOVB	0x00(SI), BX
107
	ADDL	BX, AX
108
	ADCL	$0, AX
109
 
110
_fold:
111
	MOVL	AX, BX
112
	SHRL	$16, BX
113
	JEQ	_swab
114
 
115
	ANDL	$0xFFFF, AX
116
	ADDL	BX, AX
117
	JMP	_fold
118
 
119
_swab:
120
	TESTL	$1, addr+0(FP)
121
	/*TESTL	$1, DI*/
122
	JNE	_return
123
	XCHGB	AH, AL
124
 
125
_return:
126
	RET