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