~ubuntu-branches/ubuntu/vivid/gcl/vivid

« back to all changes in this revision

Viewing changes to gmp/mpn/sparc32/v9/addmul_1.asm

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2002-03-04 14:29:59 UTC
  • Revision ID: james.westby@ubuntu.com-20020304142959-dey14w08kr7lldu3
Tags: upstream-2.5.0.cvs20020219
ImportĀ upstreamĀ versionĀ 2.5.0.cvs20020219

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
dnl  SPARC v9 32-bit mpn_addmul_1 -- Multiply a limb vector with a limb and
 
2
dnl  add the result to a second limb vector.
 
3
 
 
4
dnl  Copyright (C) 1998, 2000 Free Software Foundation, Inc.
 
5
 
 
6
dnl  This file is part of the GNU MP Library.
 
7
 
 
8
dnl  The GNU MP Library is free software; you can redistribute it and/or modify
 
9
dnl  it under the terms of the GNU Lesser General Public License as published
 
10
dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
 
11
dnl  your option) any later version.
 
12
 
 
13
dnl  The GNU MP Library is distributed in the hope that it will be useful, but
 
14
dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 
15
dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 
16
dnl  License for more details.
 
17
 
 
18
dnl  You should have received a copy of the GNU Lesser General Public License
 
19
dnl  along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
 
20
dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
21
dnl  MA 02111-1307, USA.
 
