]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/bn/asm/alpha.s
Import of old SSLeay release: SSLeay 0.8.1b
[thirdparty/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