~ubuntu-branches/ubuntu/jaunty/gnupg2/jaunty

« back to all changes in this revision

Viewing changes to mpi/hppa/udiv-qrnnd.S

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Urlichs
  • Date: 2006-01-24 04:31:42 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060124043142-pbg192or6qxv3yk2
Tags: 1.9.20-1
* New Upstream version. Closes:#306890,#344530
  * Closes:#320490: gpg-protect-tool fails to decrypt PKCS-12 files 
* Depend on libopensc2-dev, not -1-. Closes:#348106

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* HP-PA  __udiv_qrnnd division support, used from longlong.h.
 
2
 *        This version runs fast on pre-PA7000 CPUs.
 
3
 *
 
4
 *      Copyright (C) 1993, 1994, 1998, 2001 Free Software Foundation, Inc.
 
5
 *
 
6
 * This file is part of GnuPG.
 
7
 *
 
8
 * GnuPG is free software; you can redistribute it and/or modify
 
9
 * it under the terms of the GNU General Public License as published by
 
10
 * the Free Software Foundation; either version 2 of the License, or
 
11
 * (at your option) any later version.
 
12
 *
 
13
 * GnuPG is distributed in the hope that it will be useful,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
 * GNU General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU General Public License
 
19
 * along with this program; if not, write to the Free Software
 
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
21
 *
 
22
 * Note: This code is heavily based on the GNU MP Library.
 
23
 *       Actually it's the same code with only minor changes in the
 
24
 *       way the data is stored; this is to support the abstraction
 
25
 *       of an optional secure memory allocation which may be used
 
26
 *       to avoid revealing of sensitive data due to paging etc.
 
27
 *       The GNU MP Library itself is published under the LGPL;
 
28
 *       however I decided to publish this code under the plain GPL.
 
29
 */
 
30
 
 
31
 
 
32
 
 
33
/* INPUT PARAMETERS
 
34
 *   rem_ptr       gr26
 
35
 *   n1            gr25
 
36
 *   n0            gr24
 
37
 *   d             gr23
 
38
 *
 
39
 *   The code size is a bit excessive.  We could merge the last two ds;addc
 
40
 *   sequences by simply moving the "bb,< Odd" instruction down.  The only
 
41
 *   trouble is the FFFFFFFF code that would need some hacking.
 
42
 */
 
43
 
 
44
        .code
 
45
        .export         __udiv_qrnnd
 
46
        .label          __udiv_qrnnd
 
47
        .proc
 
48
        .callinfo       frame=0,no_calls
 
49
        .entry
 
50
 
 
51
        comb,<          %r23,0,L$largedivisor
 
52
         sub            %r0,%r23,%r1            ; clear cy as side-effect
 
53
        ds              %r0,%r1,%r0
 
54
        addc            %r24,%r24,%r24
 
55
        ds              %r25,%r23,%r25
 
56
        addc            %r24,%r24,%r24
 
57
        ds              %r25,%r23,%r25
 
58
        addc            %r24,%r24,%r24
 
59
        ds              %r25,%r23,%r25
 
60
        addc            %r24,%r24,%r24
 
61
        ds              %r25,%r23,%r25
 
62
        addc            %r24,%r24,%r24
 
63
        ds              %r25,%r23,%r25
 
64
        addc            %r24,%r24,%r24
 
65
        ds              %r25,%r23,%r25
 
66
        addc            %r24,%r24,%r24
 
67
        ds              %r25,%r23,%r25
 
68
        addc            %r24,%r24,%r24
 
69
        ds              %r25,%r23,%r25
 
70
        addc            %r24,%r24,%r24
 
71
        ds              %r25,%r23,%r25
 
72
        addc            %r24,%r24,%r24
 
73
        ds              %r25,%r23,%r25
 
74
        addc            %r24,%r24,%r24
 
75
        ds              %r25,%r23,%r25
 
76
        addc            %r24,%r24,%r24
 
77
        ds              %r25,%r23,%r25
 
78
        addc            %r24,%r24,%r24
 
79
        ds              %r25,%r23,%r25
 
80
        addc            %r24,%r24,%r24
 
81
        ds              %r25,%r23,%r25
 
82
        addc            %r24,%r24,%r24
 
83
        ds              %r25,%r23,%r25
 
84
        addc            %r24,%r24,%r24
 
85
        ds              %r25,%r23,%r25
 
86
        addc            %r24,%r24,%r24
 
87
        ds              %r25,%r23,%r25
 
88
        addc            %r24,%r24,%r24
 
89
        ds              %r25,%r23,%r25
 
90
        addc            %r24,%r24,%r24
 
91
        ds              %r25,%r23,%r25
 
92
        addc            %r24,%r24,%r24
 
93
        ds              %r25,%r23,%r25
 
94
        addc            %r24,%r24,%r24
 
95
        ds              %r25,%r23,%r25
 
96
        addc            %r24,%r24,%r24
 
97
        ds              %r25,%r23,%r25
 
98
        addc            %r24,%r24,%r24
 
