Import of old SSLeay release: SSLeay 0.8.1b
[oweals/openssl.git] / crypto / bn / asm / alpha.s
1  # DEC Alpha assember
2  # The bn_div64 is actually gcc output but the other parts are hand done.
3  # Thanks to tzeruch@ceddec.com for sending me the gcc output for
4  # bn_div64.
5         .file   1 "bn_mulw.c"
6         .version        "01.01"
7         .set noat
8 gcc2_compiled.:
9 __gnu_compiled_c:
10         .text
11         .align 3
12         .globl bn_mul_add_word
13         .ent bn_mul_add_word
14 bn_mul_add_word:
15 bn_mul_add_word..ng:
16         .frame $30,0,$26,0
17         .prologue 0
18         subq $18,2,$25  # num=-2
19         bis $31,$31,$0
20         blt $25,$42
21         .align 5
22 $142:
23         subq $18,2,$18  # num-=2
24         subq $25,2,$25  # num-=2
25
26         ldq $1,0($17)   # a[0]
27         ldq $2,8($17)   # a[1]
28
29         mulq $19,$1,$3  # a[0]*w low part       r3
30         umulh $19,$1,$1 # a[0]*w high part      r1
31         mulq $19,$2,$4  # a[1]*w low part       r4
32         umulh $19,$2,$2 # a[1]*w high part      r2
33
34         ldq $22,0($16)  # r[0]                  r22
35         ldq $23,8($16)  # r[1]                  r23
36
37         addq $3,$22,$3  # a0 low part + r[0]    
38         addq $4,$23,$4  # a1 low part + r[1]    
39         cmpult $3,$22,$5 # overflow?
40         cmpult $4,$23,$6 # overflow?
41         addq $5,$1,$1   # high part + overflow 
42         addq $6,$2,$2   # high part + overflow 
43
44         addq $3,$0,$3   # add c
45         cmpult $3,$0,$5 # overflow?
46         stq $3,0($16)
47         addq $5,$1,$0   # c=high part + overflow 
48
49         addq $4,$0,$4   # add c
50         cmpult $4,$0,$5 # overflow?
51         stq $4,8($16)
52         addq $5,$2,$0   # c=high part + overflow 
53
54         ble $18,$43
55
56         addq $16,16,$16
57         addq $17,16,$17
58         blt $25,$42
59
60         br $31,$142
61 $42:
62         ldq $1,0($17)   # a[0]
63         umulh $19,$1,$3 # a[0]*w high part
64         mulq $19,$1,$1  # a[0]*w low part
65         ldq $2,0($16)   # r[0]
66         addq $1,$2,$1   # low part + r[0]
67         cmpult $1,$2,$4 # overflow?
68         addq $4,$3,$3   # high part + overflow 
69         addq $1,$0,$1   # add c
70         cmpult $1,$0,$4 # overflow?
71         addq $4,$3,$0   # c=high part + overflow 
72         stq $1,0($16)
73
74         .align 4
75 $43:
76         ret $31,($26),1
77         .end bn_mul_add_word
78         .align 3
79         .globl bn_mul_word
80         .ent bn_mul_word
81 bn_mul_word:
82 bn_mul_word..ng:
83         .frame $30,0,$26,0
84         .prologue 0
85         subq $18,2,$25  # num=-2
86         bis $31,$31,$0
87         blt $25,$242
88         .align 5
89 $342:
90         subq $18,2,$18  # num-=2
91         subq $25,2,$25  # num-=2
92
93         ldq $1,0($17)   # a[0]
94         ldq $2,8($17)   # a[1]
95
96         mulq $19,$1,$3  # a[0]*w low part       r3
97         umulh $19,$1,$1 # a[0]*w high part      r1
98         mulq $19,$2,$4  # a[1]*w low part       r4
99         umulh $19,$2,$2 # a[1]*w high part      r2
100
101         addq $3,$0,$3   # add c
102         cmpult $3,$0,$5 # overflow?
103         stq $3,0($16)
104         addq $5,$1,$0   # c=high part + overflow 
105
106         addq $4,$0,$4   # add c
107         cmpult $4,$0,$5 # overflow?
108         stq $4,8($16)
109         addq $5,$2,$0   # c=high part + overflow 
110
111         ble $18,$243
112
113         addq $16,16,$16
114         addq $17,16,$17
115         blt $25,$242
116
117         br $31,$342
118 $242:
119         ldq $1,0($17)   # a[0]
120         umulh $19,$1,$3 # a[0]*w high part
121         mulq $19,$1,$1  # a[0]*w low part
122         addq $1,$0,$1   # add c
123         cmpult $1,$0,$4 # overflow?
124         addq $4,$3,$0   # c=high part + overflow 
125         stq $1,0($16)
126 $243:
127         ret $31,($26),1
128         .end bn_mul_word
129         .align 3
130         .globl bn_sqr_words
131         .ent bn_sqr_words
132 bn_sqr_words:
133 bn_sqr_words..ng:
134         .frame $30,0,$26,0
135         .prologue 0
136         
137         subq $18,2,$25  # num=-2
138         blt $25,$442
139         .align 5
140 $542:
141         subq $18,2,$18  # num-=2
142         subq $25,2,$25  # num-=2
143
144         ldq $1,0($17)   # a[0]
145         ldq $4,8($17)   # a[1]
146
147         mulq $1,$1,$2   # a[0]*w low part       r2
148         umulh $1,$1,$3 # a[0]*w high part       r3
149         mulq $4,$4,$5   # a[1]*w low part       r5
150         umulh $4,$4,$6 # a[1]*w high part       r6
151
152         stq $2,0($16)   # r[0]
153         stq $3,8($16)   # r[1]
154         stq $5,16($16)  # r[3]
155         stq $6,24($16)  # r[4]
156
157         ble $18,$443
158
159         addq $16,32,$16
160         addq $17,16,$17
161         blt $25,$442
162         br $31,$542
163
164 $442:
165         ldq $1,0($17)   # a[0]
166         mulq $1,$1,$2   # a[0]*w low part       r2
167         umulh $1,$1,$3  # a[0]*w high part       r3
168         stq $2,0($16)   # r[0]
169         stq $3,8($16)   # r[1]
170
171         .align 4
172 $443:
173         ret $31,($26),1
174         .end bn_sqr_words
175
176  #
177  # What follows was taken directly from the C compiler with a few
178  # hacks to redo the lables.
179  #
180 .text
181         .align 3
182         .globl bn_div64
183         .ent bn_div64
184 bn_div64:
185         ldgp $29,0($27)
186 bn_div64..ng:
187         lda $30,-48($30)
188         .frame $30,48,$26,0
189         stq $26,0($30)
190         stq $9,8($30)
191         stq $10,16($30)
192         stq $11,24($30)
193         stq $12,32($30)
194         stq $13,40($30)
195         .mask 0x4003e00,-48
196         .prologue 1
197         bis $16,$16,$9
198         bis $17,$17,$10
199         bis $18,$18,$11
200         bis $31,$31,$13
201         bis $31,2,$12
202         bne $11,$119
203         lda $0,-1
204         br $31,$136
205         .align 4
206 $119:
207         bis $11,$11,$16
208         jsr $26,BN_num_bits_word
209         ldgp $29,0($26)
210         subq $0,64,$1
211         beq $1,$120
212         bis $31,1,$1
213         sll $1,$0,$1
214         cmpule $9,$1,$1
215         bne $1,$120
216  #      lda $16,_IO_stderr_
217  #      lda $17,$C32
218  #      bis $0,$0,$18
219  #      jsr $26,fprintf
220  #      ldgp $29,0($26)
221         jsr $26,abort
222         ldgp $29,0($26)
223         .align 4
224 $120:
225         bis $31,64,$3
226         cmpult $9,$11,$2
227         subq $3,$0,$1
228         addl $1,$31,$0
229         subq $9,$11,$1
230         cmoveq $2,$1,$9
231         beq $0,$122
232         zapnot $0,15,$2
233         subq $3,$0,$1
234         sll $11,$2,$11
235         sll $9,$2,$3
236         srl $10,$1,$1
237         sll $10,$2,$10
238         bis $3,$1,$9
239 $122:
240         srl $11,32,$5
241         zapnot $11,15,$6
242         lda $7,-1
243         .align 5
244 $123:
245         srl $9,32,$1
246         subq $1,$5,$1
247         bne $1,$126
248         zapnot $7,15,$27
249         br $31,$127
250         .align 4
251 $126:
252         bis $9,$9,$24
253         bis $5,$5,$25
254         divqu $24,$25,$27
255 $127:
256         srl $10,32,$4
257         .align 5
258 $128:
259         mulq $27,$5,$1
260         subq $9,$1,$3
261         zapnot $3,240,$1
262         bne $1,$129
263         mulq $6,$27,$2
264         sll $3,32,$1
265         addq $1,$4,$1
266         cmpule $2,$1,$2
267         bne $2,$129
268         subq $27,1,$27
269         br $31,$128
270         .align 4
271 $129:
272         mulq $27,$6,$1
273         mulq $27,$5,$4
274         srl $1,32,$3
275         sll $1,32,$1
276         addq $4,$3,$4
277         cmpult $10,$1,$2
278         subq $10,$1,$10
279         addq $2,$4,$2
280         cmpult $9,$2,$1
281         bis $2,$2,$4
282         beq $1,$134
283         addq $9,$11,$9
284         subq $27,1,$27
285 $134:
286         subl $12,1,$12
287         subq $9,$4,$9
288         beq $12,$124
289         sll $27,32,$13
290         sll $9,32,$2
291         srl $10,32,$1
292         sll $10,32,$10
293         bis $2,$1,$9
294         br $31,$123
295         .align 4
296 $124:
297         bis $13,$27,$0
298 $136:
299         ldq $26,0($30)
300         ldq $9,8($30)
301         ldq $10,16($30)
302         ldq $11,24($30)
303         ldq $12,32($30)
304         ldq $13,40($30)
305         addq $30,48,$30
306         ret $31,($26),1
307         .end bn_div64
308         .ident  "GCC: (GNU) 2.7.2.1"
309
310