1#include "sparc_arch.h" 2 3#ifdef __arch64__ 4.register %g2,#scratch 5.register %g3,#scratch 6#endif 7 8.section ".text",#alloc,#execinstr 9 10#ifdef __PIC__ 11SPARC_PIC_THUNK(%g1) 12#endif 13 14.globl md5_block_asm_data_order 15.align 32 16md5_block_asm_data_order: 17 SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5) 18 ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1] 19 20 andcc %g1, CFR_MD5, %g0 21 be .Lsoftware 22 nop 23 24 mov 4, %g1 25 andcc %o1, 0x7, %g0 26 lda [%o0 + %g0]0x88, %f0 ! load context 27 lda [%o0 + %g1]0x88, %f1 28 add %o0, 8, %o0 29 lda [%o0 + %g0]0x88, %f2 30 lda [%o0 + %g1]0x88, %f3 31 bne,pn %icc, .Lhwunaligned 32 sub %o0, 8, %o0 33 34.Lhw_loop: 35 ldd [%o1 + 0x00], %f8 36 ldd [%o1 + 0x08], %f10 37 ldd [%o1 + 0x10], %f12 38 ldd [%o1 + 0x18], %f14 39 ldd [%o1 + 0x20], %f16 40 ldd [%o1 + 0x28], %f18 41 ldd [%o1 + 0x30], %f20 42 subcc %o2, 1, %o2 ! done yet? 43 ldd [%o1 + 0x38], %f22 44 add %o1, 0x40, %o1 45 prefetch [%o1 + 63], 20 46 47 .word 0x81b02800 ! MD5 48 49 bne,pt SIZE_T_CC, .Lhw_loop 50 nop 51 52.Lhwfinish: 53 sta %f0, [%o0 + %g0]0x88 ! store context 54 sta %f1, [%o0 + %g1]0x88 55 add %o0, 8, %o0 56 sta %f2, [%o0 + %g0]0x88 57 sta %f3, [%o0 + %g1]0x88 58 retl 59 nop 60 61.align 8 62.Lhwunaligned: 63 .word 0x93b24300 !alignaddr %o1,%g0,%o1 64 65 ldd [%o1 + 0x00], %f10 66.Lhwunaligned_loop: 67 ldd [%o1 + 0x08], %f12 68 ldd [%o1 + 0x10], %f14 69 ldd [%o1 + 0x18], %f16 70 ldd [%o1 + 0x20], %f18 71 ldd [%o1 + 0x28], %f20 72 ldd [%o1 + 0x30], %f22 73 ldd [%o1 + 0x38], %f24 74 subcc %o2, 1, %o2 ! done yet? 75 ldd [%o1 + 0x40], %f26 76 add %o1, 0x40, %o1 77 prefetch [%o1 + 63], 20 78 79 .word 0x91b2890c !faligndata %f10,%f12,%f8 80 .word 0x95b3090e !faligndata %f12,%f14,%f10 81 .word 0x99b38910 !faligndata %f14,%f16,%f12 82 .word 0x9db40912 !faligndata %f16,%f18,%f14 83 .word 0xa1b48914 !faligndata %f18,%f20,%f16 84 .word 0xa5b50916 !faligndata %f20,%f22,%f18 85 .word 0xa9b58918 !faligndata %f22,%f24,%f20 86 .word 0xadb6091a !faligndata %f24,%f26,%f22 87 88 .word 0x81b02800 ! MD5 89 90 bne,pt SIZE_T_CC, .Lhwunaligned_loop 91 .word 0x95b68f9a !for %f26,%f26,%f10 ! %f10=%f26 92 93 ba .Lhwfinish 94 nop 95 96.align 16 97.Lsoftware: 98 save %sp,-STACK_FRAME,%sp 99 100 rd %asi,%l7 101 wr %g0,0x88,%asi ! ASI_PRIMARY_LITTLE 102 and %i1,7,%i3 103 andn %i1,7,%i1 104 105 sll %i3,3,%i3 ! *=8 106 mov 56,%i5 107 ld [%i0+0],%l0 108 sub %i5,%i3,%i5 109 ld [%i0+4],%l1 110 and %i5,32,%i4 111 add %i5,8,%i5 112 ld [%i0+8],%l2 113 sub %i5,%i4,%i5 ! shr+shl1+shl2==64 114 ld [%i0+12],%l3 115 nop 116 117.Loop: 118 cmp %i3,0 ! was inp aligned? 119 ldxa [%i1+0]%asi,%o0 ! load little-endian input 120 ldxa [%i1+8]%asi,%o1 121 ldxa [%i1+16]%asi,%o2 122 ldxa [%i1+24]%asi,%o3 123 ldxa [%i1+32]%asi,%o4 124 sllx %l0,32,%g4 ! pack A,B 125 ldxa [%i1+40]%asi,%o5 126 sllx %l2,32,%g5 ! pack C,D 127 ldxa [%i1+48]%asi,%o7 128 or %l1,%g4,%g4 129 ldxa [%i1+56]%asi,%g1 130 or %l3,%g5,%g5 131 bnz,a,pn %icc,.+8 132 ldxa [%i1+64]%asi,%g2 133 134 srlx %o0,%i3,%o0 ! align X[0] 135 sllx %o1,%i4,%g3 136 sethi %hi(3614090360),%l5 137 sllx %g3,%i5,%g3 138 or %l5,%lo(3614090360),%l5 139 or %g3,%o0,%o0 140 xor %l2,%l3,%l4 141 add %o0,%l5,%l5 ! X[0]+K[0] 142 srlx %o0,32,%g3 ! extract X[1] 143 and %l1,%l4,%l4 ! round 0 144 add %l5,%l0,%l0 145 xor %l3,%l4,%l4 146 sethi %hi(3905402710),%l5 147 add %l4,%l0,%l0 148 or %l5,%lo(3905402710),%l5 149 sll %l0,7,%l6 150 add %g3,%l5,%l5 ! X[1]+K[1] 151 srl %l0,32-7,%l0 152 add %l1,%l6,%l6 153 xor %l1,%l2,%l4 154 add %l6,%l0,%l0 155 srlx %o1,%i3,%o1 ! align X[2] 156 and %l0,%l4,%l4 ! round 1 157 sllx %o2,%i4,%g3 158 add %l5,%l3,%l3 159 sllx %g3,%i5,%g3 160 xor %l2,%l4,%l4 161 or %g3,%o1,%o1 162 sethi %hi(606105819),%l5 163 add %l4,%l3,%l3 164 or %l5,%lo(606105819),%l5 165 sll %l3,12,%l6 166 add %o1,%l5,%l5 ! X[2]+K[2] 167 srl %l3,32-12,%l3 168 add %l0,%l6,%l6 169 xor %l0,%l1,%l4 170 add %l6,%l3,%l3 171 srlx %o1,32,%g3 ! extract X[3] 172 and %l3,%l4,%l4 ! round 2 173 add %l5,%l2,%l2 174 xor %l1,%l4,%l4 175 sethi %hi(3250441966),%l5 176 add %l4,%l2,%l2 177 or %l5,%lo(3250441966),%l5 178 sll %l2,17,%l6 179 add %g3,%l5,%l5 ! X[3]+K[3] 180 srl %l2,32-17,%l2 181 add %l3,%l6,%l6 182 xor %l3,%l0,%l4 183 add %l6,%l2,%l2 184 srlx %o2,%i3,%o2 ! align X[4] 185 and %l2,%l4,%l4 ! round 3 186 sllx %o3,%i4,%g3 187 add %l5,%l1,%l1 188 sllx %g3,%i5,%g3 189 xor %l0,%l4,%l4 190 or %g3,%o2,%o2 191 sethi %hi(4118548399),%l5 192 add %l4,%l1,%l1 193 or %l5,%lo(4118548399),%l5 194 sll %l1,22,%l6 195 add %o2,%l5,%l5 ! X[4]+K[4] 196 srl %l1,32-22,%l1 197 add %l2,%l6,%l6 198 xor %l2,%l3,%l4 199 add %l6,%l1,%l1 200 srlx %o2,32,%g3 ! extract X[5] 201 and %l1,%l4,%l4 ! round 4 202 add %l5,%l0,%l0 203 xor %l3,%l4,%l4 204 sethi %hi(1200080426),%l5 205 add %l4,%l0,%l0 206 or %l5,%lo(1200080426),%l5 207 sll %l0,7,%l6 208 add %g3,%l5,%l5 ! X[5]+K[5] 209 srl %l0,32-7,%l0 210 add %l1,%l6,%l6 211 xor %l1,%l2,%l4 212 add %l6,%l0,%l0 213 srlx %o3,%i3,%o3 ! align X[6] 214 and %l0,%l4,%l4 ! round 5 215 sllx %o4,%i4,%g3 216 add %l5,%l3,%l3 217 sllx %g3,%i5,%g3 218 xor %l2,%l4,%l4 219 or %g3,%o3,%o3 220 sethi %hi(2821735955),%l5 221 add %l4,%l3,%l3 222 or %l5,%lo(2821735955),%l5 223 sll %l3,12,%l6 224 add %o3,%l5,%l5 ! X[6]+K[6] 225 srl %l3,32-12,%l3 226 add %l0,%l6,%l6 227 xor %l0,%l1,%l4 228 add %l6,%l3,%l3 229 srlx %o3,32,%g3 ! extract X[7] 230 and %l3,%l4,%l4 ! round 6 231 add %l5,%l2,%l2 232 xor %l1,%l4,%l4 233 sethi %hi(4249261313),%l5 234 add %l4,%l2,%l2 235 or %l5,%lo(4249261313),%l5 236 sll %l2,17,%l6 237 add %g3,%l5,%l5 ! X[7]+K[7] 238 srl %l2,32-17,%l2 239 add %l3,%l6,%l6 240 xor %l3,%l0,%l4 241 add %l6,%l2,%l2 242 srlx %o4,%i3,%o4 ! align X[8] 243 and %l2,%l4,%l4 ! round 7 244 sllx %o5,%i4,%g3 245 add %l5,%l1,%l1 246 sllx %g3,%i5,%g3 247 xor %l0,%l4,%l4 248 or %g3,%o4,%o4 249 sethi %hi(1770035416),%l5 250 add %l4,%l1,%l1 251 or %l5,%lo(1770035416),%l5 252 sll %l1,22,%l6 253 add %o4,%l5,%l5 ! X[8]+K[8] 254 srl %l1,32-22,%l1 255 add %l2,%l6,%l6 256 xor %l2,%l3,%l4 257 add %l6,%l1,%l1 258 srlx %o4,32,%g3 ! extract X[9] 259 and %l1,%l4,%l4 ! round 8 260 add %l5,%l0,%l0 261 xor %l3,%l4,%l4 262 sethi %hi(2336552879),%l5 263 add %l4,%l0,%l0 264 or %l5,%lo(2336552879),%l5 265 sll %l0,7,%l6 266 add %g3,%l5,%l5 ! X[9]+K[9] 267 srl %l0,32-7,%l0 268 add %l1,%l6,%l6 269 xor %l1,%l2,%l4 270 add %l6,%l0,%l0 271 srlx %o5,%i3,%o5 ! align X[10] 272 and %l0,%l4,%l4 ! round 9 273 sllx %o7,%i4,%g3 274 add %l5,%l3,%l3 275 sllx %g3,%i5,%g3 276 xor %l2,%l4,%l4 277 or %g3,%o5,%o5 278 sethi %hi(4294925233),%l5 279 add %l4,%l3,%l3 280 or %l5,%lo(4294925233),%l5 281 sll %l3,12,%l6 282 add %o5,%l5,%l5 ! X[10]+K[10] 283 srl %l3,32-12,%l3 284 add %l0,%l6,%l6 285 xor %l0,%l1,%l4 286 add %l6,%l3,%l3 287 srlx %o5,32,%g3 ! extract X[11] 288 and %l3,%l4,%l4 ! round 10 289 add %l5,%l2,%l2 290 xor %l1,%l4,%l4 291 sethi %hi(2304563134),%l5 292 add %l4,%l2,%l2 293 or %l5,%lo(2304563134),%l5 294 sll %l2,17,%l6 295 add %g3,%l5,%l5 ! X[11]+K[11] 296 srl %l2,32-17,%l2 297 add %l3,%l6,%l6 298 xor %l3,%l0,%l4 299 add %l6,%l2,%l2 300 srlx %o7,%i3,%o7 ! align X[12] 301 and %l2,%l4,%l4 ! round 11 302 sllx %g1,%i4,%g3 303 add %l5,%l1,%l1 304 sllx %g3,%i5,%g3 305 xor %l0,%l4,%l4 306 or %g3,%o7,%o7 307 sethi %hi(1804603682),%l5 308 add %l4,%l1,%l1 309 or %l5,%lo(1804603682),%l5 310 sll %l1,22,%l6 311 add %o7,%l5,%l5 ! X[12]+K[12] 312 srl %l1,32-22,%l1 313 add %l2,%l6,%l6 314 xor %l2,%l3,%l4 315 add %l6,%l1,%l1 316 srlx %o7,32,%g3 ! extract X[13] 317 and %l1,%l4,%l4 ! round 12 318 add %l5,%l0,%l0 319 xor %l3,%l4,%l4 320 sethi %hi(4254626195),%l5 321 add %l4,%l0,%l0 322 or %l5,%lo(4254626195),%l5 323 sll %l0,7,%l6 324 add %g3,%l5,%l5 ! X[13]+K[13] 325 srl %l0,32-7,%l0 326 add %l1,%l6,%l6 327 xor %l1,%l2,%l4 328 add %l6,%l0,%l0 329 srlx %g1,%i3,%g1 ! align X[14] 330 and %l0,%l4,%l4 ! round 13 331 sllx %g2,%i4,%g3 332 add %l5,%l3,%l3 333 sllx %g3,%i5,%g3 334 xor %l2,%l4,%l4 335 or %g3,%g1,%g1 336 sethi %hi(2792965006),%l5 337 add %l4,%l3,%l3 338 or %l5,%lo(2792965006),%l5 339 sll %l3,12,%l6 340 add %g1,%l5,%l5 ! X[14]+K[14] 341 srl %l3,32-12,%l3 342 add %l0,%l6,%l6 343 xor %l0,%l1,%l4 344 add %l6,%l3,%l3 345 srlx %g1,32,%g3 ! extract X[15] 346 and %l3,%l4,%l4 ! round 14 347 add %l5,%l2,%l2 348 xor %l1,%l4,%l4 349 sethi %hi(1236535329),%l5 350 add %l4,%l2,%l2 351 or %l5,%lo(1236535329),%l5 352 sll %l2,17,%l6 353 add %g3,%l5,%l5 ! X[15]+K[15] 354 srl %l2,32-17,%l2 355 add %l3,%l6,%l6 356 xor %l3,%l0,%l4 357 add %l6,%l2,%l2 358 srlx %o0,32,%g3 ! extract X[1] 359 and %l2,%l4,%l4 ! round 15 360 add %l5,%l1,%l1 361 xor %l0,%l4,%l4 362 sethi %hi(4129170786),%l5 363 add %l4,%l1,%l1 364 or %l5,%lo(4129170786),%l5 365 sll %l1,22,%l6 366 add %g3,%l5,%l5 ! X[1]+K[16] 367 srl %l1,32-22,%l1 368 add %l2,%l6,%l6 369 andn %l2,%l3,%l4 370 add %l6,%l1,%l1 371 and %l1,%l3,%l6 ! round 16 372 add %l5,%l0,%l0 373 or %l6,%l4,%l4 374 sethi %hi(3225465664),%l5 375 add %l4,%l0,%l0 376 or %l5,%lo(3225465664),%l5 377 sll %l0,5,%l6 378 add %o3,%l5,%l5 ! X[6]+K[17] 379 srl %l0,32-5,%l0 380 add %l1,%l6,%l6 381 andn %l1,%l2,%l4 382 add %l6,%l0,%l0 383 srlx %o5,32,%g3 ! extract X[11] 384 and %l0,%l2,%l6 ! round 17 385 add %l5,%l3,%l3 386 or %l6,%l4,%l4 387 sethi %hi(643717713),%l5 388 add %l4,%l3,%l3 389 or %l5,%lo(643717713),%l5 390 sll %l3,9,%l6 391 add %g3,%l5,%l5 ! X[11]+K[18] 392 srl %l3,32-9,%l3 393 add %l0,%l6,%l6 394 andn %l0,%l1,%l4 395 add %l6,%l3,%l3 396 and %l3,%l1,%l6 ! round 18 397 add %l5,%l2,%l2 398 or %l6,%l4,%l4 399 sethi %hi(3921069994),%l5 400 add %l4,%l2,%l2 401 or %l5,%lo(3921069994),%l5 402 sll %l2,14,%l6 403 add %o0,%l5,%l5 ! X[0]+K[19] 404 srl %l2,32-14,%l2 405 add %l3,%l6,%l6 406 andn %l3,%l0,%l4 407 add %l6,%l2,%l2 408 srlx %o2,32,%g3 ! extract X[5] 409 and %l2,%l0,%l6 ! round 19 410 add %l5,%l1,%l1 411 or %l6,%l4,%l4 412 sethi %hi(3593408605),%l5 413 add %l4,%l1,%l1 414 or %l5,%lo(3593408605),%l5 415 sll %l1,20,%l6 416 add %g3,%l5,%l5 ! X[5]+K[20] 417 srl %l1,32-20,%l1 418 add %l2,%l6,%l6 419 andn %l2,%l3,%l4 420 add %l6,%l1,%l1 421 and %l1,%l3,%l6 ! round 20 422 add %l5,%l0,%l0 423 or %l6,%l4,%l4 424 sethi %hi(38016083),%l5 425 add %l4,%l0,%l0 426 or %l5,%lo(38016083),%l5 427 sll %l0,5,%l6 428 add %o5,%l5,%l5 ! X[10]+K[21] 429 srl %l0,32-5,%l0 430 add %l1,%l6,%l6 431 andn %l1,%l2,%l4 432 add %l6,%l0,%l0 433 srlx %g1,32,%g3 ! extract X[15] 434 and %l0,%l2,%l6 ! round 21 435 add %l5,%l3,%l3 436 or %l6,%l4,%l4 437 sethi %hi(3634488961),%l5 438 add %l4,%l3,%l3 439 or %l5,%lo(3634488961),%l5 440 sll %l3,9,%l6 441 add %g3,%l5,%l5 ! X[15]+K[22] 442 srl %l3,32-9,%l3 443 add %l0,%l6,%l6 444 andn %l0,%l1,%l4 445 add %l6,%l3,%l3 446 and %l3,%l1,%l6 ! round 22 447 add %l5,%l2,%l2 448 or %l6,%l4,%l4 449 sethi %hi(3889429448),%l5 450 add %l4,%l2,%l2 451 or %l5,%lo(3889429448),%l5 452 sll %l2,14,%l6 453 add %o2,%l5,%l5 ! X[4]+K[23] 454 srl %l2,32-14,%l2 455 add %l3,%l6,%l6 456 andn %l3,%l0,%l4 457 add %l6,%l2,%l2 458 srlx %o4,32,%g3 ! extract X[9] 459 and %l2,%l0,%l6 ! round 23 460 add %l5,%l1,%l1 461 or %l6,%l4,%l4 462 sethi %hi(568446438),%l5 463 add %l4,%l1,%l1 464 or %l5,%lo(568446438),%l5 465 sll %l1,20,%l6 466 add %g3,%l5,%l5 ! X[9]+K[24] 467 srl %l1,32-20,%l1 468 add %l2,%l6,%l6 469 andn %l2,%l3,%l4 470 add %l6,%l1,%l1 471 and %l1,%l3,%l6 ! round 24 472 add %l5,%l0,%l0 473 or %l6,%l4,%l4 474 sethi %hi(3275163606),%l5 475 add %l4,%l0,%l0 476 or %l5,%lo(3275163606),%l5 477 sll %l0,5,%l6 478 add %g1,%l5,%l5 ! X[14]+K[25] 479 srl %l0,32-5,%l0 480 add %l1,%l6,%l6 481 andn %l1,%l2,%l4 482 add %l6,%l0,%l0 483 srlx %o1,32,%g3 ! extract X[3] 484 and %l0,%l2,%l6 ! round 25 485 add %l5,%l3,%l3 486 or %l6,%l4,%l4 487 sethi %hi(4107603335),%l5 488 add %l4,%l3,%l3 489 or %l5,%lo(4107603335),%l5 490 sll %l3,9,%l6 491 add %g3,%l5,%l5 ! X[3]+K[26] 492 srl %l3,32-9,%l3 493 add %l0,%l6,%l6 494 andn %l0,%l1,%l4 495 add %l6,%l3,%l3 496 and %l3,%l1,%l6 ! round 26 497 add %l5,%l2,%l2 498 or %l6,%l4,%l4 499 sethi %hi(1163531501),%l5 500 add %l4,%l2,%l2 501 or %l5,%lo(1163531501),%l5 502 sll %l2,14,%l6 503 add %o4,%l5,%l5 ! X[8]+K[27] 504 srl %l2,32-14,%l2 505 add %l3,%l6,%l6 506 andn %l3,%l0,%l4 507 add %l6,%l2,%l2 508 srlx %o7,32,%g3 ! extract X[13] 509 and %l2,%l0,%l6 ! round 27 510 add %l5,%l1,%l1 511 or %l6,%l4,%l4 512 sethi %hi(2850285829),%l5 513 add %l4,%l1,%l1 514 or %l5,%lo(2850285829),%l5 515 sll %l1,20,%l6 516 add %g3,%l5,%l5 ! X[13]+K[28] 517 srl %l1,32-20,%l1 518 add %l2,%l6,%l6 519 andn %l2,%l3,%l4 520 add %l6,%l1,%l1 521 and %l1,%l3,%l6 ! round 28 522 add %l5,%l0,%l0 523 or %l6,%l4,%l4 524 sethi %hi(4243563512),%l5 525 add %l4,%l0,%l0 526 or %l5,%lo(4243563512),%l5 527 sll %l0,5,%l6 528 add %o1,%l5,%l5 ! X[2]+K[29] 529 srl %l0,32-5,%l0 530 add %l1,%l6,%l6 531 andn %l1,%l2,%l4 532 add %l6,%l0,%l0 533 srlx %o3,32,%g3 ! extract X[7] 534 and %l0,%l2,%l6 ! round 29 535 add %l5,%l3,%l3 536 or %l6,%l4,%l4 537 sethi %hi(1735328473),%l5 538 add %l4,%l3,%l3 539 or %l5,%lo(1735328473),%l5 540 sll %l3,9,%l6 541 add %g3,%l5,%l5 ! X[7]+K[30] 542 srl %l3,32-9,%l3 543 add %l0,%l6,%l6 544 andn %l0,%l1,%l4 545 add %l6,%l3,%l3 546 and %l3,%l1,%l6 ! round 30 547 add %l5,%l2,%l2 548 or %l6,%l4,%l4 549 sethi %hi(2368359562),%l5 550 add %l4,%l2,%l2 551 or %l5,%lo(2368359562),%l5 552 sll %l2,14,%l6 553 add %o7,%l5,%l5 ! X[12]+K[31] 554 srl %l2,32-14,%l2 555 add %l3,%l6,%l6 556 andn %l3,%l0,%l4 557 add %l6,%l2,%l2 558 srlx %o2,32,%g3 ! extract X[5] 559 and %l2,%l0,%l6 ! round 31 560 add %l5,%l1,%l1 561 or %l6,%l4,%l4 562 sethi %hi(4294588738),%l5 563 add %l4,%l1,%l1 564 or %l5,%lo(4294588738),%l5 565 sll %l1,20,%l6 566 add %g3,%l5,%l5 ! X[5]+K[32] 567 srl %l1,32-20,%l1 568 add %l2,%l6,%l6 569 xor %l2,%l3,%l4 570 add %l6,%l1,%l1 571 add %l5,%l0,%l0 ! round 32 572 xor %l1,%l4,%l4 573 sethi %hi(2272392833),%l5 574 add %l4,%l0,%l0 575 or %l5,%lo(2272392833),%l5 576 sll %l0,4,%l6 577 add %o4,%l5,%l5 ! X[8]+K[33] 578 srl %l0,32-4,%l0 579 add %l1,%l6,%l6 580 xor %l1,%l2,%l4 581 add %l6,%l0,%l0 582 srlx %o5,32,%g3 ! extract X[11] 583 add %l5,%l3,%l3 ! round 33 584 xor %l0,%l4,%l4 585 sethi %hi(1839030562),%l5 586 add %l4,%l3,%l3 587 or %l5,%lo(1839030562),%l5 588 sll %l3,11,%l6 589 add %g3,%l5,%l5 ! X[11]+K[34] 590 srl %l3,32-11,%l3 591 add %l0,%l6,%l6 592 xor %l0,%l1,%l4 593 add %l6,%l3,%l3 594 add %l5,%l2,%l2 ! round 34 595 xor %l3,%l4,%l4 596 sethi %hi(4259657740),%l5 597 add %l4,%l2,%l2 598 or %l5,%lo(4259657740),%l5 599 sll %l2,16,%l6 600 add %g1,%l5,%l5 ! X[14]+K[35] 601 srl %l2,32-16,%l2 602 add %l3,%l6,%l6 603 xor %l3,%l0,%l4 604 add %l6,%l2,%l2 605 srlx %o0,32,%g3 ! extract X[1] 606 add %l5,%l1,%l1 ! round 35 607 xor %l2,%l4,%l4 608 sethi %hi(2763975236),%l5 609 add %l4,%l1,%l1 610 or %l5,%lo(2763975236),%l5 611 sll %l1,23,%l6 612 add %g3,%l5,%l5 ! X[1]+K[36] 613 srl %l1,32-23,%l1 614 add %l2,%l6,%l6 615 xor %l2,%l3,%l4 616 add %l6,%l1,%l1 617 add %l5,%l0,%l0 ! round 36 618 xor %l1,%l4,%l4 619 sethi %hi(1272893353),%l5 620 add %l4,%l0,%l0 621 or %l5,%lo(1272893353),%l5 622 sll %l0,4,%l6 623 add %o2,%l5,%l5 ! X[4]+K[37] 624 srl %l0,32-4,%l0 625 add %l1,%l6,%l6 626 xor %l1,%l2,%l4 627 add %l6,%l0,%l0 628 srlx %o3,32,%g3 ! extract X[7] 629 add %l5,%l3,%l3 ! round 37 630 xor %l0,%l4,%l4 631 sethi %hi(4139469664),%l5 632 add %l4,%l3,%l3 633 or %l5,%lo(4139469664),%l5 634 sll %l3,11,%l6 635 add %g3,%l5,%l5 ! X[7]+K[38] 636 srl %l3,32-11,%l3 637 add %l0,%l6,%l6 638 xor %l0,%l1,%l4 639 add %l6,%l3,%l3 640 add %l5,%l2,%l2 ! round 38 641 xor %l3,%l4,%l4 642 sethi %hi(3200236656),%l5 643 add %l4,%l2,%l2 644 or %l5,%lo(3200236656),%l5 645 sll %l2,16,%l6 646 add %o5,%l5,%l5 ! X[10]+K[39] 647 srl %l2,32-16,%l2 648 add %l3,%l6,%l6 649 xor %l3,%l0,%l4 650 add %l6,%l2,%l2 651 srlx %o7,32,%g3 ! extract X[13] 652 add %l5,%l1,%l1 ! round 39 653 xor %l2,%l4,%l4 654 sethi %hi(681279174),%l5 655 add %l4,%l1,%l1 656 or %l5,%lo(681279174),%l5 657 sll %l1,23,%l6 658 add %g3,%l5,%l5 ! X[13]+K[40] 659 srl %l1,32-23,%l1 660 add %l2,%l6,%l6 661 xor %l2,%l3,%l4 662 add %l6,%l1,%l1 663 add %l5,%l0,%l0 ! round 40 664 xor %l1,%l4,%l4 665 sethi %hi(3936430074),%l5 666 add %l4,%l0,%l0 667 or %l5,%lo(3936430074),%l5 668 sll %l0,4,%l6 669 add %o0,%l5,%l5 ! X[0]+K[41] 670 srl %l0,32-4,%l0 671 add %l1,%l6,%l6 672 xor %l1,%l2,%l4 673 add %l6,%l0,%l0 674 srlx %o1,32,%g3 ! extract X[3] 675 add %l5,%l3,%l3 ! round 41 676 xor %l0,%l4,%l4 677 sethi %hi(3572445317),%l5 678 add %l4,%l3,%l3 679 or %l5,%lo(3572445317),%l5 680 sll %l3,11,%l6 681 add %g3,%l5,%l5 ! X[3]+K[42] 682 srl %l3,32-11,%l3 683 add %l0,%l6,%l6 684 xor %l0,%l1,%l4 685 add %l6,%l3,%l3 686 add %l5,%l2,%l2 ! round 42 687 xor %l3,%l4,%l4 688 sethi %hi(76029189),%l5 689 add %l4,%l2,%l2 690 or %l5,%lo(76029189),%l5 691 sll %l2,16,%l6 692 add %o3,%l5,%l5 ! X[6]+K[43] 693 srl %l2,32-16,%l2 694 add %l3,%l6,%l6 695 xor %l3,%l0,%l4 696 add %l6,%l2,%l2 697 srlx %o4,32,%g3 ! extract X[9] 698 add %l5,%l1,%l1 ! round 43 699 xor %l2,%l4,%l4 700 sethi %hi(3654602809),%l5 701 add %l4,%l1,%l1 702 or %l5,%lo(3654602809),%l5 703 sll %l1,23,%l6 704 add %g3,%l5,%l5 ! X[9]+K[44] 705 srl %l1,32-23,%l1 706 add %l2,%l6,%l6 707 xor %l2,%l3,%l4 708 add %l6,%l1,%l1 709 add %l5,%l0,%l0 ! round 44 710 xor %l1,%l4,%l4 711 sethi %hi(3873151461),%l5 712 add %l4,%l0,%l0 713 or %l5,%lo(3873151461),%l5 714 sll %l0,4,%l6 715 add %o7,%l5,%l5 ! X[12]+K[45] 716 srl %l0,32-4,%l0 717 add %l1,%l6,%l6 718 xor %l1,%l2,%l4 719 add %l6,%l0,%l0 720 srlx %g1,32,%g3 ! extract X[15] 721 add %l5,%l3,%l3 ! round 45 722 xor %l0,%l4,%l4 723 sethi %hi(530742520),%l5 724 add %l4,%l3,%l3 725 or %l5,%lo(530742520),%l5 726 sll %l3,11,%l6 727 add %g3,%l5,%l5 ! X[15]+K[46] 728 srl %l3,32-11,%l3 729 add %l0,%l6,%l6 730 xor %l0,%l1,%l4 731 add %l6,%l3,%l3 732 add %l5,%l2,%l2 ! round 46 733 xor %l3,%l4,%l4 734 sethi %hi(3299628645),%l5 735 add %l4,%l2,%l2 736 or %l5,%lo(3299628645),%l5 737 sll %l2,16,%l6 738 add %o1,%l5,%l5 ! X[2]+K[47] 739 srl %l2,32-16,%l2 740 add %l3,%l6,%l6 741 xor %l3,%l0,%l4 742 add %l6,%l2,%l2 743 add %l5,%l1,%l1 ! round 47 744 xor %l2,%l4,%l4 745 sethi %hi(4096336452),%l5 746 add %l4,%l1,%l1 747 or %l5,%lo(4096336452),%l5 748 sll %l1,23,%l6 749 add %o0,%l5,%l5 ! X[0]+K[48] 750 srl %l1,32-23,%l1 751 add %l2,%l6,%l6 752 xor %l2,%l3,%l4 753 add %l6,%l1,%l1 754 add %l5,%l0,%l0 ! round 48 755 srlx %o3,32,%g3 ! extract X[7] 756 orn %l1,%l3,%l4 757 sethi %hi(1126891415),%l5 758 xor %l2,%l4,%l4 759 or %l5,%lo(1126891415),%l5 760 add %l4,%l0,%l0 761 sll %l0,6,%l6 762 add %g3,%l5,%l5 ! X[7]+K[49] 763 srl %l0,32-6,%l0 764 add %l1,%l6,%l6 765 add %l6,%l0,%l0 766 add %l5,%l3,%l3 ! round 49 767 orn %l0,%l2,%l4 768 sethi %hi(2878612391),%l5 769 xor %l1,%l4,%l4 770 or %l5,%lo(2878612391),%l5 771 add %l4,%l3,%l3 772 sll %l3,10,%l6 773 add %g1,%l5,%l5 ! X[14]+K[50] 774 srl %l3,32-10,%l3 775 add %l0,%l6,%l6 776 add %l6,%l3,%l3 777 add %l5,%l2,%l2 ! round 50 778 srlx %o2,32,%g3 ! extract X[5] 779 orn %l3,%l1,%l4 780 sethi %hi(4237533241),%l5 781 xor %l0,%l4,%l4 782 or %l5,%lo(4237533241),%l5 783 add %l4,%l2,%l2 784 sll %l2,15,%l6 785 add %g3,%l5,%l5 ! X[5]+K[51] 786 srl %l2,32-15,%l2 787 add %l3,%l6,%l6 788 add %l6,%l2,%l2 789 add %l5,%l1,%l1 ! round 51 790 orn %l2,%l0,%l4 791 sethi %hi(1700485571),%l5 792 xor %l3,%l4,%l4 793 or %l5,%lo(1700485571),%l5 794 add %l4,%l1,%l1 795 sll %l1,21,%l6 796 add %o7,%l5,%l5 ! X[12]+K[52] 797 srl %l1,32-21,%l1 798 add %l2,%l6,%l6 799 add %l6,%l1,%l1 800 add %l5,%l0,%l0 ! round 52 801 srlx %o1,32,%g3 ! extract X[3] 802 orn %l1,%l3,%l4 803 sethi %hi(2399980690),%l5 804 xor %l2,%l4,%l4 805 or %l5,%lo(2399980690),%l5 806 add %l4,%l0,%l0 807 sll %l0,6,%l6 808 add %g3,%l5,%l5 ! X[3]+K[53] 809 srl %l0,32-6,%l0 810 add %l1,%l6,%l6 811 add %l6,%l0,%l0 812 add %l5,%l3,%l3 ! round 53 813 orn %l0,%l2,%l4 814 sethi %hi(4293915773),%l5 815 xor %l1,%l4,%l4 816 or %l5,%lo(4293915773),%l5 817 add %l4,%l3,%l3 818 sll %l3,10,%l6 819 add %o5,%l5,%l5 ! X[10]+K[54] 820 srl %l3,32-10,%l3 821 add %l0,%l6,%l6 822 add %l6,%l3,%l3 823 add %l5,%l2,%l2 ! round 54 824 srlx %o0,32,%g3 ! extract X[1] 825 orn %l3,%l1,%l4 826 sethi %hi(2240044497),%l5 827 xor %l0,%l4,%l4 828 or %l5,%lo(2240044497),%l5 829 add %l4,%l2,%l2 830 sll %l2,15,%l6 831 add %g3,%l5,%l5 ! X[1]+K[55] 832 srl %l2,32-15,%l2 833 add %l3,%l6,%l6 834 add %l6,%l2,%l2 835 add %l5,%l1,%l1 ! round 55 836 orn %l2,%l0,%l4 837 sethi %hi(1873313359),%l5 838 xor %l3,%l4,%l4 839 or %l5,%lo(1873313359),%l5 840 add %l4,%l1,%l1 841 sll %l1,21,%l6 842 add %o4,%l5,%l5 ! X[8]+K[56] 843 srl %l1,32-21,%l1 844 add %l2,%l6,%l6 845 add %l6,%l1,%l1 846 add %l5,%l0,%l0 ! round 56 847 srlx %g1,32,%g3 ! extract X[15] 848 orn %l1,%l3,%l4 849 sethi %hi(4264355552),%l5 850 xor %l2,%l4,%l4 851 or %l5,%lo(4264355552),%l5 852 add %l4,%l0,%l0 853 sll %l0,6,%l6 854 add %g3,%l5,%l5 ! X[15]+K[57] 855 srl %l0,32-6,%l0 856 add %l1,%l6,%l6 857 add %l6,%l0,%l0 858 add %l5,%l3,%l3 ! round 57 859 orn %l0,%l2,%l4 860 sethi %hi(2734768916),%l5 861 xor %l1,%l4,%l4 862 or %l5,%lo(2734768916),%l5 863 add %l4,%l3,%l3 864 sll %l3,10,%l6 865 add %o3,%l5,%l5 ! X[6]+K[58] 866 srl %l3,32-10,%l3 867 add %l0,%l6,%l6 868 add %l6,%l3,%l3 869 add %l5,%l2,%l2 ! round 58 870 srlx %o7,32,%g3 ! extract X[13] 871 orn %l3,%l1,%l4 872 sethi %hi(1309151649),%l5 873 xor %l0,%l4,%l4 874 or %l5,%lo(1309151649),%l5 875 add %l4,%l2,%l2 876 sll %l2,15,%l6 877 add %g3,%l5,%l5 ! X[13]+K[59] 878 srl %l2,32-15,%l2 879 add %l3,%l6,%l6 880 add %l6,%l2,%l2 881 add %l5,%l1,%l1 ! round 59 882 orn %l2,%l0,%l4 883 sethi %hi(4149444226),%l5 884 xor %l3,%l4,%l4 885 or %l5,%lo(4149444226),%l5 886 add %l4,%l1,%l1 887 sll %l1,21,%l6 888 add %o2,%l5,%l5 ! X[4]+K[60] 889 srl %l1,32-21,%l1 890 add %l2,%l6,%l6 891 add %l6,%l1,%l1 892 add %l5,%l0,%l0 ! round 60 893 srlx %o5,32,%g3 ! extract X[11] 894 orn %l1,%l3,%l4 895 sethi %hi(3174756917),%l5 896 xor %l2,%l4,%l4 897 or %l5,%lo(3174756917),%l5 898 add %l4,%l0,%l0 899 sll %l0,6,%l6 900 add %g3,%l5,%l5 ! X[11]+K[61] 901 srl %l0,32-6,%l0 902 add %l1,%l6,%l6 903 add %l6,%l0,%l0 904 add %l5,%l3,%l3 ! round 61 905 orn %l0,%l2,%l4 906 sethi %hi(718787259),%l5 907 xor %l1,%l4,%l4 908 or %l5,%lo(718787259),%l5 909 add %l4,%l3,%l3 910 sll %l3,10,%l6 911 add %o1,%l5,%l5 ! X[2]+K[62] 912 srl %l3,32-10,%l3 913 add %l0,%l6,%l6 914 add %l6,%l3,%l3 915 add %l5,%l2,%l2 ! round 62 916 srlx %o4,32,%g3 ! extract X[9] 917 orn %l3,%l1,%l4 918 sethi %hi(3951481745),%l5 919 xor %l0,%l4,%l4 920 or %l5,%lo(3951481745),%l5 921 add %l4,%l2,%l2 922 sll %l2,15,%l6 923 add %g3,%l5,%l5 ! X[9]+K[63] 924 srl %l2,32-15,%l2 925 add %l3,%l6,%l6 926 add %l6,%l2,%l2 927 add %l5,%l1,%l1 ! round 63 928 orn %l2,%l0,%l4 929 sethi %hi(0),%l5 930 xor %l3,%l4,%l4 931 or %l5,%lo(0),%l5 932 add %l4,%l1,%l1 933 sll %l1,21,%l6 934 add %o0,%l5,%l5 ! X[0]+K[64] 935 srl %l1,32-21,%l1 936 add %l2,%l6,%l6 937 add %l6,%l1,%l1 938 srlx %g4,32,%l4 ! unpack A,B,C,D and accumulate 939 add %i1,64,%i1 ! advance inp 940 srlx %g5,32,%l5 941 add %l4,%l0,%l0 942 subcc %i2,1,%i2 ! done yet? 943 add %g4,%l1,%l1 944 add %l5,%l2,%l2 945 add %g5,%l3,%l3 946 srl %l1,0,%l1 ! clruw %l1 947 bne SIZE_T_CC,.Loop 948 srl %l3,0,%l3 ! clruw %l3 949 950 st %l0,[%i0+0] ! write out ctx 951 st %l1,[%i0+4] 952 st %l2,[%i0+8] 953 st %l3,[%i0+12] 954 955 wr %g0,%l7,%asi 956 ret 957 restore 958.type md5_block_asm_data_order,#function 959.size md5_block_asm_data_order,(.-md5_block_asm_data_order) 960 961.asciz "MD5 block transform for SPARCv9, CRYPTOGAMS by <appro@openssl.org>" 962.align 4 963