99
        ds              %r25,%r23,%r25
 
100
        addc            %r24,%r24,%r24
 
101
        ds              %r25,%r23,%r25
 
102
        addc            %r24,%r24,%r24
 
103
        ds              %r25,%r23,%r25
 
104
        addc            %r24,%r24,%r24
 
105
        ds              %r25,%r23,%r25
 
106
        addc            %r24,%r24,%r24
 
107
        ds              %r25,%r23,%r25
 
108
        addc            %r24,%r24,%r24
 
109
        ds              %r25,%r23,%r25
 
110
        addc            %r24,%r24,%r24
 
111
        ds              %r25,%r23,%r25
 
112
        addc            %r24,%r24,%r24
 
113
        ds              %r25,%r23,%r25
 
114
        addc            %r24,%r24,%r24
 
115
        ds              %r25,%r23,%r25
 
116
        addc            %r24,%r24,%r28
 
117
        ds              %r25,%r23,%r25
 
118
        comclr,>=       %r25,%r0,%r0
 
119
        addl            %r25,%r23,%r25
 
120
        stws            %r25,0(0,%r26)
 
121
        bv              0(%r2)
 
122
         addc           %r28,%r28,%r28
 
123
 
 
124
        .label  L$largedivisor
 
125
        extru           %r24,31,1,%r19          ; r19 = n0 & 1
 
126
        bb,<            %r23,31,L$odd
 
127
         extru          %r23,30,31,%r22         ; r22 = d >> 1
 
128
        shd             %r25,%r24,1,%r24        ; r24 = new n0
 
129
        extru           %r25,30,31,%r25         ; r25 = new n1
 
130
        sub             %r0,%r22,%r21
 
131
        ds              %r0,%r21,%r0
 
132
        addc            %r24,%r24,%r24
 
133
        ds              %r25,%r22,%r25
 
134
        addc            %r24,%r24,%r24
 
135
        ds              %r25,%r22,%r25
 
136
        addc            %r24,%r24,%r24
 
137
        ds              %r25,%r22,%r25
 
138
        addc            %r24,%r24,%r24
 
139
        ds              %r25,%r22,%r25
 
140
        addc            %r24,%r24,%r24
 
141
        ds              %r25,%r22,%r25
 
142
        addc            %r24,%r24,%r24
 
143
        ds              %r25,%r22,%r25
 
144
        addc            %r24,%r24,%r24
 
145
        ds              %r25,%r22,%r25
 
146
        addc            %r24,%r24,%r24
 
147
        ds              %r25,%r22,%r25
 
148
        addc            %r24,%r24,%r24
 
149
        ds              %r25,%r22,%r25
 
150
        addc            %r24,%r24,%r24
 
151
        ds              %r25,%r22,%r25
 
152
        addc            %r24,%r24,%r24
 
153
        ds              %r25,%r22,%r25
 
154
        addc            %r24,%r24,%r24
 
155
        ds              %r25,%r22,%r25
 
156
        addc            %r24,%r24,%r24
 
157
        ds              %r25,%r22,%r25
 
158
        addc            %r24,%r24,%r24
 
159
        ds              %r25,%r22,%r25
 
160
        addc            %r24,%r24,%r24
 
161
        ds              %r25,%r22,%r25
 
162
        addc            %r24,%r24,%r24
 
163
        ds              %r25,%r22,%r25
 
164
        addc            %r24,%r24,%r24
 
165
        ds              %r25,%r22,%r25
 
166
        addc            %r24,%r24,%r24
 
167
        ds              %r25,%r22,%r25
 
168
        addc            %r24,%r24,%r24
 
169
        ds              %r25,%r22,%r25
 
170
        addc            %r24,%r24,%r24
 
171
        ds              %r25,%r22,%r25
 
172
        addc            %r24,%r24,%r24
 
173
        ds              %r25,%r22,%r25
 
174
        addc            %r24,%r24,%r24
 
175
        ds              %r25,%r22,%r25
 
176
        addc            %r24,%r24,%r24
 
177
        ds              %r25,%r22,%r25
 
178
        addc            %r24,%r24,%r24
 
179
        ds              %r25,%r22,%r25
 
180
        addc            %r24,%r24,%r24
 
181
        ds              %r25,%r22,%r25
 
182
        addc            %r24,%r24,%r24
 
183
        ds              %r25,%r22,%r25
 
184
        addc            %r24,%r24,%r24
 
185
        ds              %r25,%r22,%r25
 
186
        addc            %r24,%r24,%r24
 
187
        ds              %r25,%r22,%r25
 
188
        addc            %r24,%r24,%r24
 
189
        ds              %r25,%r22,%r25
 
190
        addc            %r24,%r24,%r24
 
191
        ds              %r25,%r22,%r25
 
192
        addc            %r24,%r24,%r24
 
193
        ds              %r25,%r22,%r25
 
194
        addc            %r24,%r24,%r24
 
195
        ds              %r25,%r22,%r25
 
196
        comclr,>=       %r25,%r0,%r0
 