22
 
 
23
 
 
24
include(`../config.m4')
 
25
 
 
26
C INPUT PARAMETERS
 
27
C res_ptr       i0
 
28
C s1_ptr        i1
 
29
C size          i2
 
30
C s2_limb       i3
 
31
 
 
32
ASM_START()
 
33
 
 
34
        TEXT
 
35
        ALIGN(4)
 
36
L(noll):
 
37
        .word   0
 
38
 
 
39
PROLOGUE(mpn_addmul_1)
 
40
        save %sp,-256,%sp
 
41
 
 
42
ifdef(`PIC',
 
43
`L(pc): rd      %pc,%o7
 
44
        ld      [%o7+L(noll)-L(pc)],%f10',
 
45
`       sethi   %hi(L(noll)),%g1
 
46
        ld      [%g1+%lo(L(noll))],%f10')
 
47
 
 
48
        sethi   %hi(0xffff0000),%o0
 
49
        andn    %i3,%o0,%o0
 
50
        st      %o0,[%fp-16]
 
51
        ld      [%fp-16],%f11
 
52
        fxtod   %f10,%f6
 
53
 
 
54
        srl     %i3,16,%o0
 
55
        st      %o0,[%fp-16]
 
56
        ld      [%fp-16],%f11
 
57
        fxtod   %f10,%f8
 
58
 
 
59
        mov     0,%g3                   C cy = 0
 
60
 
 
61
        ld      [%i1],%f11
 
62
        subcc   %i2,1,%i2
 
63
        be,pn   %icc,L(end1)
 
64
        add     %i1,4,%i1               C s1_ptr++
 
65
 
 
66
        fxtod   %f10,%f2
 
67
        ld      [%i1],%f11
 
68
        add     %i1,4,%i1               C s1_ptr++
 
69
        fmuld   %f2,%f8,%f16
 
70
        fmuld   %f2,%f6,%f4
 
71
        fdtox   %f16,%f14
 
72
        std     %f14,[%fp-24]
 
73
        fdtox   %f4,%f12
 
74
        subcc   %i2,1,%i2
 
75
        be,pn   %icc,L(end2)
 
76
        std     %f12,[%fp-16]
 
77
 
 
78
        fxtod   %f10,%f2
 
79
        ld      [%i1],%f11
 
80
        add     %i1,4,%i1               C s1_ptr++
 
81
        fmuld   %f2,%f8,%f16
 
82
        fmuld   %f2,%f6,%f4
 
83
        fdtox   %f16,%f14
 
84
        std     %f14,[%fp-40]
 
85
        fdtox   %f4,%f12
 
86
        subcc   %i2,1,%i2
 
87
        be,pn   %icc,L(end3)
 
88
        std     %f12,[%fp-32]
 
89
 
 
90
        fxtod   %f10,%f2
 
91
        ld      [%i1],%f11
 
92
        add     %i1,4,%i1               C s1_ptr++
 
93
        ld      [%i0],%g5
 
94
        ldx     [%fp-24],%g2            C p16
 
95
        fmuld   %f2,%f8,%f16
 
96
        ldx     [%fp-16],%g1            C p0
 
97
        fmuld   %f2,%f6,%f4
 
98
        sllx    %g2,16,%g2              C align p16
 
99
        fdtox   %f16,%f14
 
100
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
101
        std     %f14,[%fp-24]
 
102
        fdtox   %f4,%f12
 
103
        add     %i0,4,%i0               C res_ptr++
 
104
        subcc   %i2,1,%i2
 
105
        be,pn   %icc,L(end4)
 
106
        std     %f12,[%fp-16]
 
107
 
 
108
        b,a     L(loopm)
 
109
 
 
110
        .align 16
 
111
C BEGIN LOOP
 
112
L(loop):
 
113
        fxtod   %f10,%f2
 
114
        ld      [%i1],%f11
 
115
        add     %i1,4,%i1               C s1_ptr++
 
116
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
117
        add     %g3,%g1,%g4             C p += cy
 
118
        ld      [%i0],%g5
 
119
        srlx    %g4,32,%g3
 
120
        ldx     [%fp-24],%g2            C p16
 
121
        fmuld   %f2,%f8,%f16
 
122
        ldx     [%fp-16],%g1            C p0
 
123
        fmuld   %f2,%f6,%f4
 
124
        sllx    %g2,16,%g2              C align p16
 
125
        st      %g4,[%i0-4]
 
126
        fdtox   %f16,%f14
 
127
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
128
        std     %f14,[%fp-24]
 
129
        fdtox   %f4,%f12
 
130
        std     %f12,[%fp-16]
 
131
        subcc   %i2,1,%i2
 
132
        be,pn   %icc,L(loope)
 
133
        add     %i0,4,%i0               C res_ptr++
 
134
L(loopm):
 
135
        fxtod   %f10,%f2
 
136
        ld      [%i1],%f11
 
137
        add     %i1,4,%i1               C s1_ptr++
 
138
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
139
        add     %g3,%g1,%g4             C p += cy
 
140
        ld      [%i0],%g5
 
141
        srlx    %g4,32,%g3
 
142
        ldx     [%fp-40],%g2            C p16
 
143
        fmuld   %f2,%f8,%f16
 
144
        ldx     [%fp-32],%g1            C p0
 
145
        fmuld   %f2,%f6,%f4
 
146
        sllx    %g2,16,%g2              C align p16
 
147
        st      %g4,[%i0-4]
 
148
        fdtox   %f16,%f14
 
149
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
150
        std     %f14,[%fp-40]
 
151
        fdtox   %f4,%f12
 
152
        std     %f12,[%fp-32]
 
153
        subcc   %i2,1,%i2
 
154
        bne,pt  %icc,L(loop)
 
155
        add     %i0,4,%i0               C res_ptr++
 
156
C END LOOP
 
157
 
 
158
        fxtod   %f10,%f2
 
159
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
160
        add     %g3,%g1,%g4             C p += cy
 
161
        ld      [%i0],%g5
 
162
        srlx    %g4,32,%g3
 
163
        ldx     [%fp-24],%g2            C p16
 
164
        fmuld   %f2,%f8,%f16
 
165
        ldx     [%fp-16],%g1            C p0
 
166
        fmuld   %f2,%f6,%f4
 
167
        sllx    %g2,16,%g2              C align p16
 
168
        st      %g4,[%i0-4]
 
169
        b,a     L(xxx)
 
170
L(loope):
 
171
L(end4):
 
172
        fxtod   %f10,%f2
 
173
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
174
        add     %g3,%g1,%g4             C p += cy
 
175
        ld      [%i0],%g5
 
176
        srlx    %g4,32,%g3
 
177
        ldx     [%fp-40],%g2            C p16
 
178
        fmuld   %f2,%f8,%f16
 
179
        ldx     [%fp-32],%g1            C p0
 
180
        fmuld   %f2,%f6,%f4
 
181
        sllx    %g2,16,%g2              C align p16
 
182
        st      %g4,[%i0-4]
 
183
        fdtox   %f16,%f14
 
184
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
185
        std     %f14,[%fp-40]
 
186
        fdtox   %f4,%f12
 
187
        std     %f12,[%fp-32]
 
188
        add     %i0,4,%i0               C res_ptr++
 
189
 
 
190
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
191
        add     %g3,%g1,%g4             C p += cy
 
192
        ld      [%i0],%g5
 
193
        srlx    %g4,32,%g3
 
194
        ldx     [%fp-24],%g2            C p16
 
195
        ldx     [%fp-16],%g1            C p0
 
196
        sllx    %g2,16,%g2              C align p16
 
197
        st      %g4,[%i0-4]
 
198
        b,a     L(yyy)
 
199
 
 
200
L(end3):
 
201
        fxtod   %f10,%f2
 
202
        ld      [%i0],%g5
 
203
        ldx     [%fp-24],%g2            C p16
 
204
        fmuld   %f2,%f8,%f16
 
205
        ldx     [%fp-16],%g1            C p0
 
206
        fmuld   %f2,%f6,%f4
 
207
        sllx    %g2,16,%g2              C align p16
 
208
L(xxx): fdtox   %f16,%f14
 
209
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
210
        std     %f14,[%fp-24]
 
211
        fdtox   %f4,%f12
 
212
        std     %f12,[%fp-16]
 
213
        add     %i0,4,%i0               C res_ptr++
 
214
 
 
215
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
216
        add     %g3,%g1,%g4             C p += cy
 
217
        ld      [%i0],%g5
 
218
        srlx    %g4,32,%g3
 
219
        ldx     [%fp-40],%g2            C p16
 
220
        ldx     [%fp-32],%g1            C p0
 
221
        sllx    %g2,16,%g2              C align p16
 
222
        st      %g4,[%i0-4]
 
223
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
224
        add     %i0,4,%i0               C res_ptr++
 
225
 
 
226
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
227
        add     %g3,%g1,%g4             C p += cy
 
228
        ld      [%i0],%g5
 
229
        srlx    %g4,32,%g3
 
230
        ldx     [%fp-24],%g2            C p16
 
231
        ldx     [%fp-16],%g1            C p0
 
232
        sllx    %g2,16,%g2              C align p16
 
233
        st      %g4,[%i0-4]
 
234
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
235
        add     %i0,4,%i0               C res_ptr++
 
236
        b,a     L(ret)
 
237
 
 
238
L(end2):
 
239
        fxtod   %f10,%f2
 
240
        fmuld   %f2,%f8,%f16
 
241
        fmuld   %f2,%f6,%f4
 
242
        fdtox   %f16,%f14
 
243
        std     %f14,[%fp-40]
 
244
        fdtox   %f4,%f12
 
245
        std     %f12,[%fp-32]
 
246
        ld      [%i0],%g5
 
247
        ldx     [%fp-24],%g2            C p16
 
248
        ldx     [%fp-16],%g1            C p0
 
249
        sllx    %g2,16,%g2              C align p16
 
250
L(yyy): add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
251
        add     %i0,4,%i0               C res_ptr++
 
252
 
 
253
        add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
254
        add     %g3,%g1,%g4             C p += cy
 
255
        ld      [%i0],%g5
 
256
        srlx    %g4,32,%g3
 
257
        ldx     [%fp-40],%g2            C p16
 
258
        ldx     [%fp-32],%g1            C p0
 
259
        sllx    %g2,16,%g2              C align p16
 
260
        st      %g4,[%i0-4]
 
261
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
262
        add     %i0,4,%i0               C res_ptr++
 
263
        b,a     L(ret)
 
264
 
 
265
L(end1):
 
266
        fxtod   %f10,%f2
 
267
        fmuld   %f2,%f8,%f16
 
268
        fmuld   %f2,%f6,%f4
 
269
        fdtox   %f16,%f14
 
270
        std     %f14,[%fp-24]
 
271
        fdtox   %f4,%f12
 
272
        std     %f12,[%fp-16]
 
273
 
 
274
        ld      [%i0],%g5
 
275
        ldx     [%fp-24],%g2            C p16
 
276
        ldx     [%fp-16],%g1            C p0
 
277
        sllx    %g2,16,%g2              C align p16
 
278
        add     %g2,%g1,%g1             C add p16 to p0 (ADD1)
 
279
        add     %i0,4,%i0               C res_ptr++
 
280
 
 
281
L(ret): add     %g5,%g1,%g1             C add *res_ptr to p0 (ADD2)
 
282
        add     %g3,%g1,%g4             C p += cy
 
283
        srlx    %g4,32,%g3
 
284
        st      %g4,[%i0-4]
 
285
 
 
286
        ret
 
287
        restore %g0,%g3,%o0             C sideeffect: put cy in retreg
 
288
EPILOGUE(mpn_addmul_1)