1; 29000 __gmpn_addmul_1 -- Multiply a limb vector with a single limb and
2; add the product to a second limb vector.
3
4; Copyright 1992, 1994, 2000 Free Software Foundation, Inc.
5
6; This file is part of the GNU MP Library.
7
8; The GNU MP Library is free software; you can redistribute it and/or modify
9; it under the terms of the GNU Lesser General Public License as published by
10; the Free Software Foundation; either version 3 of the License, or (at your
11; option) any later version.
12
13; The GNU MP Library is distributed in the hope that it will be useful, but
14; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
16; License for more details.
17
18; You should have received a copy of the GNU Lesser General Public License
19; along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
20
21
22; INPUT PARAMETERS
23; res_ptr	lr2
24; s1_ptr	lr3
25; size		lr4
26; s2_limb	lr5
27
28	.cputype 29050
29	.sect .lit,lit
30	.text
31	.align	4
32	.global	___gmpn_addmul_1
33	.word	0x60000
34___gmpn_addmul_1:
35	sub	lr4,lr4,8
36	jmpt	lr4,Ltail
37	 const	gr120,0			; init cylimb reg
38
39	srl	gr117,lr4,3		; divide by 8
40	sub	gr117,gr117,1		; count for jmpfdec
41
42Loop:	mtsrim	cr,(8-1)
43	loadm	0,0,gr96,lr3
44	add	lr3,lr3,32
45
46	multiplu gr104,gr96,lr5
47	multmu	 gr96,gr96,lr5
48	multiplu gr105,gr97,lr5
49	multmu	 gr97,gr97,lr5
50	multiplu gr106,gr98,lr5
51	multmu	 gr98,gr98,lr5
52	multiplu gr107,gr99,lr5
53	multmu	 gr99,gr99,lr5
54	multiplu gr108,gr100,lr5
55	multmu	 gr100,gr100,lr5
56	multiplu gr109,gr101,lr5
57	multmu	 gr101,gr101,lr5
58	multiplu gr110,gr102,lr5
59	multmu	 gr102,gr102,lr5
60	multiplu gr111,gr103,lr5
61	multmu	 gr103,gr103,lr5
62
63	add	gr104,gr104,gr120
64	addc	gr105,gr105,gr96
65	addc	gr106,gr106,gr97
66	addc	gr107,gr107,gr98
67	addc	gr108,gr108,gr99
68	addc	gr109,gr109,gr100
69	addc	gr110,gr110,gr101
70	addc	gr111,gr111,gr102
71	addc	gr120,gr103,0
72
73	mtsrim	cr,(8-1)
74	loadm	0,0,gr96,lr2
75
76	add	gr104,gr96,gr104
77	addc	gr105,gr97,gr105
78	addc	gr106,gr98,gr106
79	addc	gr107,gr99,gr107
80	addc	gr108,gr100,gr108
81	addc	gr109,gr101,gr109
82	addc	gr110,gr102,gr110
83	addc	gr111,gr103,gr111
84	addc	gr120,gr120,0
85
86	mtsrim	cr,(8-1)
87	storem	0,0,gr104,lr2
88	jmpfdec	gr117,Loop
89	 add	lr2,lr2,32
90
91Ltail:	and	lr4,lr4,(8-1)
92	sub	gr118,lr4,1		; count for CR
93	jmpt	gr118,Lend
94	 sub	lr4,lr4,2
95	sub	lr2,lr2,4		; offset res_ptr by one limb
96
97Loop2:	load	0,0,gr116,lr3
98	add	lr3,lr3,4
99	multiplu gr117,gr116,lr5
100	multmu	gr118,gr116,lr5
101	add	lr2,lr2,4
102	load	0,0,gr119,lr2
103	add	gr117,gr117,gr120
104	addc	gr118,gr118,0
105	add	gr117,gr117,gr119
106	store	0,0,gr117,lr2
107	jmpfdec	lr4,Loop2
108	 addc	gr120,gr118,0
109
110Lend:	jmpi	lr0
111	 or	gr96,gr120,0		; copy
112