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 * 27 * cc -xarch=v[9|8plus] -DOPENSSL_SYSNAME_ULTRASPARC -DMD5_BLOCK_DATA_ORDER \ 28 * -c md5-sparcv9.S 29 * 30 * and with gcc: 31 * 32 * gcc -mcpu=ultrasparc -DOPENSSL_SYSNAME_ULTRASPARC -DMD5_BLOCK_DATA_ORDER \ 33 * -c md5-sparcv9.S 34 * 35 * or if above fails (it does if you have gas): 36 * 37 * gcc -E -DOPENSSL_SYSNAMEULTRASPARC -DMD5_BLOCK_DATA_ORDER md5_block.sparc.S | \ 38 * as -xarch=v8plus /dev/fd/0 -o md5-sparcv9.o 39 */ 40 41#include <openssl/e_os2.h> 42 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) 77# if defined(OPENSSL_SYSNAME_ULTRASPARC) 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 92 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 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 103#else 104# define FRAME -96 105#endif 106 107.align 32 108 109.global md5_block 110md5_block: 111 save %sp,FRAME,%sp 112 113 ld [Dptr],D 114 ld [Cptr],C 115 ld [Bptr],B 116 ld [Aptr],A 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 121 LOAD X(0),R0 122 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 1017#ifdef OPENSSL_SYSNAME_ULTRASPARC 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 1025 wr %g0,%o7,%asi 1026#endif 1027 ret 1028 restore %g0,0,%o0 1029 1030.type md5_block,#function 1031.size md5_block,(.-md5_block) 1032