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