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/libmp/mips/mpvecadd.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
#define	BDNZ	BC	16,0,
2
#define	BDNE	BC	0,2,
3
 
4
/*
5
 *	mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum)
6
 *
7
 *		sum[0:alen] = a[0:alen-1] + b[0:blen-1]
8
 *
9
 *	prereq: alen >= blen, sum has room for alen+1 digits
10
 *
11
 *		R1 == a	(first arg passed in R1)
12
 *		R3 == carry
13
 *		R4 == alen
14
 *		R5 == b
15
 *		R6 == blen
16
 *		R7 == sum
17
 *		R2 == temporary
18
 *		R8 == temporary
19
 *		R9 == temporary
20
 */
21
TEXT	mpvecadd(SB),$-4
22
 
23
	MOVW	alen+4(FP), R4
24
	MOVW	b+8(FP), R5
25
	MOVW	blen+12(FP), R6
26
	MOVW	sum+16(FP), R7
27
	SUBU	R6, R4		/* calculate counter for second loop (alen > blen) */
28
	MOVW	R0, R3
29
 
30
	/* if blen == 0, don't need to add it in */
31
	BEQ	R6,_add1
32
 
33
	/* sum[0:blen-1],carry = a[0:blen-1] + b[0:blen-1] */
34
_addloop1:
35
	MOVW	0(R1), R8
36
	ADDU	$4, R1
37
	MOVW	0(R5), R9
38
	ADDU	$4, R5
39
	ADDU	R3, R8
40
	SGTU	R3, R8, R3
41
	ADDU	R8, R9
42
	SGTU	R8, R9, R2
43
	ADDU	R2, R3
44
	MOVW	R9, 0(R7)
45
	ADDU	$4, R7
46
	SUBU	$1, R6
47
	BNE	R6, _addloop1
48
 
49
_add1:
50
	/* if alen == blen, we're done */
51
	BEQ	R4, _addend
52
 
53
	/* sum[blen:alen-1],carry = a[blen:alen-1] + 0 + carry */
54
_addloop2:
55
	MOVW	0(R1), R8
56
	ADDU	$4, R1
57
	ADDU	R3, R8
58
	SGTU	R3, R8, R3
59
	MOVW	R8, 0(R7)
60
	ADDU	$4, R7
61
	SUBU	$1, R4
62
	BNE	R4, _addloop2
63
 
64
	/* sum[alen] = carry */
65
_addend:
66
	MOVW	R3, 0(R7)
67
	RET