Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
TEXT	_mulv(SB), $0
2
	MOVL	r+0(FP), CX
3
	MOVL	a+4(FP), AX
4
	MULL	b+12(FP)
5
	MOVL	AX, 0(CX)
6
	MOVL	DX, BX
7
	MOVL	a+4(FP), AX
8
	MULL	b+16(FP)
9
	ADDL	AX, BX
10
	MOVL	a+8(FP), AX
11
	MULL	b+12(FP)
12
	ADDL	AX, BX
13
	MOVL	BX, 4(CX)
14
	RET
15
 
16
/*
17
 * _mul64by32(uint64 *r, uint64 a, uint32 b)
18
 * sets *r = low 64 bits of 96-bit product a*b; returns high 32 bits.
19
 */
20
TEXT	_mul64by32(SB), $0
21
	MOVL	r+0(FP), CX
22
	MOVL	a+4(FP), AX
23
	MULL	b+12(FP)
24
	MOVL	AX, 0(CX)	/* *r = low 32 bits of a*b */
25
	MOVL	DX, BX		/* BX = high 32 bits of a*b */
26
 
27
	MOVL	a+8(FP), AX
28
	MULL	b+12(FP)	/* hi = (a>>32) * b */
29
	ADDL	AX, BX		/* BX += low 32 bits of hi */
30
	ADCL	$0, DX		/* DX = high 32 bits of hi + carry */
31
	MOVL	BX, 4(CX)	/* *r |= (high 32 bits of a*b) << 32 */
32
 
33
	MOVL	DX, AX		/* return hi>>32 */
34
	RET
35
 
36
TEXT	_div64by32(SB), $0
37
	MOVL	r+12(FP), CX
38
	MOVL	a+0(FP), AX
39
	MOVL	a+4(FP), DX
40
	DIVL	b+8(FP)
41
	MOVL	DX, 0(CX)
42
	RET
43
 
44
TEXT	_addv(SB),1,$0	/* used in profiler, can't be profiled */
45
	MOVL	r+0(FP), CX
46
	MOVL	a+4(FP), AX
47
	MOVL	a+8(FP), BX
48
	ADDL	b+12(FP), AX
49
	ADCL	b+16(FP), BX
50
	MOVL	AX, 0(CX)
51
	MOVL	BX, 4(CX)
52
	RET
53
 
54
TEXT	_subv(SB),1,$0		/* used in profiler, can't be profiled */
55
	MOVL	r+0(FP), CX
56
	MOVL	a+4(FP), AX
57
	MOVL	a+8(FP), BX
58
	SUBL	b+12(FP), AX
59
	SBBL	b+16(FP), BX
60
	MOVL	AX, 0(CX)
61
	MOVL	BX, 4(CX)
62
	RET