]>
Commit | Line | Data |
---|---|---|
bd3576d2 UM |
1 | .ident "md5-sparcv9.S, Version 1.0" |
2 | .ident "SPARC V9 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" | |
3 | .file "md5-sparcv9.S" | |
4 | ||
5 | /* | |
6 | * ==================================================================== | |
7 | * Copyright (c) 1999 Andy Polyakov <appro@fy.chalmers.se>. | |
8 | * | |
9 | * Rights for redistribution and usage in source and binary forms are | |
10 | * granted as long as above copyright notices are retained. Warranty | |
11 | * of any kind is (of course:-) disclaimed. | |
12 | * ==================================================================== | |
13 | */ | |
14 | ||
15 | /* | |
16 | * This is my modest contribution to OpenSSL project (see | |
17 | * http://www.openssl.org/ for more information about it) and is an | |
18 | * assembler implementation of MD5 block hash function. I've hand-coded | |
19 | * this for the sole reason to reach UltraSPARC-specific "load in | |
20 | * little-endian byte order" instruction. This gives up to 15% | |
21 | * performance improvement for cases when input message is aligned at | |
22 | * 32 bits boundary. The module was tested under both 32 *and* 64 bit | |
23 | * kernels. For updates see http://fy.chalmers.se/~appro/hpe/. | |
24 | * | |
25 | * To compile with SC4.x/SC5.x: | |
26 | * | |
a5e4c0bb | 27 | * cc -xarch=v[9|8plus] -DOPENSSL_SYSNAME_ULTRASPARC -DMD5_BLOCK_DATA_ORDER \ |
bd3576d2 UM |
28 | * -c md5-sparcv9.S |
29 | * | |
30 | * and with gcc: | |
31 | * | |
a5e4c0bb | 32 | * gcc -mcpu=ultrasparc -DOPENSSL_SYSNAME_ULTRASPARC -DMD5_BLOCK_DATA_ORDER \ |
bd3576d2 UM |
33 | * -c md5-sparcv9.S |
34 | * | |
35 | * or if above fails (it does if you have gas): | |
36 | * | |
c4d47155 | 37 | * gcc -E -DOPENSSL_SYSNAMEULTRASPARC -DMD5_BLOCK_DATA_ORDER md5_block.sparc.S | \ |
bd3576d2 UM |
38 | * as -xarch=v8plus /dev/fd/0 -o md5-sparcv9.o |
39 | */ | |
40 | ||
c4d47155 RL |
41 | #include <openssl/e_os2.h> |
42 | ||
bd3576d2 UM |
43 | #define A %o0 |
44 | #define B %o1 | |
45 | #define C %o2 | |
46 | #define D %o3 | |
47 | #define T1 %o4 | |
48 | #define T2 %o5 | |
49 | ||
50 | #define R0 %l0 | |
51 | #define R1 %l1 | |
52 | #define R2 %l2 | |
53 | #define R3 %l3 | |
54 | #define R4 %l4 | |
55 | #define R5 %l5 | |
56 | #define R6 %l6 | |
57 | #define R7 %l7 | |
58 | #define R8 %i3 | |
59 | #define R9 %i4 | |
60 | #define R10 %i5 | |
61 | #define R11 %g1 | |
62 | #define R12 %g2 | |
63 | #define R13 %g3 | |
64 | #define RX %g4 | |
65 | ||
66 | #define Aptr %i0+0 | |
67 | #define Bptr %i0+4 | |
68 | #define Cptr %i0+8 | |
69 | #define Dptr %i0+12 | |
70 | ||
71 | #define Aval R5 /* those not used at the end of the last round */ | |
72 | #define Bval R6 | |
73 | #define Cval R7 | |
74 | #define Dval R8 | |
75 | ||
76 | #if defined(MD5_BLOCK_DATA_ORDER) | |
a5e4c0bb | 77 | # if defined(OPENSSL_SYSNAME_ULTRASPARC) |
bd3576d2 UM |
78 | # define LOAD lda |
79 | # define X(i) [%i1+i*4]%asi | |
80 | # define md5_block md5_block_asm_data_order_aligned | |
81 | # define ASI_PRIMARY_LITTLE 0x88 | |
82 | # else | |
83 | # error "MD5_BLOCK_DATA_ORDER is supported only on UltraSPARC!" | |
84 | # endif | |
85 | #else | |
86 | # define LOAD ld | |
87 | # define X(i) [%i1+i*4] | |
88 | # define md5_block md5_block_asm_host_order | |
89 | #endif | |
90 | ||
91 | .section ".text",#alloc,#execinstr | |
ccb8a026 | 92 | |
bd3576d2 UM |
93 | #if defined(__SUNPRO_C) && defined(__sparcv9) |
94 | /* They've said -xarch=v9 at command line */ | |
95 | .register %g2,#scratch | |
96 | .register %g3,#scratch | |
97 | # define FRAME -192 | |
ccb8a026 AP |
98 | #elif defined(__GNUC__) && defined(__arch64__) |
99 | /* They've said -m64 at command line */ | |
100 | .register %g2,#scratch | |
101 | .register %g3,#scratch | |
102 | # define FRAME -192 | |
bd3576d2 UM |
103 | #else |
104 | # define FRAME -96 | |
105 | #endif | |
106 | ||
107 | .align 32 | |
108 | ||
109 | .global md5_block | |
110 | md5_block: | |
111 | save %sp,FRAME,%sp | |
112 | ||
113 | ld [Dptr],D | |
bd3576d2 | 114 | ld [Cptr],C |
bd3576d2 | 115 | ld [Bptr],B |
bd3576d2 | 116 | ld [Aptr],A |
ccb8a026 AP |
117 | #ifdef ASI_PRIMARY_LITTLE |
118 | rd %asi,%o7 ! How dare I? Well, I just do:-) | |
119 | wr %g0,ASI_PRIMARY_LITTLE,%asi | |
120 | #endif | |
bd3576d2 | 121 | LOAD X(0),R0 |
bd3576d2 | 122 | |
bd3576d2 UM |
123 | .Lmd5_block_loop: |
124 | ||
125 | !!!!!!!!Round 0 | |
126 | ||
127 | xor C,D,T1 | |
128 | sethi %hi(0xd76aa478),T2 | |
129 | and T1,B,T1 | |
130 | or T2,%lo(0xd76aa478),T2 != | |
131 | xor T1,D,T1 | |
132 | add T1,R0,T1 | |
133 | LOAD X(1),R1 | |
134 | add T1,T2,T1 != | |
135 | add A,T1,A | |
136 | sll A,7,T2 | |
137 | srl A,32-7,A | |
138 | or A,T2,A != | |
139 | xor B,C,T1 | |
140 | add A,B,A | |
141 | ||
142 | sethi %hi(0xe8c7b756),T2 | |
143 | and T1,A,T1 != | |
144 | or T2,%lo(0xe8c7b756),T2 | |
145 | xor T1,C,T1 | |
146 | LOAD X(2),R2 | |
147 | add T1,R1,T1 != | |
148 | add T1,T2,T1 | |
149 | add D,T1,D | |
150 | sll D,12,T2 | |
151 | srl D,32-12,D != | |
152 | or D,T2,D | |
153 | xor A,B,T1 | |
154 | add D,A,D | |
155 | ||
156 | sethi %hi(0x242070db),T2 != | |
157 | and T1,D,T1 | |
158 | or T2,%lo(0x242070db),T2 | |
159 | xor T1,B,T1 | |
160 | add T1,R2,T1 != | |
161 | LOAD X(3),R3 | |
162 | add T1,T2,T1 | |
163 | add C,T1,C | |
164 | sll C,17,T2 != | |
165 | srl C,32-17,C | |
166 | or C,T2,C | |
167 | xor D,A,T1 | |
168 | add C,D,C != | |
169 | ||
170 | sethi %hi(0xc1bdceee),T2 | |
171 | and T1,C,T1 | |
172 | or T2,%lo(0xc1bdceee),T2 | |
173 | xor T1,A,T1 != | |
174 | add T1,R3,T1 | |
175 | LOAD X(4),R4 | |
176 | add T1,T2,T1 | |
177 | add B,T1,B != | |
178 | sll B,22,T2 | |
179 | srl B,32-22,B | |
180 | or B,T2,B | |
181 | xor C,D,T1 != | |
182 | add B,C,B | |
183 | ||
184 | sethi %hi(0xf57c0faf),T2 | |
185 | and T1,B,T1 | |
186 | or T2,%lo(0xf57c0faf),T2 != | |
187 | xor T1,D,T1 | |
188 | add T1,R4,T1 | |
189 | LOAD X(5),R5 | |
190 | add T1,T2,T1 != | |
191 | add A,T1,A | |
192 | sll A,7,T2 | |
193 | srl A,32-7,A | |
194 | or A,T2,A != | |
195 | xor B,C,T1 | |
196 | add A,B,A | |
197 | ||
198 | sethi %hi(0x4787c62a),T2 | |
199 | and T1,A,T1 != | |
200 | or T2,%lo(0x4787c62a),T2 | |
201 | xor T1,C,T1 | |
202 | LOAD X(6),R6 | |
203 | add T1,R5,T1 != | |
204 | add T1,T2,T1 | |
205 | add D,T1,D | |
206 | sll D,12,T2 | |
207 | srl D,32-12,D != | |
208 | or D,T2,D | |
209 | xor A,B,T1 | |
210 | add D,A,D | |
211 | ||
212 | sethi %hi(0xa8304613),T2 != | |
213 | and T1,D,T1 | |
214 | or T2,%lo(0xa8304613),T2 | |
215 | xor T1,B,T1 | |
216 | add T1,R6,T1 != | |
217 | LOAD X(7),R7 | |
218 | add T1,T2,T1 | |
219 | add C,T1,C | |
220 | sll C,17,T2 != | |
221 | srl C,32-17,C | |
222 | or C,T2,C | |
223 | xor D,A,T1 | |
224 | add C,D,C != | |
225 | ||
226 | sethi %hi(0xfd469501),T2 | |
227 | and T1,C,T1 | |
228 | or T2,%lo(0xfd469501),T2 | |
229 | xor T1,A,T1 != | |
230 | add T1,R7,T1 | |
231 | LOAD X(8),R8 | |
232 | add T1,T2,T1 | |
233 | add B,T1,B != | |
234 | sll B,22,T2 | |
235 | srl B,32-22,B | |
236 | or B,T2,B | |
237 | xor C,D,T1 != | |
238 | add B,C,B | |
239 | ||
240 | sethi %hi(0x698098d8),T2 | |
241 | and T1,B,T1 | |
242 | or T2,%lo(0x698098d8),T2 != | |
243 | xor T1,D,T1 | |
244 | add T1,R8,T1 | |
245 | LOAD X(9),R9 | |
246 | add T1,T2,T1 != | |
247 | add A,T1,A | |
248 | sll A,7,T2 | |
249 | srl A,32-7,A | |
250 | or A,T2,A != | |
251 | xor B,C,T1 | |
252 | add A,B,A | |
253 | ||
254 | sethi %hi(0x8b44f7af),T2 | |
255 | and T1,A,T1 != | |
256 | or T2,%lo(0x8b44f7af),T2 | |
257 | xor T1,C,T1 | |
258 | LOAD X(10),R10 | |
259 | add T1,R9,T1 != | |
260 | add T1,T2,T1 | |
261 | add D,T1,D | |
262 | sll D,12,T2 | |
263 | srl D,32-12,D != | |
264 | or D,T2,D | |
265 | xor A,B,T1 | |
266 | add D,A,D | |
267 | ||
268 | sethi %hi(0xffff5bb1),T2 != | |
269 | and T1,D,T1 | |
270 | or T2,%lo(0xffff5bb1),T2 | |
271 | xor T1,B,T1 | |
272 | add T1,R10,T1 != | |
273 | LOAD X(11),R11 | |
274 | add T1,T2,T1 | |
275 | add C,T1,C | |
276 | sll C,17,T2 != | |
277 | srl C,32-17,C | |
278 | or C,T2,C | |
279 | xor D,A,T1 | |
280 | add C,D,C != | |
281 | ||
282 | sethi %hi(0x895cd7be),T2 | |
283 | and T1,C,T1 | |
284 | or T2,%lo(0x895cd7be),T2 | |
285 | xor T1,A,T1 != | |
286 | add T1,R11,T1 | |
287 | LOAD X(12),R12 | |
288 | add T1,T2,T1 | |
289 | add B,T1,B != | |
290 | sll B,22,T2 | |
291 | srl B,32-22,B | |
292 | or B,T2,B | |
293 | xor C,D,T1 != | |
294 | add B,C,B | |
295 | ||
296 | sethi %hi(0x6b901122),T2 | |
297 | and T1,B,T1 | |
298 | or T2,%lo(0x6b901122),T2 != | |
299 | xor T1,D,T1 | |
300 | add T1,R12,T1 | |
301 | LOAD X(13),R13 | |
302 | add T1,T2,T1 != | |
303 | add A,T1,A | |
304 | sll A,7,T2 | |
305 | srl A,32-7,A | |
306 | or A,T2,A != | |
307 | xor B,C,T1 | |
308 | add A,B,A | |
309 | ||
310 | sethi %hi(0xfd987193),T2 | |
311 | and T1,A,T1 != | |
312 | or T2,%lo(0xfd987193),T2 | |
313 | xor T1,C,T1 | |
314 | LOAD X(14),RX | |
315 | add T1,R13,T1 != | |
316 | add T1,T2,T1 | |
317 | add D,T1,D | |
318 | sll D,12,T2 | |
319 | srl D,32-12,D != | |
320 | or D,T2,D | |
321 | xor A,B,T1 | |
322 | add D,A,D | |
323 | ||
324 | sethi %hi(0xa679438e),T2 != | |
325 | and T1,D,T1 | |
326 | or T2,%lo(0xa679438e),T2 | |
327 | xor T1,B,T1 | |
328 | add T1,RX,T1 != | |
329 | LOAD X(15),RX | |
330 | add T1,T2,T1 | |
331 | add C,T1,C | |
332 | sll C,17,T2 != | |
333 | srl C,32-17,C | |
334 | or C,T2,C | |
335 | xor D,A,T1 | |
336 | add C,D,C != | |
337 | ||
338 | sethi %hi(0x49b40821),T2 | |
339 | and T1,C,T1 | |
340 | or T2,%lo(0x49b40821),T2 | |
341 | xor T1,A,T1 != | |
342 | add T1,RX,T1 | |
343 | !pre-LOADed X(1),R1 | |
344 | add T1,T2,T1 | |
345 | add B,T1,B | |
346 | sll B,22,T2 != | |
347 | srl B,32-22,B | |
348 | or B,T2,B | |
349 | add B,C,B | |
350 | ||
351 | !!!!!!!!Round 1 | |
352 | ||
353 | xor B,C,T1 != | |
354 | sethi %hi(0xf61e2562),T2 | |
355 | and T1,D,T1 | |
356 | or T2,%lo(0xf61e2562),T2 | |
357 | xor T1,C,T1 != | |
358 | add T1,R1,T1 | |
359 | !pre-LOADed X(6),R6 | |
360 | add T1,T2,T1 | |
361 | add A,T1,A | |
362 | sll A,5,T2 != | |
363 | srl A,32-5,A | |
364 | or A,T2,A | |
365 | add A,B,A | |
366 | ||
367 | xor A,B,T1 != | |
368 | sethi %hi(0xc040b340),T2 | |
369 | and T1,C,T1 | |
370 | or T2,%lo(0xc040b340),T2 | |
371 | xor T1,B,T1 != | |
372 | add T1,R6,T1 | |
373 | !pre-LOADed X(11),R11 | |
374 | add T1,T2,T1 | |
375 | add D,T1,D | |
376 | sll D,9,T2 != | |
377 | srl D,32-9,D | |
378 | or D,T2,D | |
379 | add D,A,D | |
380 | ||
381 | xor D,A,T1 != | |
382 | sethi %hi(0x265e5a51),T2 | |
383 | and T1,B,T1 | |
384 | or T2,%lo(0x265e5a51),T2 | |
385 | xor T1,A,T1 != | |
386 | add T1,R11,T1 | |
387 | !pre-LOADed X(0),R0 | |
388 | add T1,T2,T1 | |
389 | add C,T1,C | |
390 | sll C,14,T2 != | |
391 | srl C,32-14,C | |
392 | or C,T2,C | |
393 | add C,D,C | |
394 | ||
395 | xor C,D,T1 != | |
396 | sethi %hi(0xe9b6c7aa),T2 | |
397 | and T1,A,T1 | |
398 | or T2,%lo(0xe9b6c7aa),T2 | |
399 | xor T1,D,T1 != | |
400 | add T1,R0,T1 | |
401 | !pre-LOADed X(5),R5 | |
402 | add T1,T2,T1 | |
403 | add B,T1,B | |
404 | sll B,20,T2 != | |
405 | srl B,32-20,B | |
406 | or B,T2,B | |
407 | add B,C,B | |
408 | ||
409 | xor B,C,T1 != | |
410 | sethi %hi(0xd62f105d),T2 | |
411 | and T1,D,T1 | |
412 | or T2,%lo(0xd62f105d),T2 | |
413 | xor T1,C,T1 != | |
414 | add T1,R5,T1 | |
415 | !pre-LOADed X(10),R10 | |
416 | add T1,T2,T1 | |
417 | add A,T1,A | |
418 | sll A,5,T2 != | |
419 | srl A,32-5,A | |
420 | or A,T2,A | |
421 | add A,B,A | |
422 | ||
423 | xor A,B,T1 != | |
424 | sethi %hi(0x02441453),T2 | |
425 | and T1,C,T1 | |
426 | or T2,%lo(0x02441453),T2 | |
427 | xor T1,B,T1 != | |
428 | add T1,R10,T1 | |
429 | LOAD X(15),RX | |
430 | add T1,T2,T1 | |
431 | add D,T1,D != | |
432 | sll D,9,T2 | |
433 | srl D,32-9,D | |
434 | or D,T2,D | |
435 | add D,A,D != | |
436 | ||
437 | xor D,A,T1 | |
438 | sethi %hi(0xd8a1e681),T2 | |
439 | and T1,B,T1 | |
440 | or T2,%lo(0xd8a1e681),T2 != | |
441 | xor T1,A,T1 | |
442 | add T1,RX,T1 | |
443 | !pre-LOADed X(4),R4 | |
444 | add T1,T2,T1 | |
445 | add C,T1,C != | |
446 | sll C,14,T2 | |
447 | srl C,32-14,C | |
448 | or C,T2,C | |
449 | add C,D,C != | |
450 | ||
451 | xor C,D,T1 | |
452 | sethi %hi(0xe7d3fbc8),T2 | |
453 | and T1,A,T1 | |
454 | or T2,%lo(0xe7d3fbc8),T2 != | |
455 | xor T1,D,T1 | |
456 | add T1,R4,T1 | |
457 | !pre-LOADed X(9),R9 | |
458 | add T1,T2,T1 | |
459 | add B,T1,B != | |
460 | sll B,20,T2 | |
461 | srl B,32-20,B | |
462 | or B,T2,B | |
463 | add B,C,B != | |
464 | ||
465 | xor B,C,T1 | |
466 | sethi %hi(0x21e1cde6),T2 | |
467 | and T1,D,T1 | |
468 | or T2,%lo(0x21e1cde6),T2 != | |
469 | xor T1,C,T1 | |
470 | add T1,R9,T1 | |
471 | LOAD X(14),RX | |
472 | add T1,T2,T1 != | |
473 | add A,T1,A | |
474 | sll A,5,T2 | |
475 | srl A,32-5,A | |
476 | or A,T2,A != | |
477 | add A,B,A | |
478 | ||
479 | xor A,B,T1 | |
480 | sethi %hi(0xc33707d6),T2 | |
481 | and T1,C,T1 != | |
482 | or T2,%lo(0xc33707d6),T2 | |
483 | xor T1,B,T1 | |
484 | add T1,RX,T1 | |
485 | !pre-LOADed X(3),R3 | |
486 | add T1,T2,T1 != | |
487 | add D,T1,D | |
488 | sll D,9,T2 | |
489 | srl D,32-9,D | |
490 | or D,T2,D != | |
491 | add D,A,D | |
492 | ||
493 | xor D,A,T1 | |
494 | sethi %hi(0xf4d50d87),T2 | |
495 | and T1,B,T1 != | |
496 | or T2,%lo(0xf4d50d87),T2 | |
497 | xor T1,A,T1 | |
498 | add T1,R3,T1 | |
499 | !pre-LOADed X(8),R8 | |
500 | add T1,T2,T1 != | |
501 | add C,T1,C | |
502 | sll C,14,T2 | |
503 | srl C,32-14,C | |
504 | or C,T2,C != | |
505 | add C,D,C | |
506 | ||
507 | xor C,D,T1 | |
508 | sethi %hi(0x455a14ed),T2 | |
509 | and T1,A,T1 != | |
510 | or T2,%lo(0x455a14ed),T2 | |
511 | xor T1,D,T1 | |
512 | add T1,R8,T1 | |
513 | !pre-LOADed X(13),R13 | |
514 | add T1,T2,T1 != | |
515 | add B,T1,B | |
516 | sll B,20,T2 | |
517 | srl B,32-20,B | |
518 | or B,T2,B != | |
519 | add B,C,B | |
520 | ||
521 | xor B,C,T1 | |
522 | sethi %hi(0xa9e3e905),T2 | |
523 | and T1,D,T1 != | |
524 | or T2,%lo(0xa9e3e905),T2 | |
525 | xor T1,C,T1 | |
526 | add T1,R13,T1 | |
527 | !pre-LOADed X(2),R2 | |
528 | add T1,T2,T1 != | |
529 | add A,T1,A | |
530 | sll A,5,T2 | |
531 | srl A,32-5,A | |
532 | or A,T2,A != | |
533 | add A,B,A | |
534 | ||
535 | xor A,B,T1 | |
536 | sethi %hi(0xfcefa3f8),T2 | |
537 | and T1,C,T1 != | |
538 | or T2,%lo(0xfcefa3f8),T2 | |
539 | xor T1,B,T1 | |
540 | add T1,R2,T1 | |
541 | !pre-LOADed X(7),R7 | |
542 | add T1,T2,T1 != | |
543 | add D,T1,D | |
544 | sll D,9,T2 | |
545 | srl D,32-9,D | |
546 | or D,T2,D != | |
547 | add D,A,D | |
548 | ||
549 | xor D,A,T1 | |
550 | sethi %hi(0x676f02d9),T2 | |
551 | and T1,B,T1 != | |
552 | or T2,%lo(0x676f02d9),T2 | |
553 | xor T1,A,T1 | |
554 | add T1,R7,T1 | |
555 | !pre-LOADed X(12),R12 | |
556 | add T1,T2,T1 != | |
557 | add C,T1,C | |
558 | sll C,14,T2 | |
559 | srl C,32-14,C | |
560 | or C,T2,C != | |
561 | add C,D,C | |
562 | ||
563 | xor C,D,T1 | |
564 | sethi %hi(0x8d2a4c8a),T2 | |
565 | and T1,A,T1 != | |
566 | or T2,%lo(0x8d2a4c8a),T2 | |
567 | xor T1,D,T1 | |
568 | add T1,R12,T1 | |
569 | !pre-LOADed X(5),R5 | |
570 | add T1,T2,T1 != | |
571 | add B,T1,B | |
572 | sll B,20,T2 | |
573 | srl B,32-20,B | |
574 | or B,T2,B != | |
575 | add B,C,B | |
576 | ||
577 | !!!!!!!!Round 2 | |
578 | ||
579 | xor B,C,T1 | |
580 | sethi %hi(0xfffa3942),T2 | |
581 | xor T1,D,T1 != | |
582 | or T2,%lo(0xfffa3942),T2 | |
583 | add T1,R5,T1 | |
584 | !pre-LOADed X(8),R8 | |
585 | add T1,T2,T1 | |
586 | add A,T1,A != | |
587 | sll A,4,T2 | |
588 | srl A,32-4,A | |
589 | or A,T2,A | |
590 | add A,B,A != | |
591 | ||
592 | xor A,B,T1 | |
593 | sethi %hi(0x8771f681),T2 | |
594 | xor T1,C,T1 | |
595 | or T2,%lo(0x8771f681),T2 != | |
596 | add T1,R8,T1 | |
597 | !pre-LOADed X(11),R11 | |
598 | add T1,T2,T1 | |
599 | add D,T1,D | |
600 | sll D,11,T2 != | |
601 | srl D,32-11,D | |
602 | or D,T2,D | |
603 | add D,A,D | |
604 | ||
605 | xor D,A,T1 != | |
606 | sethi %hi(0x6d9d6122),T2 | |
607 | xor T1,B,T1 | |
608 | or T2,%lo(0x6d9d6122),T2 | |
609 | add T1,R11,T1 != | |
610 | LOAD X(14),RX | |
611 | add T1,T2,T1 | |
612 | add C,T1,C | |
613 | sll C,16,T2 != | |
614 | srl C,32-16,C | |
615 | or C,T2,C | |
616 | add C,D,C | |
617 | ||
618 | xor C,D,T1 != | |
619 | sethi %hi(0xfde5380c),T2 | |
620 | xor T1,A,T1 | |
621 | or T2,%lo(0xfde5380c),T2 | |
622 | add T1,RX,T1 != | |
623 | !pre-LOADed X(1),R1 | |
624 | add T1,T2,T1 | |
625 | add B,T1,B | |
626 | sll B,23,T2 | |
627 | srl B,32-23,B != | |
628 | or B,T2,B | |
629 | add B,C,B | |
630 | ||
631 | xor B,C,T1 | |
632 | sethi %hi(0xa4beea44),T2 != | |
633 | xor T1,D,T1 | |
634 | or T2,%lo(0xa4beea44),T2 | |
635 | add T1,R1,T1 | |
636 | !pre-LOADed X(4),R4 | |
637 | add T1,T2,T1 != | |
638 | add A,T1,A | |
639 | sll A,4,T2 | |
640 | srl A,32-4,A | |
641 | or A,T2,A != | |
642 | add A,B,A | |
643 | ||
644 | xor A,B,T1 | |
645 | sethi %hi(0x4bdecfa9),T2 | |
646 | xor T1,C,T1 != | |
647 | or T2,%lo(0x4bdecfa9),T2 | |
648 | add T1,R4,T1 | |
649 | !pre-LOADed X(7),R7 | |
650 | add T1,T2,T1 | |
651 | add D,T1,D != | |
652 | sll D,11,T2 | |
653 | srl D,32-11,D | |
654 | or D,T2,D | |
655 | add D,A,D != | |
656 | ||
657 | xor D,A,T1 | |
658 | sethi %hi(0xf6bb4b60),T2 | |
659 | xor T1,B,T1 | |
660 | or T2,%lo(0xf6bb4b60),T2 != | |
661 | add T1,R7,T1 | |
662 | !pre-LOADed X(10),R10 | |
663 | add T1,T2,T1 | |
664 | add C,T1,C | |
665 | sll C,16,T2 != | |
666 | srl C,32-16,C | |
667 | or C,T2,C | |
668 | add C,D,C | |
669 | ||
670 | xor C,D,T1 != | |
671 | sethi %hi(0xbebfbc70),T2 | |
672 | xor T1,A,T1 | |
673 | or T2,%lo(0xbebfbc70),T2 | |
674 | add T1,R10,T1 != | |
675 | !pre-LOADed X(13),R13 | |
676 | add T1,T2,T1 | |
677 | add B,T1,B | |
678 | sll B,23,T2 | |
679 | srl B,32-23,B != | |
680 | or B,T2,B | |
681 | add B,C,B | |
682 | ||
683 | xor B,C,T1 | |
684 | sethi %hi(0x289b7ec6),T2 != | |
685 | xor T1,D,T1 | |
686 | or T2,%lo(0x289b7ec6),T2 | |
687 | add T1,R13,T1 | |
688 | !pre-LOADed X(0),R0 | |
689 | add T1,T2,T1 != | |
690 | add A,T1,A | |
691 | sll A,4,T2 | |
692 | srl A,32-4,A | |
693 | or A,T2,A != | |
694 | add A,B,A | |
695 | ||
696 | xor A,B,T1 | |
697 | sethi %hi(0xeaa127fa),T2 | |
698 | xor T1,C,T1 != | |
699 | or T2,%lo(0xeaa127fa),T2 | |
700 | add T1,R0,T1 | |
701 | !pre-LOADed X(3),R3 | |
702 | add T1,T2,T1 | |
703 | add D,T1,D != | |
704 | sll D,11,T2 | |
705 | srl D,32-11,D | |
706 | or D,T2,D | |
707 | add D,A,D != | |
708 | ||
709 | xor D,A,T1 | |
710 | sethi %hi(0xd4ef3085),T2 | |
711 | xor T1,B,T1 | |
712 | or T2,%lo(0xd4ef3085),T2 != | |
713 | add T1,R3,T1 | |
714 | !pre-LOADed X(6),R6 | |
715 | add T1,T2,T1 | |
716 | add C,T1,C | |
717 | sll C,16,T2 != | |
718 | srl C,32-16,C | |
719 | or C,T2,C | |
720 | add C,D,C | |
721 | ||
722 | xor C,D,T1 != | |
723 | sethi %hi(0x04881d05),T2 | |
724 | xor T1,A,T1 | |
725 | or T2,%lo(0x04881d05),T2 | |
726 | add T1,R6,T1 != | |
727 | !pre-LOADed X(9),R9 | |
728 | add T1,T2,T1 | |
729 | add B,T1,B | |
730 | sll B,23,T2 | |
731 | srl B,32-23,B != | |
732 | or B,T2,B | |
733 | add B,C,B | |
734 | ||
735 | xor B,C,T1 | |
736 | sethi %hi(0xd9d4d039),T2 != | |
737 | xor T1,D,T1 | |
738 | or T2,%lo(0xd9d4d039),T2 | |
739 | add T1,R9,T1 | |
740 | !pre-LOADed X(12),R12 | |
741 | add T1,T2,T1 != | |
742 | add A,T1,A | |
743 | sll A,4,T2 | |
744 | srl A,32-4,A | |
745 | or A,T2,A != | |
746 | add A,B,A | |
747 | ||
748 | xor A,B,T1 | |
749 | sethi %hi(0xe6db99e5),T2 | |
750 | xor T1,C,T1 != | |
751 | or T2,%lo(0xe6db99e5),T2 | |
752 | add T1,R12,T1 | |
753 | LOAD X(15),RX | |
754 | add T1,T2,T1 != | |
755 | add D,T1,D | |
756 | sll D,11,T2 | |
757 | srl D,32-11,D | |
758 | or D,T2,D != | |
759 | add D,A,D | |
760 | ||
761 | xor D,A,T1 | |
762 | sethi %hi(0x1fa27cf8),T2 | |
763 | xor T1,B,T1 != | |
764 | or T2,%lo(0x1fa27cf8),T2 | |
765 | add T1,RX,T1 | |
766 | !pre-LOADed X(2),R2 | |
767 | add T1,T2,T1 | |
768 | add C,T1,C != | |
769 | sll C,16,T2 | |
770 | srl C,32-16,C | |
771 | or C,T2,C | |
772 | add C,D,C != | |
773 | ||
774 | xor C,D,T1 | |
775 | sethi %hi(0xc4ac5665),T2 | |
776 | xor T1,A,T1 | |
777 | or T2,%lo(0xc4ac5665),T2 != | |
778 | add T1,R2,T1 | |
779 | !pre-LOADed X(0),R0 | |
780 | add T1,T2,T1 | |
781 | add B,T1,B | |
782 | sll B,23,T2 != | |
783 | srl B,32-23,B | |
784 | or B,T2,B | |
785 | add B,C,B | |
786 | ||
787 | !!!!!!!!Round 3 | |
788 | ||
789 | orn B,D,T1 != | |
790 | sethi %hi(0xf4292244),T2 | |
791 | xor T1,C,T1 | |
792 | or T2,%lo(0xf4292244),T2 | |
793 | add T1,R0,T1 != | |
794 | !pre-LOADed X(7),R7 | |
795 | add T1,T2,T1 | |
796 | add A,T1,A | |
797 | sll A,6,T2 | |
798 | srl A,32-6,A != | |
799 | or A,T2,A | |
800 | add A,B,A | |
801 | ||
802 | orn A,C,T1 | |
803 | sethi %hi(0x432aff97),T2 != | |
804 | xor T1,B,T1 | |
805 | or T2,%lo(0x432aff97),T2 | |
806 | LOAD X(14),RX | |
807 | add T1,R7,T1 != | |
808 | add T1,T2,T1 | |
809 | add D,T1,D | |
810 | sll D,10,T2 | |
811 | srl D,32-10,D != | |
812 | or D,T2,D | |
813 | add D,A,D | |
814 | ||
815 | orn D,B,T1 | |
816 | sethi %hi(0xab9423a7),T2 != | |
817 | xor T1,A,T1 | |
818 | or T2,%lo(0xab9423a7),T2 | |
819 | add T1,RX,T1 | |
820 | !pre-LOADed X(5),R5 | |
821 | add T1,T2,T1 != | |
822 | add C,T1,C | |
823 | sll C,15,T2 | |
824 | srl C,32-15,C | |
825 | or C,T2,C != | |
826 | add C,D,C | |
827 | ||
828 | orn C,A,T1 | |
829 | sethi %hi(0xfc93a039),T2 | |
830 | xor T1,D,T1 != | |
831 | or T2,%lo(0xfc93a039),T2 | |
832 | add T1,R5,T1 | |
833 | !pre-LOADed X(12),R12 | |
834 | add T1,T2,T1 | |
835 | add B,T1,B != | |
836 | sll B,21,T2 | |
837 | srl B,32-21,B | |
838 | or B,T2,B | |
839 | add B,C,B != | |
840 | ||
841 | orn B,D,T1 | |
842 | sethi %hi(0x655b59c3),T2 | |
843 | xor T1,C,T1 | |
844 | or T2,%lo(0x655b59c3),T2 != | |
845 | add T1,R12,T1 | |
846 | !pre-LOADed X(3),R3 | |
847 | add T1,T2,T1 | |
848 | add A,T1,A | |
849 | sll A,6,T2 != | |
850 | srl A,32-6,A | |
851 | or A,T2,A | |
852 | add A,B,A | |
853 | ||
854 | orn A,C,T1 != | |
855 | sethi %hi(0x8f0ccc92),T2 | |
856 | xor T1,B,T1 | |
857 | or T2,%lo(0x8f0ccc92),T2 | |
858 | add T1,R3,T1 != | |
859 | !pre-LOADed X(10),R10 | |
860 | add T1,T2,T1 | |
861 | add D,T1,D | |
862 | sll D,10,T2 | |
863 | srl D,32-10,D != | |
864 | or D,T2,D | |
865 | add D,A,D | |
866 | ||
867 | orn D,B,T1 | |
868 | sethi %hi(0xffeff47d),T2 != | |
869 | xor T1,A,T1 | |
870 | or T2,%lo(0xffeff47d),T2 | |
871 | add T1,R10,T1 | |
872 | !pre-LOADed X(1),R1 | |
873 | add T1,T2,T1 != | |
874 | add C,T1,C | |
875 | sll C,15,T2 | |
876 | srl C,32-15,C | |
877 | or C,T2,C != | |
878 | add C,D,C | |
879 | ||
880 | orn C,A,T1 | |
881 | sethi %hi(0x85845dd1),T2 | |
882 | xor T1,D,T1 != | |
883 | or T2,%lo(0x85845dd1),T2 | |
884 | add T1,R1,T1 | |
885 | !pre-LOADed X(8),R8 | |
886 | add T1,T2,T1 | |
887 | add B,T1,B != | |
888 | sll B,21,T2 | |
889 | srl B,32-21,B | |
890 | or B,T2,B | |
891 | add B,C,B != | |
892 | ||
893 | orn B,D,T1 | |
894 | sethi %hi(0x6fa87e4f),T2 | |
895 | xor T1,C,T1 | |
896 | or T2,%lo(0x6fa87e4f),T2 != | |
897 | add T1,R8,T1 | |
898 | LOAD X(15),RX | |
899 | add T1,T2,T1 | |
900 | add A,T1,A != | |
901 | sll A,6,T2 | |
902 | srl A,32-6,A | |
903 | or A,T2,A | |
904 | add A,B,A != | |
905 | ||
906 | orn A,C,T1 | |
907 | sethi %hi(0xfe2ce6e0),T2 | |
908 | xor T1,B,T1 | |
909 | or T2,%lo(0xfe2ce6e0),T2 != | |
910 | add T1,RX,T1 | |
911 | !pre-LOADed X(6),R6 | |
912 | add T1,T2,T1 | |
913 | add D,T1,D | |
914 | sll D,10,T2 != | |
915 | srl D,32-10,D | |
916 | or D,T2,D | |
917 | add D,A,D | |
918 | ||
919 | orn D,B,T1 != | |
920 | sethi %hi(0xa3014314),T2 | |
921 | xor T1,A,T1 | |
922 | or T2,%lo(0xa3014314),T2 | |
923 | add T1,R6,T1 != | |
924 | !pre-LOADed X(13),R13 | |
925 | add T1,T2,T1 | |
926 | add C,T1,C | |
927 | sll C,15,T2 | |
928 | srl C,32-15,C != | |
929 | or C,T2,C | |
930 | add C,D,C | |
931 | ||
932 | orn C,A,T1 | |
933 | sethi %hi(0x4e0811a1),T2 != | |
934 | xor T1,D,T1 | |
935 | or T2,%lo(0x4e0811a1),T2 | |
936 | !pre-LOADed X(4),R4 | |
937 | ld [Aptr],Aval | |
938 | add T1,R13,T1 != | |
939 | add T1,T2,T1 | |
940 | add B,T1,B | |
941 | sll B,21,T2 | |
942 | srl B,32-21,B != | |
943 | or B,T2,B | |
944 | add B,C,B | |
945 | ||
946 | orn B,D,T1 | |
947 | sethi %hi(0xf7537e82),T2 != | |
948 | xor T1,C,T1 | |
949 | or T2,%lo(0xf7537e82),T2 | |
950 | !pre-LOADed X(11),R11 | |
951 | ld [Dptr],Dval | |
952 | add T1,R4,T1 != | |
953 | add T1,T2,T1 | |
954 | add A,T1,A | |
955 | sll A,6,T2 | |
956 | srl A,32-6,A != | |
957 | or A,T2,A | |
958 | add A,B,A | |
959 | ||
960 | orn A,C,T1 | |
961 | sethi %hi(0xbd3af235),T2 != | |
962 | xor T1,B,T1 | |
963 | or T2,%lo(0xbd3af235),T2 | |
964 | !pre-LOADed X(2),R2 | |
965 | ld [Cptr],Cval | |
966 | add T1,R11,T1 != | |
967 | add T1,T2,T1 | |
968 | add D,T1,D | |
969 | sll D,10,T2 | |
970 | srl D,32-10,D != | |
971 | or D,T2,D | |
972 | add D,A,D | |
973 | ||
974 | orn D,B,T1 | |
975 | sethi %hi(0x2ad7d2bb),T2 != | |
976 | xor T1,A,T1 | |
977 | or T2,%lo(0x2ad7d2bb),T2 | |
978 | !pre-LOADed X(9),R9 | |
979 | ld [Bptr],Bval | |
980 | add T1,R2,T1 != | |
981 | add Aval,A,Aval | |
982 | add T1,T2,T1 | |
983 | st Aval,[Aptr] | |
984 | add C,T1,C != | |
985 | sll C,15,T2 | |
986 | add Dval,D,Dval | |
987 | srl C,32-15,C | |
988 | or C,T2,C != | |
989 | st Dval,[Dptr] | |
990 | add C,D,C | |
991 | ||
992 | orn C,A,T1 | |
993 | sethi %hi(0xeb86d391),T2 != | |
994 | xor T1,D,T1 | |
995 | or T2,%lo(0xeb86d391),T2 | |
996 | add T1,R9,T1 | |
997 | !pre-LOADed X(0),R0 | |
998 | mov Aval,A != | |
999 | add T1,T2,T1 | |
1000 | mov Dval,D | |
1001 | add B,T1,B | |
1002 | sll B,21,T2 != | |
1003 | add Cval,C,Cval | |
1004 | srl B,32-21,B | |
1005 | st Cval,[Cptr] | |
1006 | or B,T2,B != | |
1007 | add B,C,B | |
1008 | ||
1009 | deccc %i2 | |
1010 | mov Cval,C | |
1011 | add B,Bval,B != | |
1012 | inc 64,%i1 | |
1013 | nop | |
1014 | st B,[Bptr] | |
1015 | nop != | |
1016 | ||
a5e4c0bb | 1017 | #ifdef OPENSSL_SYSNAME_ULTRASPARC |
bd3576d2 UM |
1018 | bg,a,pt %icc,.Lmd5_block_loop |
1019 | #else | |
1020 | bg,a .Lmd5_block_loop | |
1021 | #endif | |
1022 | LOAD X(0),R0 | |
1023 | ||
1024 | #ifdef ASI_PRIMARY_LITTLE | |
ccb8a026 | 1025 | wr %g0,%o7,%asi |
bd3576d2 UM |
1026 | #endif |
1027 | ret | |
1028 | restore %g0,0,%o0 | |
1029 | ||
1030 | .type md5_block,#function | |
1031 | .size md5_block,(.-md5_block) |