1; This file is generated from a similarly-named Perl script in the BoringSSL 2; source tree. Do not edit by hand. 3 4%include "ring_core_generated/prefix_symbols_nasm.inc" 5%ifidn __OUTPUT_FORMAT__,obj 6section code use32 class=code align=64 7%elifidn __OUTPUT_FORMAT__,win32 8$@feat.00 equ 1 9section .text code align=64 10%else 11section .text code 12%endif 13;extern _OPENSSL_ia32cap_P 14global _aes_hw_encrypt 15align 16 16_aes_hw_encrypt: 17L$_aes_hw_encrypt_begin: 18 mov eax,DWORD [4+esp] 19 mov edx,DWORD [12+esp] 20 movups xmm2,[eax] 21 mov ecx,DWORD [240+edx] 22 mov eax,DWORD [8+esp] 23 movups xmm0,[edx] 24 movups xmm1,[16+edx] 25 lea edx,[32+edx] 26 xorps xmm2,xmm0 27L$000enc1_loop_1: 28db 102,15,56,220,209 29 dec ecx 30 movups xmm1,[edx] 31 lea edx,[16+edx] 32 jnz NEAR L$000enc1_loop_1 33db 102,15,56,221,209 34 pxor xmm0,xmm0 35 pxor xmm1,xmm1 36 movups [eax],xmm2 37 pxor xmm2,xmm2 38 ret 39align 16 40__aesni_encrypt2: 41 movups xmm0,[edx] 42 shl ecx,4 43 movups xmm1,[16+edx] 44 xorps xmm2,xmm0 45 pxor xmm3,xmm0 46 movups xmm0,[32+edx] 47 lea edx,[32+ecx*1+edx] 48 neg ecx 49 add ecx,16 50L$001enc2_loop: 51db 102,15,56,220,209 52db 102,15,56,220,217 53 movups xmm1,[ecx*1+edx] 54 add ecx,32 55db 102,15,56,220,208 56db 102,15,56,220,216 57 movups xmm0,[ecx*1+edx-16] 58 jnz NEAR L$001enc2_loop 59db 102,15,56,220,209 60db 102,15,56,220,217 61db 102,15,56,221,208 62db 102,15,56,221,216 63 ret 64align 16 65__aesni_encrypt3: 66 movups xmm0,[edx] 67 shl ecx,4 68 movups xmm1,[16+edx] 69 xorps xmm2,xmm0 70 pxor xmm3,xmm0 71 pxor xmm4,xmm0 72 movups xmm0,[32+edx] 73 lea edx,[32+ecx*1+edx] 74 neg ecx 75 add ecx,16 76L$002enc3_loop: 77db 102,15,56,220,209 78db 102,15,56,220,217 79db 102,15,56,220,225 80 movups xmm1,[ecx*1+edx] 81 add ecx,32 82db 102,15,56,220,208 83db 102,15,56,220,216 84db 102,15,56,220,224 85 movups xmm0,[ecx*1+edx-16] 86 jnz NEAR L$002enc3_loop 87db 102,15,56,220,209 88db 102,15,56,220,217 89db 102,15,56,220,225 90db 102,15,56,221,208 91db 102,15,56,221,216 92db 102,15,56,221,224 93 ret 94align 16 95__aesni_encrypt4: 96 movups xmm0,[edx] 97 movups xmm1,[16+edx] 98 shl ecx,4 99 xorps xmm2,xmm0 100 pxor xmm3,xmm0 101 pxor xmm4,xmm0 102 pxor xmm5,xmm0 103 movups xmm0,[32+edx] 104 lea edx,[32+ecx*1+edx] 105 neg ecx 106db 15,31,64,0 107 add ecx,16 108L$003enc4_loop: 109db 102,15,56,220,209 110db 102,15,56,220,217 111db 102,15,56,220,225 112db 102,15,56,220,233 113 movups xmm1,[ecx*1+edx] 114 add ecx,32 115db 102,15,56,220,208 116db 102,15,56,220,216 117db 102,15,56,220,224 118db 102,15,56,220,232 119 movups xmm0,[ecx*1+edx-16] 120 jnz NEAR L$003enc4_loop 121db 102,15,56,220,209 122db 102,15,56,220,217 123db 102,15,56,220,225 124db 102,15,56,220,233 125db 102,15,56,221,208 126db 102,15,56,221,216 127db 102,15,56,221,224 128db 102,15,56,221,232 129 ret 130align 16 131__aesni_encrypt6: 132 movups xmm0,[edx] 133 shl ecx,4 134 movups xmm1,[16+edx] 135 xorps xmm2,xmm0 136 pxor xmm3,xmm0 137 pxor xmm4,xmm0 138db 102,15,56,220,209 139 pxor xmm5,xmm0 140 pxor xmm6,xmm0 141db 102,15,56,220,217 142 lea edx,[32+ecx*1+edx] 143 neg ecx 144db 102,15,56,220,225 145 pxor xmm7,xmm0 146 movups xmm0,[ecx*1+edx] 147 add ecx,16 148 jmp NEAR L$004_aesni_encrypt6_inner 149align 16 150L$005enc6_loop: 151db 102,15,56,220,209 152db 102,15,56,220,217 153db 102,15,56,220,225 154L$004_aesni_encrypt6_inner: 155db 102,15,56,220,233 156db 102,15,56,220,241 157db 102,15,56,220,249 158L$_aesni_encrypt6_enter: 159 movups xmm1,[ecx*1+edx] 160 add ecx,32 161db 102,15,56,220,208 162db 102,15,56,220,216 163db 102,15,56,220,224 164db 102,15,56,220,232 165db 102,15,56,220,240 166db 102,15,56,220,248 167 movups xmm0,[ecx*1+edx-16] 168 jnz NEAR L$005enc6_loop 169db 102,15,56,220,209 170db 102,15,56,220,217 171db 102,15,56,220,225 172db 102,15,56,220,233 173db 102,15,56,220,241 174db 102,15,56,220,249 175db 102,15,56,221,208 176db 102,15,56,221,216 177db 102,15,56,221,224 178db 102,15,56,221,232 179db 102,15,56,221,240 180db 102,15,56,221,248 181 ret 182global _aes_hw_ctr32_encrypt_blocks 183align 16 184_aes_hw_ctr32_encrypt_blocks: 185L$_aes_hw_ctr32_encrypt_blocks_begin: 186 push ebp 187 push ebx 188 push esi 189 push edi 190 mov esi,DWORD [20+esp] 191 mov edi,DWORD [24+esp] 192 mov eax,DWORD [28+esp] 193 mov edx,DWORD [32+esp] 194 mov ebx,DWORD [36+esp] 195 mov ebp,esp 196 sub esp,88 197 and esp,-16 198 mov DWORD [80+esp],ebp 199 cmp eax,1 200 je NEAR L$006ctr32_one_shortcut 201 movdqu xmm7,[ebx] 202 mov DWORD [esp],202182159 203 mov DWORD [4+esp],134810123 204 mov DWORD [8+esp],67438087 205 mov DWORD [12+esp],66051 206 mov ecx,6 207 xor ebp,ebp 208 mov DWORD [16+esp],ecx 209 mov DWORD [20+esp],ecx 210 mov DWORD [24+esp],ecx 211 mov DWORD [28+esp],ebp 212db 102,15,58,22,251,3 213db 102,15,58,34,253,3 214 mov ecx,DWORD [240+edx] 215 bswap ebx 216 pxor xmm0,xmm0 217 pxor xmm1,xmm1 218 movdqa xmm2,[esp] 219db 102,15,58,34,195,0 220 lea ebp,[3+ebx] 221db 102,15,58,34,205,0 222 inc ebx 223db 102,15,58,34,195,1 224 inc ebp 225db 102,15,58,34,205,1 226 inc ebx 227db 102,15,58,34,195,2 228 inc ebp 229db 102,15,58,34,205,2 230 movdqa [48+esp],xmm0 231db 102,15,56,0,194 232 movdqu xmm6,[edx] 233 movdqa [64+esp],xmm1 234db 102,15,56,0,202 235 pshufd xmm2,xmm0,192 236 pshufd xmm3,xmm0,128 237 cmp eax,6 238 jb NEAR L$007ctr32_tail 239 pxor xmm7,xmm6 240 shl ecx,4 241 mov ebx,16 242 movdqa [32+esp],xmm7 243 mov ebp,edx 244 sub ebx,ecx 245 lea edx,[32+ecx*1+edx] 246 sub eax,6 247 jmp NEAR L$008ctr32_loop6 248align 16 249L$008ctr32_loop6: 250 pshufd xmm4,xmm0,64 251 movdqa xmm0,[32+esp] 252 pshufd xmm5,xmm1,192 253 pxor xmm2,xmm0 254 pshufd xmm6,xmm1,128 255 pxor xmm3,xmm0 256 pshufd xmm7,xmm1,64 257 movups xmm1,[16+ebp] 258 pxor xmm4,xmm0 259 pxor xmm5,xmm0 260db 102,15,56,220,209 261 pxor xmm6,xmm0 262 pxor xmm7,xmm0 263db 102,15,56,220,217 264 movups xmm0,[32+ebp] 265 mov ecx,ebx 266db 102,15,56,220,225 267db 102,15,56,220,233 268db 102,15,56,220,241 269db 102,15,56,220,249 270 call L$_aesni_encrypt6_enter 271 movups xmm1,[esi] 272 movups xmm0,[16+esi] 273 xorps xmm2,xmm1 274 movups xmm1,[32+esi] 275 xorps xmm3,xmm0 276 movups [edi],xmm2 277 movdqa xmm0,[16+esp] 278 xorps xmm4,xmm1 279 movdqa xmm1,[64+esp] 280 movups [16+edi],xmm3 281 movups [32+edi],xmm4 282 paddd xmm1,xmm0 283 paddd xmm0,[48+esp] 284 movdqa xmm2,[esp] 285 movups xmm3,[48+esi] 286 movups xmm4,[64+esi] 287 xorps xmm5,xmm3 288 movups xmm3,[80+esi] 289 lea esi,[96+esi] 290 movdqa [48+esp],xmm0 291db 102,15,56,0,194 292 xorps xmm6,xmm4 293 movups [48+edi],xmm5 294 xorps xmm7,xmm3 295 movdqa [64+esp],xmm1 296db 102,15,56,0,202 297 movups [64+edi],xmm6 298 pshufd xmm2,xmm0,192 299 movups [80+edi],xmm7 300 lea edi,[96+edi] 301 pshufd xmm3,xmm0,128 302 sub eax,6 303 jnc NEAR L$008ctr32_loop6 304 add eax,6 305 jz NEAR L$009ctr32_ret 306 movdqu xmm7,[ebp] 307 mov edx,ebp 308 pxor xmm7,[32+esp] 309 mov ecx,DWORD [240+ebp] 310L$007ctr32_tail: 311 por xmm2,xmm7 312 cmp eax,2 313 jb NEAR L$010ctr32_one 314 pshufd xmm4,xmm0,64 315 por xmm3,xmm7 316 je NEAR L$011ctr32_two 317 pshufd xmm5,xmm1,192 318 por xmm4,xmm7 319 cmp eax,4 320 jb NEAR L$012ctr32_three 321 pshufd xmm6,xmm1,128 322 por xmm5,xmm7 323 je NEAR L$013ctr32_four 324 por xmm6,xmm7 325 call __aesni_encrypt6 326 movups xmm1,[esi] 327 movups xmm0,[16+esi] 328 xorps xmm2,xmm1 329 movups xmm1,[32+esi] 330 xorps xmm3,xmm0 331 movups xmm0,[48+esi] 332 xorps xmm4,xmm1 333 movups xmm1,[64+esi] 334 xorps xmm5,xmm0 335 movups [edi],xmm2 336 xorps xmm6,xmm1 337 movups [16+edi],xmm3 338 movups [32+edi],xmm4 339 movups [48+edi],xmm5 340 movups [64+edi],xmm6 341 jmp NEAR L$009ctr32_ret 342align 16 343L$006ctr32_one_shortcut: 344 movups xmm2,[ebx] 345 mov ecx,DWORD [240+edx] 346L$010ctr32_one: 347 movups xmm0,[edx] 348 movups xmm1,[16+edx] 349 lea edx,[32+edx] 350 xorps xmm2,xmm0 351L$014enc1_loop_2: 352db 102,15,56,220,209 353 dec ecx 354 movups xmm1,[edx] 355 lea edx,[16+edx] 356 jnz NEAR L$014enc1_loop_2 357db 102,15,56,221,209 358 movups xmm6,[esi] 359 xorps xmm6,xmm2 360 movups [edi],xmm6 361 jmp NEAR L$009ctr32_ret 362align 16 363L$011ctr32_two: 364 call __aesni_encrypt2 365 movups xmm5,[esi] 366 movups xmm6,[16+esi] 367 xorps xmm2,xmm5 368 xorps xmm3,xmm6 369 movups [edi],xmm2 370 movups [16+edi],xmm3 371 jmp NEAR L$009ctr32_ret 372align 16 373L$012ctr32_three: 374 call __aesni_encrypt3 375 movups xmm5,[esi] 376 movups xmm6,[16+esi] 377 xorps xmm2,xmm5 378 movups xmm7,[32+esi] 379 xorps xmm3,xmm6 380 movups [edi],xmm2 381 xorps xmm4,xmm7 382 movups [16+edi],xmm3 383 movups [32+edi],xmm4 384 jmp NEAR L$009ctr32_ret 385align 16 386L$013ctr32_four: 387 call __aesni_encrypt4 388 movups xmm6,[esi] 389 movups xmm7,[16+esi] 390 movups xmm1,[32+esi] 391 xorps xmm2,xmm6 392 movups xmm0,[48+esi] 393 xorps xmm3,xmm7 394 movups [edi],xmm2 395 xorps xmm4,xmm1 396 movups [16+edi],xmm3 397 xorps xmm5,xmm0 398 movups [32+edi],xmm4 399 movups [48+edi],xmm5 400L$009ctr32_ret: 401 pxor xmm0,xmm0 402 pxor xmm1,xmm1 403 pxor xmm2,xmm2 404 pxor xmm3,xmm3 405 pxor xmm4,xmm4 406 movdqa [32+esp],xmm0 407 pxor xmm5,xmm5 408 movdqa [48+esp],xmm0 409 pxor xmm6,xmm6 410 movdqa [64+esp],xmm0 411 pxor xmm7,xmm7 412 mov esp,DWORD [80+esp] 413 pop edi 414 pop esi 415 pop ebx 416 pop ebp 417 ret 418align 16 419__aesni_set_encrypt_key: 420 push ebp 421 push ebx 422 test eax,eax 423 jz NEAR L$015bad_pointer 424 test edx,edx 425 jz NEAR L$015bad_pointer 426 call L$016pic 427L$016pic: 428 pop ebx 429 lea ebx,[(L$key_const-L$016pic)+ebx] 430 lea ebp,[_OPENSSL_ia32cap_P] 431 movups xmm0,[eax] 432 xorps xmm4,xmm4 433 mov ebp,DWORD [4+ebp] 434 lea edx,[16+edx] 435 and ebp,268437504 436 cmp ecx,256 437 je NEAR L$01714rounds 438 cmp ecx,128 439 jne NEAR L$018bad_keybits 440align 16 441L$01910rounds: 442 cmp ebp,268435456 443 je NEAR L$02010rounds_alt 444 mov ecx,9 445 movups [edx-16],xmm0 446db 102,15,58,223,200,1 447 call L$021key_128_cold 448db 102,15,58,223,200,2 449 call L$022key_128 450db 102,15,58,223,200,4 451 call L$022key_128 452db 102,15,58,223,200,8 453 call L$022key_128 454db 102,15,58,223,200,16 455 call L$022key_128 456db 102,15,58,223,200,32 457 call L$022key_128 458db 102,15,58,223,200,64 459 call L$022key_128 460db 102,15,58,223,200,128 461 call L$022key_128 462db 102,15,58,223,200,27 463 call L$022key_128 464db 102,15,58,223,200,54 465 call L$022key_128 466 movups [edx],xmm0 467 mov DWORD [80+edx],ecx 468 jmp NEAR L$023good_key 469align 16 470L$022key_128: 471 movups [edx],xmm0 472 lea edx,[16+edx] 473L$021key_128_cold: 474 shufps xmm4,xmm0,16 475 xorps xmm0,xmm4 476 shufps xmm4,xmm0,140 477 xorps xmm0,xmm4 478 shufps xmm1,xmm1,255 479 xorps xmm0,xmm1 480 ret 481align 16 482L$02010rounds_alt: 483 movdqa xmm5,[ebx] 484 mov ecx,8 485 movdqa xmm4,[32+ebx] 486 movdqa xmm2,xmm0 487 movdqu [edx-16],xmm0 488L$024loop_key128: 489db 102,15,56,0,197 490db 102,15,56,221,196 491 pslld xmm4,1 492 lea edx,[16+edx] 493 movdqa xmm3,xmm2 494 pslldq xmm2,4 495 pxor xmm3,xmm2 496 pslldq xmm2,4 497 pxor xmm3,xmm2 498 pslldq xmm2,4 499 pxor xmm2,xmm3 500 pxor xmm0,xmm2 501 movdqu [edx-16],xmm0 502 movdqa xmm2,xmm0 503 dec ecx 504 jnz NEAR L$024loop_key128 505 movdqa xmm4,[48+ebx] 506db 102,15,56,0,197 507db 102,15,56,221,196 508 pslld xmm4,1 509 movdqa xmm3,xmm2 510 pslldq xmm2,4 511 pxor xmm3,xmm2 512 pslldq xmm2,4 513 pxor xmm3,xmm2 514 pslldq xmm2,4 515 pxor xmm2,xmm3 516 pxor xmm0,xmm2 517 movdqu [edx],xmm0 518 movdqa xmm2,xmm0 519db 102,15,56,0,197 520db 102,15,56,221,196 521 movdqa xmm3,xmm2 522 pslldq xmm2,4 523 pxor xmm3,xmm2 524 pslldq xmm2,4 525 pxor xmm3,xmm2 526 pslldq xmm2,4 527 pxor xmm2,xmm3 528 pxor xmm0,xmm2 529 movdqu [16+edx],xmm0 530 mov ecx,9 531 mov DWORD [96+edx],ecx 532 jmp NEAR L$023good_key 533align 16 534L$01714rounds: 535 movups xmm2,[16+eax] 536 lea edx,[16+edx] 537 cmp ebp,268435456 538 je NEAR L$02514rounds_alt 539 mov ecx,13 540 movups [edx-32],xmm0 541 movups [edx-16],xmm2 542db 102,15,58,223,202,1 543 call L$026key_256a_cold 544db 102,15,58,223,200,1 545 call L$027key_256b 546db 102,15,58,223,202,2 547 call L$028key_256a 548db 102,15,58,223,200,2 549 call L$027key_256b 550db 102,15,58,223,202,4 551 call L$028key_256a 552db 102,15,58,223,200,4 553 call L$027key_256b 554db 102,15,58,223,202,8 555 call L$028key_256a 556db 102,15,58,223,200,8 557 call L$027key_256b 558db 102,15,58,223,202,16 559 call L$028key_256a 560db 102,15,58,223,200,16 561 call L$027key_256b 562db 102,15,58,223,202,32 563 call L$028key_256a 564db 102,15,58,223,200,32 565 call L$027key_256b 566db 102,15,58,223,202,64 567 call L$028key_256a 568 movups [edx],xmm0 569 mov DWORD [16+edx],ecx 570 xor eax,eax 571 jmp NEAR L$023good_key 572align 16 573L$028key_256a: 574 movups [edx],xmm2 575 lea edx,[16+edx] 576L$026key_256a_cold: 577 shufps xmm4,xmm0,16 578 xorps xmm0,xmm4 579 shufps xmm4,xmm0,140 580 xorps xmm0,xmm4 581 shufps xmm1,xmm1,255 582 xorps xmm0,xmm1 583 ret 584align 16 585L$027key_256b: 586 movups [edx],xmm0 587 lea edx,[16+edx] 588 shufps xmm4,xmm2,16 589 xorps xmm2,xmm4 590 shufps xmm4,xmm2,140 591 xorps xmm2,xmm4 592 shufps xmm1,xmm1,170 593 xorps xmm2,xmm1 594 ret 595align 16 596L$02514rounds_alt: 597 movdqa xmm5,[ebx] 598 movdqa xmm4,[32+ebx] 599 mov ecx,7 600 movdqu [edx-32],xmm0 601 movdqa xmm1,xmm2 602 movdqu [edx-16],xmm2 603L$029loop_key256: 604db 102,15,56,0,213 605db 102,15,56,221,212 606 movdqa xmm3,xmm0 607 pslldq xmm0,4 608 pxor xmm3,xmm0 609 pslldq xmm0,4 610 pxor xmm3,xmm0 611 pslldq xmm0,4 612 pxor xmm0,xmm3 613 pslld xmm4,1 614 pxor xmm0,xmm2 615 movdqu [edx],xmm0 616 dec ecx 617 jz NEAR L$030done_key256 618 pshufd xmm2,xmm0,255 619 pxor xmm3,xmm3 620db 102,15,56,221,211 621 movdqa xmm3,xmm1 622 pslldq xmm1,4 623 pxor xmm3,xmm1 624 pslldq xmm1,4 625 pxor xmm3,xmm1 626 pslldq xmm1,4 627 pxor xmm1,xmm3 628 pxor xmm2,xmm1 629 movdqu [16+edx],xmm2 630 lea edx,[32+edx] 631 movdqa xmm1,xmm2 632 jmp NEAR L$029loop_key256 633L$030done_key256: 634 mov ecx,13 635 mov DWORD [16+edx],ecx 636L$023good_key: 637 pxor xmm0,xmm0 638 pxor xmm1,xmm1 639 pxor xmm2,xmm2 640 pxor xmm3,xmm3 641 pxor xmm4,xmm4 642 pxor xmm5,xmm5 643 xor eax,eax 644 pop ebx 645 pop ebp 646 ret 647align 4 648L$015bad_pointer: 649 mov eax,-1 650 pop ebx 651 pop ebp 652 ret 653align 4 654L$018bad_keybits: 655 pxor xmm0,xmm0 656 mov eax,-2 657 pop ebx 658 pop ebp 659 ret 660global _aes_hw_set_encrypt_key 661align 16 662_aes_hw_set_encrypt_key: 663L$_aes_hw_set_encrypt_key_begin: 664 mov eax,DWORD [4+esp] 665 mov ecx,DWORD [8+esp] 666 mov edx,DWORD [12+esp] 667 call __aesni_set_encrypt_key 668 ret 669align 64 670L$key_const: 671dd 202313229,202313229,202313229,202313229 672dd 67569157,67569157,67569157,67569157 673dd 1,1,1,1 674dd 27,27,27,27 675db 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 676db 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 677db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 678db 115,108,46,111,114,103,62,0 679segment .bss 680common _OPENSSL_ia32cap_P 16 681