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_posix/sys/src/libc/sparc/vlop.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	_mulv(SB), $0
2
	MOVW	u1+8(FP), R8
3
	MOVW	u2+16(FP), R13
4
 
5
	MOVW	R13, R16		/* save low parts for later */
6
	MOVW	R8, R12
7
 
8
	/*
9
	 * unsigned 32x32 => 64 multiply
10
	 */
11
	CMP	R13, R8
12
	BLE	mul1
13
	MOVW	R12, R13
14
	MOVW	R16, R8
15
mul1:
16
	MOVW	R13, Y
17
	ANDNCC	$0xFFF, R13, R0
18
	BE	mul_shortway
19
	ANDCC	R0, R0, R9		/* zero partial product and clear N and V cond's */
20
 
21
	/* long multiply */
22
	MULSCC	R8, R9, R9		/* 0 */
23
	MULSCC	R8, R9, R9		/* 1 */
24
	MULSCC	R8, R9, R9		/* 2 */
25
	MULSCC	R8, R9, R9		/* 3 */
26
	MULSCC	R8, R9, R9		/* 4 */
27
	MULSCC	R8, R9, R9		/* 5 */
28
	MULSCC	R8, R9, R9		/* 6 */
29
	MULSCC	R8, R9, R9		/* 7 */
30
	MULSCC	R8, R9, R9		/* 8 */
31
	MULSCC	R8, R9, R9		/* 9 */
32
	MULSCC	R8, R9, R9		/* 10 */
33
	MULSCC	R8, R9, R9		/* 11 */
34
	MULSCC	R8, R9, R9		/* 12 */
35
	MULSCC	R8, R9, R9		/* 13 */
36
	MULSCC	R8, R9, R9		/* 14 */
37
	MULSCC	R8, R9, R9		/* 15 */
38
	MULSCC	R8, R9, R9		/* 16 */
39
	MULSCC	R8, R9, R9		/* 17 */
40
	MULSCC	R8, R9, R9		/* 18 */
41
	MULSCC	R8, R9, R9		/* 19 */
42
	MULSCC	R8, R9, R9		/* 20 */
43
	MULSCC	R8, R9, R9		/* 21 */
44
	MULSCC	R8, R9, R9		/* 22 */
45
	MULSCC	R8, R9, R9		/* 23 */
46
	MULSCC	R8, R9, R9		/* 24 */
47
	MULSCC	R8, R9, R9		/* 25 */
48
	MULSCC	R8, R9, R9		/* 26 */
49
	MULSCC	R8, R9, R9		/* 27 */
50
	MULSCC	R8, R9, R9		/* 28 */
51
	MULSCC	R8, R9, R9		/* 29 */
52
	MULSCC	R8, R9, R9		/* 30 */
53
	MULSCC	R8, R9, R9		/* 31 */
54
	MULSCC	R0, R9, R9		/* 32; shift only; r9 is high part */
55
 
56
	/*
57
	 * need to correct top word if top bit set
58
	 */
59
	CMP	R8, R0
60
	BGE	mul_tstlow
61
	ADD	R13, R9			/* adjust the high parts */
62
 
63
mul_tstlow:
64
	MOVW	Y, R13			/* get low part */
65
	BA	mul_done
66
 
67
mul_shortway:
68
	ANDCC	R0, R0, R9		/* zero partial product and clear N and V cond's */
69
	MULSCC	R8, R9, R9		/*  0 */
70
	MULSCC	R8, R9, R9		/*  1 */
71
	MULSCC	R8, R9, R9		/*  2 */
72
	MULSCC	R8, R9, R9		/*  3 */
73
	MULSCC	R8, R9, R9		/*  4 */
74
	MULSCC	R8, R9, R9		/*  5 */
75
	MULSCC	R8, R9, R9		/*  6 */
76
	MULSCC	R8, R9, R9		/*  7 */
77
	MULSCC	R8, R9, R9		/*  8 */
78
	MULSCC	R8, R9, R9		/*  9 */
79
	MULSCC	R8, R9, R9		/* 10 */
80
	MULSCC	R8, R9, R9		/* 11 */
81
	MULSCC	R0, R9, R9		/* 12; shift only; r9 is high part */
82
 
83
	MOVW	Y, R8			/* make low part of partial low part & high part */
84
	SLL	$12, R9, R13
85
	SRL	$20, R8
86
	OR	R8, R13
87
 
88
	SRA	$20, R9			/* high part */
89
 
90
mul_done:
91
 
92
	/*
93
	 * mul by high halves if needed
94
	 */
95
	MOVW	R13, 4(R7)
96
	MOVW	u2+12(FP), R11
97
	CMP	R11, R0
98
	BE	nomul1
99
	MUL	R11, R12
100
	ADD	R12, R9
101
 
102
nomul1:
103
	MOVW	u1+4(FP), R11
104
	CMP	R11, R0
105
	BE	nomul2
106
	MUL	R11, R16
107
	ADD	R16, R9
108
 
109
nomul2:
110
 
111
	MOVW	R9, 0(R7)
112
	RETURN