197
        addl            %r25,%r22,%r25
 
198
        sh1addl         %r25,%r19,%r25
 
199
        stws            %r25,0(0,%r26)
 
200
        bv              0(%r2)
 
201
         addc           %r24,%r24,%r28
 
202
 
 
203
        .label  L$odd
 
204
        addib,sv,n      1,%r22,L$FF..           ; r22 = (d / 2 + 1)
 
205
        shd             %r25,%r24,1,%r24        ; r24 = new n0
 
206
        extru           %r25,30,31,%r25         ; r25 = new n1
 
207
        sub             %r0,%r22,%r21
 
208
        ds              %r0,%r21,%r0
 
209
        addc            %r24,%r24,%r24
 
210
        ds              %r25,%r22,%r25
 
211
        addc            %r24,%r24,%r24
 
212
        ds              %r25,%r22,%r25
 
213
        addc            %r24,%r24,%r24
 
214
        ds              %r25,%r22,%r25
 
215
        addc            %r24,%r24,%r24
 
216
        ds              %r25,%r22,%r25
 
217
        addc            %r24,%r24,%r24
 
218
        ds              %r25,%r22,%r25
 
219
        addc            %r24,%r24,%r24
 
220
        ds              %r25,%r22,%r25
 
221
        addc            %r24,%r24,%r24
 
222
        ds              %r25,%r22,%r25
 
223
        addc            %r24,%r24,%r24
 
224
        ds              %r25,%r22,%r25
 
225
        addc            %r24,%r24,%r24
 
226
        ds              %r25,%r22,%r25
 
227
        addc            %r24,%r24,%r24
 
228
        ds              %r25,%r22,%r25
 
229
        addc            %r24,%r24,%r24
 
230
        ds              %r25,%r22,%r25
 
231
        addc            %r24,%r24,%r24
 
232
        ds              %r25,%r22,%r25
 
233
        addc            %r24,%r24,%r24
 
234
        ds              %r25,%r22,%r25
 
235
        addc            %r24,%r24,%r24
 
236
        ds              %r25,%r22,%r25
 
237
        addc            %r24,%r24,%r24
 
238
        ds              %r25,%r22,%r25
 
239
        addc            %r24,%r24,%r24
 
240
        ds              %r25,%r22,%r25
 
241
        addc            %r24,%r24,%r24
 
242
        ds              %r25,%r22,%r25
 
243
        addc            %r24,%r24,%r24
 
244
        ds              %r25,%r22,%r25
 
245
        addc            %r24,%r24,%r24
 
246
        ds              %r25,%r22,%r25
 
247
        addc            %r24,%r24,%r24
 
248
        ds              %r25,%r22,%r25
 
249
        addc            %r24,%r24,%r24
 
250
        ds              %r25,%r22,%r25
 
251
        addc            %r24,%r24,%r24
 
252
        ds              %r25,%r22,%r25
 
253
        addc            %r24,%r24,%r24
 
254
        ds              %r25,%r22,%r25
 
255
        addc            %r24,%r24,%r24
 
256
        ds              %r25,%r22,%r25
 
257
        addc            %r24,%r24,%r24
 
258
        ds              %r25,%r22,%r25
 
259
        addc            %r24,%r24,%r24
 
260
        ds              %r25,%r22,%r25
 
261
        addc            %r24,%r24,%r24
 
262
        ds              %r25,%r22,%r25
 
263
        addc            %r24,%r24,%r24
 
264
        ds              %r25,%r22,%r25
 
265
        addc            %r24,%r24,%r24
 
266
        ds              %r25,%r22,%r25
 
267
        addc            %r24,%r24,%r24
 
268
        ds              %r25,%r22,%r25
 
269
        addc            %r24,%r24,%r24
 
270
        ds              %r25,%r22,%r25
 
271
        addc            %r24,%r24,%r24
 
272
        ds              %r25,%r22,%r25
 
273
        addc            %r24,%r24,%r28
 
274
        comclr,>=       %r25,%r0,%r0
 
275
        addl            %r25,%r22,%r25
 
276
        sh1addl         %r25,%r19,%r25
 
277
; We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
 
278
        add,nuv         %r28,%r25,%r25
 
279
        addl            %r25,%r1,%r25
 
280
        addc            %r0,%r28,%r28
 
281
        sub,<<          %r25,%r23,%r0
 
282
        addl            %r25,%r1,%r25
 
283
        stws            %r25,0(0,%r26)
 
284
        bv              0(%r2)
 
285
         addc           %r0,%r28,%r28
 
286
 
 
287
; This is just a special case of the code above.
 
288
; We come here when d == 0xFFFFFFFF
 
289
        .label  L$FF..
 
290
        add,uv          %r25,%r24,%r24
 
291
        sub,<<          %r24,%r23,%r0
 
292
        ldo             1(%r24),%r24
 
293
        stws            %r24,0(0,%r26)
 
294
        bv              0(%r2)
 
295
         addc           %r0,%r25,%r28
 
296
 
 
297
        .exit
 
298
        .procend