1; This file is generated from a similarly-named Perl script in the BoringSSL 2; source tree. Do not edit by hand. 3 4%ifidn __OUTPUT_FORMAT__, win64 5default rel 6%define XMMWORD 7%define YMMWORD 8%define ZMMWORD 9%define _CET_ENDBR 10 11%include "ring_core_generated/prefix_symbols_nasm.inc" 12section .text code align=64 13 14EXTERN OPENSSL_ia32cap_P 15global aes_hw_encrypt 16 17ALIGN 16 18aes_hw_encrypt: 19 20_CET_ENDBR 21%ifdef BORINGSSL_DISPATCH_TEST 22EXTERN BORINGSSL_function_hit 23 mov BYTE[((BORINGSSL_function_hit+1))],1 24%endif 25 movups xmm2,XMMWORD[rcx] 26 mov eax,DWORD[240+r8] 27 movups xmm0,XMMWORD[r8] 28 movups xmm1,XMMWORD[16+r8] 29 lea r8,[32+r8] 30 xorps xmm2,xmm0 31$L$oop_enc1_1: 32 DB 102,15,56,220,209 33 dec eax 34 movups xmm1,XMMWORD[r8] 35 lea r8,[16+r8] 36 jnz NEAR $L$oop_enc1_1 37 DB 102,15,56,221,209 38 pxor xmm0,xmm0 39 pxor xmm1,xmm1 40 movups XMMWORD[rdx],xmm2 41 pxor xmm2,xmm2 42 ret 43 44 45 46ALIGN 16 47_aesni_encrypt2: 48 49 movups xmm0,XMMWORD[rcx] 50 shl eax,4 51 movups xmm1,XMMWORD[16+rcx] 52 xorps xmm2,xmm0 53 xorps xmm3,xmm0 54 movups xmm0,XMMWORD[32+rcx] 55 lea rcx,[32+rax*1+rcx] 56 neg rax 57 add rax,16 58 59$L$enc_loop2: 60 DB 102,15,56,220,209 61 DB 102,15,56,220,217 62 movups xmm1,XMMWORD[rax*1+rcx] 63 add rax,32 64 DB 102,15,56,220,208 65 DB 102,15,56,220,216 66 movups xmm0,XMMWORD[((-16))+rax*1+rcx] 67 jnz NEAR $L$enc_loop2 68 69 DB 102,15,56,220,209 70 DB 102,15,56,220,217 71 DB 102,15,56,221,208 72 DB 102,15,56,221,216 73 ret 74 75 76 77ALIGN 16 78_aesni_encrypt3: 79 80 movups xmm0,XMMWORD[rcx] 81 shl eax,4 82 movups xmm1,XMMWORD[16+rcx] 83 xorps xmm2,xmm0 84 xorps xmm3,xmm0 85 xorps xmm4,xmm0 86 movups xmm0,XMMWORD[32+rcx] 87 lea rcx,[32+rax*1+rcx] 88 neg rax 89 add rax,16 90 91$L$enc_loop3: 92 DB 102,15,56,220,209 93 DB 102,15,56,220,217 94 DB 102,15,56,220,225 95 movups xmm1,XMMWORD[rax*1+rcx] 96 add rax,32 97 DB 102,15,56,220,208 98 DB 102,15,56,220,216 99 DB 102,15,56,220,224 100 movups xmm0,XMMWORD[((-16))+rax*1+rcx] 101 jnz NEAR $L$enc_loop3 102 103 DB 102,15,56,220,209 104 DB 102,15,56,220,217 105 DB 102,15,56,220,225 106 DB 102,15,56,221,208 107 DB 102,15,56,221,216 108 DB 102,15,56,221,224 109 ret 110 111 112 113ALIGN 16 114_aesni_encrypt4: 115 116 movups xmm0,XMMWORD[rcx] 117 shl eax,4 118 movups xmm1,XMMWORD[16+rcx] 119 xorps xmm2,xmm0 120 xorps xmm3,xmm0 121 xorps xmm4,xmm0 122 xorps xmm5,xmm0 123 movups xmm0,XMMWORD[32+rcx] 124 lea rcx,[32+rax*1+rcx] 125 neg rax 126 DB 0x0f,0x1f,0x00 127 add rax,16 128 129$L$enc_loop4: 130 DB 102,15,56,220,209 131 DB 102,15,56,220,217 132 DB 102,15,56,220,225 133 DB 102,15,56,220,233 134 movups xmm1,XMMWORD[rax*1+rcx] 135 add rax,32 136 DB 102,15,56,220,208 137 DB 102,15,56,220,216 138 DB 102,15,56,220,224 139 DB 102,15,56,220,232 140 movups xmm0,XMMWORD[((-16))+rax*1+rcx] 141 jnz NEAR $L$enc_loop4 142 143 DB 102,15,56,220,209 144 DB 102,15,56,220,217 145 DB 102,15,56,220,225 146 DB 102,15,56,220,233 147 DB 102,15,56,221,208 148 DB 102,15,56,221,216 149 DB 102,15,56,221,224 150 DB 102,15,56,221,232 151 ret 152 153 154 155ALIGN 16 156_aesni_encrypt6: 157 158 movups xmm0,XMMWORD[rcx] 159 shl eax,4 160 movups xmm1,XMMWORD[16+rcx] 161 xorps xmm2,xmm0 162 pxor xmm3,xmm0 163 pxor xmm4,xmm0 164 DB 102,15,56,220,209 165 lea rcx,[32+rax*1+rcx] 166 neg rax 167 DB 102,15,56,220,217 168 pxor xmm5,xmm0 169 pxor xmm6,xmm0 170 DB 102,15,56,220,225 171 pxor xmm7,xmm0 172 movups xmm0,XMMWORD[rax*1+rcx] 173 add rax,16 174 jmp NEAR $L$enc_loop6_enter 175ALIGN 16 176$L$enc_loop6: 177 DB 102,15,56,220,209 178 DB 102,15,56,220,217 179 DB 102,15,56,220,225 180$L$enc_loop6_enter: 181 DB 102,15,56,220,233 182 DB 102,15,56,220,241 183 DB 102,15,56,220,249 184 movups xmm1,XMMWORD[rax*1+rcx] 185 add rax,32 186 DB 102,15,56,220,208 187 DB 102,15,56,220,216 188 DB 102,15,56,220,224 189 DB 102,15,56,220,232 190 DB 102,15,56,220,240 191 DB 102,15,56,220,248 192 movups xmm0,XMMWORD[((-16))+rax*1+rcx] 193 jnz NEAR $L$enc_loop6 194 195 DB 102,15,56,220,209 196 DB 102,15,56,220,217 197 DB 102,15,56,220,225 198 DB 102,15,56,220,233 199 DB 102,15,56,220,241 200 DB 102,15,56,220,249 201 DB 102,15,56,221,208 202 DB 102,15,56,221,216 203 DB 102,15,56,221,224 204 DB 102,15,56,221,232 205 DB 102,15,56,221,240 206 DB 102,15,56,221,248 207 ret 208 209 210 211ALIGN 16 212_aesni_encrypt8: 213 214 movups xmm0,XMMWORD[rcx] 215 shl eax,4 216 movups xmm1,XMMWORD[16+rcx] 217 xorps xmm2,xmm0 218 xorps xmm3,xmm0 219 pxor xmm4,xmm0 220 pxor xmm5,xmm0 221 pxor xmm6,xmm0 222 lea rcx,[32+rax*1+rcx] 223 neg rax 224 DB 102,15,56,220,209 225 pxor xmm7,xmm0 226 pxor xmm8,xmm0 227 DB 102,15,56,220,217 228 pxor xmm9,xmm0 229 movups xmm0,XMMWORD[rax*1+rcx] 230 add rax,16 231 jmp NEAR $L$enc_loop8_inner 232ALIGN 16 233$L$enc_loop8: 234 DB 102,15,56,220,209 235 DB 102,15,56,220,217 236$L$enc_loop8_inner: 237 DB 102,15,56,220,225 238 DB 102,15,56,220,233 239 DB 102,15,56,220,241 240 DB 102,15,56,220,249 241 DB 102,68,15,56,220,193 242 DB 102,68,15,56,220,201 243$L$enc_loop8_enter: 244 movups xmm1,XMMWORD[rax*1+rcx] 245 add rax,32 246 DB 102,15,56,220,208 247 DB 102,15,56,220,216 248 DB 102,15,56,220,224 249 DB 102,15,56,220,232 250 DB 102,15,56,220,240 251 DB 102,15,56,220,248 252 DB 102,68,15,56,220,192 253 DB 102,68,15,56,220,200 254 movups xmm0,XMMWORD[((-16))+rax*1+rcx] 255 jnz NEAR $L$enc_loop8 256 257 DB 102,15,56,220,209 258 DB 102,15,56,220,217 259 DB 102,15,56,220,225 260 DB 102,15,56,220,233 261 DB 102,15,56,220,241 262 DB 102,15,56,220,249 263 DB 102,68,15,56,220,193 264 DB 102,68,15,56,220,201 265 DB 102,15,56,221,208 266 DB 102,15,56,221,216 267 DB 102,15,56,221,224 268 DB 102,15,56,221,232 269 DB 102,15,56,221,240 270 DB 102,15,56,221,248 271 DB 102,68,15,56,221,192 272 DB 102,68,15,56,221,200 273 ret 274 275 276global aes_hw_ctr32_encrypt_blocks 277 278ALIGN 16 279aes_hw_ctr32_encrypt_blocks: 280 mov QWORD[8+rsp],rdi ;WIN64 prologue 281 mov QWORD[16+rsp],rsi 282 mov rax,rsp 283$L$SEH_begin_aes_hw_ctr32_encrypt_blocks: 284 mov rdi,rcx 285 mov rsi,rdx 286 mov rdx,r8 287 mov rcx,r9 288 mov r8,QWORD[40+rsp] 289 290 291 292_CET_ENDBR 293%ifdef BORINGSSL_DISPATCH_TEST 294 mov BYTE[BORINGSSL_function_hit],1 295%endif 296 cmp rdx,1 297 jne NEAR $L$ctr32_bulk 298 299 300 301 movups xmm2,XMMWORD[r8] 302 movups xmm3,XMMWORD[rdi] 303 mov edx,DWORD[240+rcx] 304 movups xmm0,XMMWORD[rcx] 305 movups xmm1,XMMWORD[16+rcx] 306 lea rcx,[32+rcx] 307 xorps xmm2,xmm0 308$L$oop_enc1_2: 309 DB 102,15,56,220,209 310 dec edx 311 movups xmm1,XMMWORD[rcx] 312 lea rcx,[16+rcx] 313 jnz NEAR $L$oop_enc1_2 314 DB 102,15,56,221,209 315 pxor xmm0,xmm0 316 pxor xmm1,xmm1 317 xorps xmm2,xmm3 318 pxor xmm3,xmm3 319 movups XMMWORD[rsi],xmm2 320 xorps xmm2,xmm2 321 jmp NEAR $L$ctr32_epilogue 322 323ALIGN 16 324$L$ctr32_bulk: 325 lea r11,[rsp] 326 327 push rbp 328 329 sub rsp,288 330 and rsp,-16 331 movaps XMMWORD[(-168)+r11],xmm6 332 movaps XMMWORD[(-152)+r11],xmm7 333 movaps XMMWORD[(-136)+r11],xmm8 334 movaps XMMWORD[(-120)+r11],xmm9 335 movaps XMMWORD[(-104)+r11],xmm10 336 movaps XMMWORD[(-88)+r11],xmm11 337 movaps XMMWORD[(-72)+r11],xmm12 338 movaps XMMWORD[(-56)+r11],xmm13 339 movaps XMMWORD[(-40)+r11],xmm14 340 movaps XMMWORD[(-24)+r11],xmm15 341$L$ctr32_body: 342 343 344 345 346 movdqu xmm2,XMMWORD[r8] 347 movdqu xmm0,XMMWORD[rcx] 348 mov r8d,DWORD[12+r8] 349 pxor xmm2,xmm0 350 mov ebp,DWORD[12+rcx] 351 movdqa XMMWORD[rsp],xmm2 352 bswap r8d 353 movdqa xmm3,xmm2 354 movdqa xmm4,xmm2 355 movdqa xmm5,xmm2 356 movdqa XMMWORD[64+rsp],xmm2 357 movdqa XMMWORD[80+rsp],xmm2 358 movdqa XMMWORD[96+rsp],xmm2 359 mov r10,rdx 360 movdqa XMMWORD[112+rsp],xmm2 361 362 lea rax,[1+r8] 363 lea rdx,[2+r8] 364 bswap eax 365 bswap edx 366 xor eax,ebp 367 xor edx,ebp 368DB 102,15,58,34,216,3 369 lea rax,[3+r8] 370 movdqa XMMWORD[16+rsp],xmm3 371DB 102,15,58,34,226,3 372 bswap eax 373 mov rdx,r10 374 lea r10,[4+r8] 375 movdqa XMMWORD[32+rsp],xmm4 376 xor eax,ebp 377 bswap r10d 378DB 102,15,58,34,232,3 379 xor r10d,ebp 380 movdqa XMMWORD[48+rsp],xmm5 381 lea r9,[5+r8] 382 mov DWORD[((64+12))+rsp],r10d 383 bswap r9d 384 lea r10,[6+r8] 385 mov eax,DWORD[240+rcx] 386 xor r9d,ebp 387 bswap r10d 388 mov DWORD[((80+12))+rsp],r9d 389 xor r10d,ebp 390 lea r9,[7+r8] 391 mov DWORD[((96+12))+rsp],r10d 392 bswap r9d 393 lea r10,[OPENSSL_ia32cap_P] 394 mov r10d,DWORD[4+r10] 395 xor r9d,ebp 396 and r10d,71303168 397 mov DWORD[((112+12))+rsp],r9d 398 399 movups xmm1,XMMWORD[16+rcx] 400 401 movdqa xmm6,XMMWORD[64+rsp] 402 movdqa xmm7,XMMWORD[80+rsp] 403 404 cmp rdx,8 405 jb NEAR $L$ctr32_tail 406 407 sub rdx,6 408 cmp r10d,4194304 409 je NEAR $L$ctr32_6x 410 411 lea rcx,[128+rcx] 412 sub rdx,2 413 jmp NEAR $L$ctr32_loop8 414 415ALIGN 16 416$L$ctr32_6x: 417 shl eax,4 418 mov r10d,48 419 bswap ebp 420 lea rcx,[32+rax*1+rcx] 421 sub r10,rax 422 jmp NEAR $L$ctr32_loop6 423 424ALIGN 16 425$L$ctr32_loop6: 426 add r8d,6 427 movups xmm0,XMMWORD[((-48))+r10*1+rcx] 428 DB 102,15,56,220,209 429 mov eax,r8d 430 xor eax,ebp 431 DB 102,15,56,220,217 432 DB 0x0f,0x38,0xf1,0x44,0x24,12 433 lea eax,[1+r8] 434 DB 102,15,56,220,225 435 xor eax,ebp 436 DB 0x0f,0x38,0xf1,0x44,0x24,28 437 DB 102,15,56,220,233 438 lea eax,[2+r8] 439 xor eax,ebp 440 DB 102,15,56,220,241 441 DB 0x0f,0x38,0xf1,0x44,0x24,44 442 lea eax,[3+r8] 443 DB 102,15,56,220,249 444 movups xmm1,XMMWORD[((-32))+r10*1+rcx] 445 xor eax,ebp 446 447 DB 102,15,56,220,208 448 DB 0x0f,0x38,0xf1,0x44,0x24,60 449 lea eax,[4+r8] 450 DB 102,15,56,220,216 451 xor eax,ebp 452 DB 0x0f,0x38,0xf1,0x44,0x24,76 453 DB 102,15,56,220,224 454 lea eax,[5+r8] 455 xor eax,ebp 456 DB 102,15,56,220,232 457 DB 0x0f,0x38,0xf1,0x44,0x24,92 458 mov rax,r10 459 DB 102,15,56,220,240 460 DB 102,15,56,220,248 461 movups xmm0,XMMWORD[((-16))+r10*1+rcx] 462 463 call $L$enc_loop6 464 465 movdqu xmm8,XMMWORD[rdi] 466 movdqu xmm9,XMMWORD[16+rdi] 467 movdqu xmm10,XMMWORD[32+rdi] 468 movdqu xmm11,XMMWORD[48+rdi] 469 movdqu xmm12,XMMWORD[64+rdi] 470 movdqu xmm13,XMMWORD[80+rdi] 471 lea rdi,[96+rdi] 472 movups xmm1,XMMWORD[((-64))+r10*1+rcx] 473 pxor xmm8,xmm2 474 movaps xmm2,XMMWORD[rsp] 475 pxor xmm9,xmm3 476 movaps xmm3,XMMWORD[16+rsp] 477 pxor xmm10,xmm4 478 movaps xmm4,XMMWORD[32+rsp] 479 pxor xmm11,xmm5 480 movaps xmm5,XMMWORD[48+rsp] 481 pxor xmm12,xmm6 482 movaps xmm6,XMMWORD[64+rsp] 483 pxor xmm13,xmm7 484 movaps xmm7,XMMWORD[80+rsp] 485 movdqu XMMWORD[rsi],xmm8 486 movdqu XMMWORD[16+rsi],xmm9 487 movdqu XMMWORD[32+rsi],xmm10 488 movdqu XMMWORD[48+rsi],xmm11 489 movdqu XMMWORD[64+rsi],xmm12 490 movdqu XMMWORD[80+rsi],xmm13 491 lea rsi,[96+rsi] 492 493 sub rdx,6 494 jnc NEAR $L$ctr32_loop6 495 496 add rdx,6 497 jz NEAR $L$ctr32_done 498 499 lea eax,[((-48))+r10] 500 lea rcx,[((-80))+r10*1+rcx] 501 neg eax 502 shr eax,4 503 jmp NEAR $L$ctr32_tail 504 505ALIGN 32 506$L$ctr32_loop8: 507 add r8d,8 508 movdqa xmm8,XMMWORD[96+rsp] 509 DB 102,15,56,220,209 510 mov r9d,r8d 511 movdqa xmm9,XMMWORD[112+rsp] 512 DB 102,15,56,220,217 513 bswap r9d 514 movups xmm0,XMMWORD[((32-128))+rcx] 515 DB 102,15,56,220,225 516 xor r9d,ebp 517 nop 518 DB 102,15,56,220,233 519 mov DWORD[((0+12))+rsp],r9d 520 lea r9,[1+r8] 521 DB 102,15,56,220,241 522 DB 102,15,56,220,249 523 DB 102,68,15,56,220,193 524 DB 102,68,15,56,220,201 525 movups xmm1,XMMWORD[((48-128))+rcx] 526 bswap r9d 527 DB 102,15,56,220,208 528 DB 102,15,56,220,216 529 xor r9d,ebp 530 DB 0x66,0x90 531 DB 102,15,56,220,224 532 DB 102,15,56,220,232 533 mov DWORD[((16+12))+rsp],r9d 534 lea r9,[2+r8] 535 DB 102,15,56,220,240 536 DB 102,15,56,220,248 537 DB 102,68,15,56,220,192 538 DB 102,68,15,56,220,200 539 movups xmm0,XMMWORD[((64-128))+rcx] 540 bswap r9d 541 DB 102,15,56,220,209 542 DB 102,15,56,220,217 543 xor r9d,ebp 544 DB 0x66,0x90 545 DB 102,15,56,220,225 546 DB 102,15,56,220,233 547 mov DWORD[((32+12))+rsp],r9d 548 lea r9,[3+r8] 549 DB 102,15,56,220,241 550 DB 102,15,56,220,249 551 DB 102,68,15,56,220,193 552 DB 102,68,15,56,220,201 553 movups xmm1,XMMWORD[((80-128))+rcx] 554 bswap r9d 555 DB 102,15,56,220,208 556 DB 102,15,56,220,216 557 xor r9d,ebp 558 DB 0x66,0x90 559 DB 102,15,56,220,224 560 DB 102,15,56,220,232 561 mov DWORD[((48+12))+rsp],r9d 562 lea r9,[4+r8] 563 DB 102,15,56,220,240 564 DB 102,15,56,220,248 565 DB 102,68,15,56,220,192 566 DB 102,68,15,56,220,200 567 movups xmm0,XMMWORD[((96-128))+rcx] 568 bswap r9d 569 DB 102,15,56,220,209 570 DB 102,15,56,220,217 571 xor r9d,ebp 572 DB 0x66,0x90 573 DB 102,15,56,220,225 574 DB 102,15,56,220,233 575 mov DWORD[((64+12))+rsp],r9d 576 lea r9,[5+r8] 577 DB 102,15,56,220,241 578 DB 102,15,56,220,249 579 DB 102,68,15,56,220,193 580 DB 102,68,15,56,220,201 581 movups xmm1,XMMWORD[((112-128))+rcx] 582 bswap r9d 583 DB 102,15,56,220,208 584 DB 102,15,56,220,216 585 xor r9d,ebp 586 DB 0x66,0x90 587 DB 102,15,56,220,224 588 DB 102,15,56,220,232 589 mov DWORD[((80+12))+rsp],r9d 590 lea r9,[6+r8] 591 DB 102,15,56,220,240 592 DB 102,15,56,220,248 593 DB 102,68,15,56,220,192 594 DB 102,68,15,56,220,200 595 movups xmm0,XMMWORD[((128-128))+rcx] 596 bswap r9d 597 DB 102,15,56,220,209 598 DB 102,15,56,220,217 599 xor r9d,ebp 600 DB 0x66,0x90 601 DB 102,15,56,220,225 602 DB 102,15,56,220,233 603 mov DWORD[((96+12))+rsp],r9d 604 lea r9,[7+r8] 605 DB 102,15,56,220,241 606 DB 102,15,56,220,249 607 DB 102,68,15,56,220,193 608 DB 102,68,15,56,220,201 609 movups xmm1,XMMWORD[((144-128))+rcx] 610 bswap r9d 611 DB 102,15,56,220,208 612 DB 102,15,56,220,216 613 DB 102,15,56,220,224 614 xor r9d,ebp 615 movdqu xmm10,XMMWORD[rdi] 616 DB 102,15,56,220,232 617 mov DWORD[((112+12))+rsp],r9d 618 cmp eax,11 619 DB 102,15,56,220,240 620 DB 102,15,56,220,248 621 DB 102,68,15,56,220,192 622 DB 102,68,15,56,220,200 623 movups xmm0,XMMWORD[((160-128))+rcx] 624 625 jb NEAR $L$ctr32_enc_done 626 627 DB 102,15,56,220,209 628 DB 102,15,56,220,217 629 DB 102,15,56,220,225 630 DB 102,15,56,220,233 631 DB 102,15,56,220,241 632 DB 102,15,56,220,249 633 DB 102,68,15,56,220,193 634 DB 102,68,15,56,220,201 635 movups xmm1,XMMWORD[((176-128))+rcx] 636 637 DB 102,15,56,220,208 638 DB 102,15,56,220,216 639 DB 102,15,56,220,224 640 DB 102,15,56,220,232 641 DB 102,15,56,220,240 642 DB 102,15,56,220,248 643 DB 102,68,15,56,220,192 644 DB 102,68,15,56,220,200 645 movups xmm0,XMMWORD[((192-128))+rcx] 646 647 648 649 DB 102,15,56,220,209 650 DB 102,15,56,220,217 651 DB 102,15,56,220,225 652 DB 102,15,56,220,233 653 DB 102,15,56,220,241 654 DB 102,15,56,220,249 655 DB 102,68,15,56,220,193 656 DB 102,68,15,56,220,201 657 movups xmm1,XMMWORD[((208-128))+rcx] 658 659 DB 102,15,56,220,208 660 DB 102,15,56,220,216 661 DB 102,15,56,220,224 662 DB 102,15,56,220,232 663 DB 102,15,56,220,240 664 DB 102,15,56,220,248 665 DB 102,68,15,56,220,192 666 DB 102,68,15,56,220,200 667 movups xmm0,XMMWORD[((224-128))+rcx] 668 jmp NEAR $L$ctr32_enc_done 669 670ALIGN 16 671$L$ctr32_enc_done: 672 movdqu xmm11,XMMWORD[16+rdi] 673 pxor xmm10,xmm0 674 movdqu xmm12,XMMWORD[32+rdi] 675 pxor xmm11,xmm0 676 movdqu xmm13,XMMWORD[48+rdi] 677 pxor xmm12,xmm0 678 movdqu xmm14,XMMWORD[64+rdi] 679 pxor xmm13,xmm0 680 movdqu xmm15,XMMWORD[80+rdi] 681 pxor xmm14,xmm0 682 prefetcht0 [448+rdi] 683 prefetcht0 [512+rdi] 684 pxor xmm15,xmm0 685 DB 102,15,56,220,209 686 DB 102,15,56,220,217 687 DB 102,15,56,220,225 688 DB 102,15,56,220,233 689 DB 102,15,56,220,241 690 DB 102,15,56,220,249 691 DB 102,68,15,56,220,193 692 DB 102,68,15,56,220,201 693 movdqu xmm1,XMMWORD[96+rdi] 694 lea rdi,[128+rdi] 695 696 DB 102,65,15,56,221,210 697 pxor xmm1,xmm0 698 movdqu xmm10,XMMWORD[((112-128))+rdi] 699 DB 102,65,15,56,221,219 700 pxor xmm10,xmm0 701 movdqa xmm11,XMMWORD[rsp] 702 DB 102,65,15,56,221,228 703 DB 102,65,15,56,221,237 704 movdqa xmm12,XMMWORD[16+rsp] 705 movdqa xmm13,XMMWORD[32+rsp] 706 DB 102,65,15,56,221,246 707 DB 102,65,15,56,221,255 708 movdqa xmm14,XMMWORD[48+rsp] 709 movdqa xmm15,XMMWORD[64+rsp] 710 DB 102,68,15,56,221,193 711 movdqa xmm0,XMMWORD[80+rsp] 712 movups xmm1,XMMWORD[((16-128))+rcx] 713 DB 102,69,15,56,221,202 714 715 movups XMMWORD[rsi],xmm2 716 movdqa xmm2,xmm11 717 movups XMMWORD[16+rsi],xmm3 718 movdqa xmm3,xmm12 719 movups XMMWORD[32+rsi],xmm4 720 movdqa xmm4,xmm13 721 movups XMMWORD[48+rsi],xmm5 722 movdqa xmm5,xmm14 723 movups XMMWORD[64+rsi],xmm6 724 movdqa xmm6,xmm15 725 movups XMMWORD[80+rsi],xmm7 726 movdqa xmm7,xmm0 727 movups XMMWORD[96+rsi],xmm8 728 movups XMMWORD[112+rsi],xmm9 729 lea rsi,[128+rsi] 730 731 sub rdx,8 732 jnc NEAR $L$ctr32_loop8 733 734 add rdx,8 735 jz NEAR $L$ctr32_done 736 lea rcx,[((-128))+rcx] 737 738$L$ctr32_tail: 739 740 741 lea rcx,[16+rcx] 742 cmp rdx,4 743 jb NEAR $L$ctr32_loop3 744 je NEAR $L$ctr32_loop4 745 746 747 shl eax,4 748 movdqa xmm8,XMMWORD[96+rsp] 749 pxor xmm9,xmm9 750 751 movups xmm0,XMMWORD[16+rcx] 752 DB 102,15,56,220,209 753 DB 102,15,56,220,217 754 lea rcx,[((32-16))+rax*1+rcx] 755 neg rax 756 DB 102,15,56,220,225 757 add rax,16 758 movups xmm10,XMMWORD[rdi] 759 DB 102,15,56,220,233 760 DB 102,15,56,220,241 761 movups xmm11,XMMWORD[16+rdi] 762 movups xmm12,XMMWORD[32+rdi] 763 DB 102,15,56,220,249 764 DB 102,68,15,56,220,193 765 766 call $L$enc_loop8_enter 767 768 movdqu xmm13,XMMWORD[48+rdi] 769 pxor xmm2,xmm10 770 movdqu xmm10,XMMWORD[64+rdi] 771 pxor xmm3,xmm11 772 movdqu XMMWORD[rsi],xmm2 773 pxor xmm4,xmm12 774 movdqu XMMWORD[16+rsi],xmm3 775 pxor xmm5,xmm13 776 movdqu XMMWORD[32+rsi],xmm4 777 pxor xmm6,xmm10 778 movdqu XMMWORD[48+rsi],xmm5 779 movdqu XMMWORD[64+rsi],xmm6 780 cmp rdx,6 781 jb NEAR $L$ctr32_done 782 783 movups xmm11,XMMWORD[80+rdi] 784 xorps xmm7,xmm11 785 movups XMMWORD[80+rsi],xmm7 786 je NEAR $L$ctr32_done 787 788 movups xmm12,XMMWORD[96+rdi] 789 xorps xmm8,xmm12 790 movups XMMWORD[96+rsi],xmm8 791 jmp NEAR $L$ctr32_done 792 793ALIGN 32 794$L$ctr32_loop4: 795 DB 102,15,56,220,209 796 lea rcx,[16+rcx] 797 dec eax 798 DB 102,15,56,220,217 799 DB 102,15,56,220,225 800 DB 102,15,56,220,233 801 movups xmm1,XMMWORD[rcx] 802 jnz NEAR $L$ctr32_loop4 803 DB 102,15,56,221,209 804 DB 102,15,56,221,217 805 movups xmm10,XMMWORD[rdi] 806 movups xmm11,XMMWORD[16+rdi] 807 DB 102,15,56,221,225 808 DB 102,15,56,221,233 809 movups xmm12,XMMWORD[32+rdi] 810 movups xmm13,XMMWORD[48+rdi] 811 812 xorps xmm2,xmm10 813 movups XMMWORD[rsi],xmm2 814 xorps xmm3,xmm11 815 movups XMMWORD[16+rsi],xmm3 816 pxor xmm4,xmm12 817 movdqu XMMWORD[32+rsi],xmm4 818 pxor xmm5,xmm13 819 movdqu XMMWORD[48+rsi],xmm5 820 jmp NEAR $L$ctr32_done 821 822ALIGN 32 823$L$ctr32_loop3: 824 DB 102,15,56,220,209 825 lea rcx,[16+rcx] 826 dec eax 827 DB 102,15,56,220,217 828 DB 102,15,56,220,225 829 movups xmm1,XMMWORD[rcx] 830 jnz NEAR $L$ctr32_loop3 831 DB 102,15,56,221,209 832 DB 102,15,56,221,217 833 DB 102,15,56,221,225 834 835 movups xmm10,XMMWORD[rdi] 836 xorps xmm2,xmm10 837 movups XMMWORD[rsi],xmm2 838 cmp rdx,2 839 jb NEAR $L$ctr32_done 840 841 movups xmm11,XMMWORD[16+rdi] 842 xorps xmm3,xmm11 843 movups XMMWORD[16+rsi],xmm3 844 je NEAR $L$ctr32_done 845 846 movups xmm12,XMMWORD[32+rdi] 847 xorps xmm4,xmm12 848 movups XMMWORD[32+rsi],xmm4 849 850$L$ctr32_done: 851 xorps xmm0,xmm0 852 xor ebp,ebp 853 pxor xmm1,xmm1 854 pxor xmm2,xmm2 855 pxor xmm3,xmm3 856 pxor xmm4,xmm4 857 pxor xmm5,xmm5 858 movaps xmm6,XMMWORD[((-168))+r11] 859 movaps XMMWORD[(-168)+r11],xmm0 860 movaps xmm7,XMMWORD[((-152))+r11] 861 movaps XMMWORD[(-152)+r11],xmm0 862 movaps xmm8,XMMWORD[((-136))+r11] 863 movaps XMMWORD[(-136)+r11],xmm0 864 movaps xmm9,XMMWORD[((-120))+r11] 865 movaps XMMWORD[(-120)+r11],xmm0 866 movaps xmm10,XMMWORD[((-104))+r11] 867 movaps XMMWORD[(-104)+r11],xmm0 868 movaps xmm11,XMMWORD[((-88))+r11] 869 movaps XMMWORD[(-88)+r11],xmm0 870 movaps xmm12,XMMWORD[((-72))+r11] 871 movaps XMMWORD[(-72)+r11],xmm0 872 movaps xmm13,XMMWORD[((-56))+r11] 873 movaps XMMWORD[(-56)+r11],xmm0 874 movaps xmm14,XMMWORD[((-40))+r11] 875 movaps XMMWORD[(-40)+r11],xmm0 876 movaps xmm15,XMMWORD[((-24))+r11] 877 movaps XMMWORD[(-24)+r11],xmm0 878 movaps XMMWORD[rsp],xmm0 879 movaps XMMWORD[16+rsp],xmm0 880 movaps XMMWORD[32+rsp],xmm0 881 movaps XMMWORD[48+rsp],xmm0 882 movaps XMMWORD[64+rsp],xmm0 883 movaps XMMWORD[80+rsp],xmm0 884 movaps XMMWORD[96+rsp],xmm0 885 movaps XMMWORD[112+rsp],xmm0 886 mov rbp,QWORD[((-8))+r11] 887 888 lea rsp,[r11] 889 890$L$ctr32_epilogue: 891 mov rdi,QWORD[8+rsp] ;WIN64 epilogue 892 mov rsi,QWORD[16+rsp] 893 ret 894 895$L$SEH_end_aes_hw_ctr32_encrypt_blocks: 896global aes_hw_set_encrypt_key 897 898ALIGN 16 899aes_hw_set_encrypt_key: 900__aesni_set_encrypt_key: 901 902_CET_ENDBR 903%ifdef BORINGSSL_DISPATCH_TEST 904 mov BYTE[((BORINGSSL_function_hit+3))],1 905%endif 906 DB 0x48,0x83,0xEC,0x08 907 908 mov rax,-1 909 test rcx,rcx 910 jz NEAR $L$enc_key_ret 911 test r8,r8 912 jz NEAR $L$enc_key_ret 913 914 movups xmm0,XMMWORD[rcx] 915 xorps xmm4,xmm4 916 lea r10,[OPENSSL_ia32cap_P] 917 mov r10d,DWORD[4+r10] 918 and r10d,268437504 919 lea rax,[16+r8] 920 cmp edx,256 921 je NEAR $L$14rounds 922 923 cmp edx,128 924 jne NEAR $L$bad_keybits 925 926$L$10rounds: 927 mov edx,9 928 cmp r10d,268435456 929 je NEAR $L$10rounds_alt 930 931 movups XMMWORD[r8],xmm0 932 DB 102,15,58,223,200,1 933 call $L$key_expansion_128_cold 934 DB 102,15,58,223,200,2 935 call $L$key_expansion_128 936 DB 102,15,58,223,200,4 937 call $L$key_expansion_128 938 DB 102,15,58,223,200,8 939 call $L$key_expansion_128 940 DB 102,15,58,223,200,16 941 call $L$key_expansion_128 942 DB 102,15,58,223,200,32 943 call $L$key_expansion_128 944 DB 102,15,58,223,200,64 945 call $L$key_expansion_128 946 DB 102,15,58,223,200,128 947 call $L$key_expansion_128 948 DB 102,15,58,223,200,27 949 call $L$key_expansion_128 950 DB 102,15,58,223,200,54 951 call $L$key_expansion_128 952 movups XMMWORD[rax],xmm0 953 mov DWORD[80+rax],edx 954 xor eax,eax 955 jmp NEAR $L$enc_key_ret 956 957ALIGN 16 958$L$10rounds_alt: 959 movdqa xmm5,XMMWORD[$L$key_rotate] 960 mov r10d,8 961 movdqa xmm4,XMMWORD[$L$key_rcon1] 962 movdqa xmm2,xmm0 963 movdqu XMMWORD[r8],xmm0 964 jmp NEAR $L$oop_key128 965 966ALIGN 16 967$L$oop_key128: 968DB 102,15,56,0,197 969 DB 102,15,56,221,196 970 pslld xmm4,1 971 lea rax,[16+rax] 972 973 movdqa xmm3,xmm2 974 pslldq xmm2,4 975 pxor xmm3,xmm2 976 pslldq xmm2,4 977 pxor xmm3,xmm2 978 pslldq xmm2,4 979 pxor xmm2,xmm3 980 981 pxor xmm0,xmm2 982 movdqu XMMWORD[(-16)+rax],xmm0 983 movdqa xmm2,xmm0 984 985 dec r10d 986 jnz NEAR $L$oop_key128 987 988 movdqa xmm4,XMMWORD[$L$key_rcon1b] 989 990DB 102,15,56,0,197 991 DB 102,15,56,221,196 992 pslld xmm4,1 993 994 movdqa xmm3,xmm2 995 pslldq xmm2,4 996 pxor xmm3,xmm2 997 pslldq xmm2,4 998 pxor xmm3,xmm2 999 pslldq xmm2,4 1000 pxor xmm2,xmm3 1001 1002 pxor xmm0,xmm2 1003 movdqu XMMWORD[rax],xmm0 1004 1005 movdqa xmm2,xmm0 1006DB 102,15,56,0,197 1007 DB 102,15,56,221,196 1008 1009 movdqa xmm3,xmm2 1010 pslldq xmm2,4 1011 pxor xmm3,xmm2 1012 pslldq xmm2,4 1013 pxor xmm3,xmm2 1014 pslldq xmm2,4 1015 pxor xmm2,xmm3 1016 1017 pxor xmm0,xmm2 1018 movdqu XMMWORD[16+rax],xmm0 1019 1020 mov DWORD[96+rax],edx 1021 xor eax,eax 1022 jmp NEAR $L$enc_key_ret 1023 1024 1025 1026ALIGN 16 1027$L$14rounds: 1028 movups xmm2,XMMWORD[16+rcx] 1029 mov edx,13 1030 lea rax,[16+rax] 1031 cmp r10d,268435456 1032 je NEAR $L$14rounds_alt 1033 1034 movups XMMWORD[r8],xmm0 1035 movups XMMWORD[16+r8],xmm2 1036 DB 102,15,58,223,202,1 1037 call $L$key_expansion_256a_cold 1038 DB 102,15,58,223,200,1 1039 call $L$key_expansion_256b 1040 DB 102,15,58,223,202,2 1041 call $L$key_expansion_256a 1042 DB 102,15,58,223,200,2 1043 call $L$key_expansion_256b 1044 DB 102,15,58,223,202,4 1045 call $L$key_expansion_256a 1046 DB 102,15,58,223,200,4 1047 call $L$key_expansion_256b 1048 DB 102,15,58,223,202,8 1049 call $L$key_expansion_256a 1050 DB 102,15,58,223,200,8 1051 call $L$key_expansion_256b 1052 DB 102,15,58,223,202,16 1053 call $L$key_expansion_256a 1054 DB 102,15,58,223,200,16 1055 call $L$key_expansion_256b 1056 DB 102,15,58,223,202,32 1057 call $L$key_expansion_256a 1058 DB 102,15,58,223,200,32 1059 call $L$key_expansion_256b 1060 DB 102,15,58,223,202,64 1061 call $L$key_expansion_256a 1062 movups XMMWORD[rax],xmm0 1063 mov DWORD[16+rax],edx 1064 xor rax,rax 1065 jmp NEAR $L$enc_key_ret 1066 1067ALIGN 16 1068$L$14rounds_alt: 1069 movdqa xmm5,XMMWORD[$L$key_rotate] 1070 movdqa xmm4,XMMWORD[$L$key_rcon1] 1071 mov r10d,7 1072 movdqu XMMWORD[r8],xmm0 1073 movdqa xmm1,xmm2 1074 movdqu XMMWORD[16+r8],xmm2 1075 jmp NEAR $L$oop_key256 1076 1077ALIGN 16 1078$L$oop_key256: 1079DB 102,15,56,0,213 1080 DB 102,15,56,221,212 1081 1082 movdqa xmm3,xmm0 1083 pslldq xmm0,4 1084 pxor xmm3,xmm0 1085 pslldq xmm0,4 1086 pxor xmm3,xmm0 1087 pslldq xmm0,4 1088 pxor xmm0,xmm3 1089 pslld xmm4,1 1090 1091 pxor xmm0,xmm2 1092 movdqu XMMWORD[rax],xmm0 1093 1094 dec r10d 1095 jz NEAR $L$done_key256 1096 1097 pshufd xmm2,xmm0,0xff 1098 pxor xmm3,xmm3 1099 DB 102,15,56,221,211 1100 1101 movdqa xmm3,xmm1 1102 pslldq xmm1,4 1103 pxor xmm3,xmm1 1104 pslldq xmm1,4 1105 pxor xmm3,xmm1 1106 pslldq xmm1,4 1107 pxor xmm1,xmm3 1108 1109 pxor xmm2,xmm1 1110 movdqu XMMWORD[16+rax],xmm2 1111 lea rax,[32+rax] 1112 movdqa xmm1,xmm2 1113 1114 jmp NEAR $L$oop_key256 1115 1116$L$done_key256: 1117 mov DWORD[16+rax],edx 1118 xor eax,eax 1119 jmp NEAR $L$enc_key_ret 1120 1121ALIGN 16 1122$L$bad_keybits: 1123 mov rax,-2 1124$L$enc_key_ret: 1125 pxor xmm0,xmm0 1126 pxor xmm1,xmm1 1127 pxor xmm2,xmm2 1128 pxor xmm3,xmm3 1129 pxor xmm4,xmm4 1130 pxor xmm5,xmm5 1131 add rsp,8 1132 1133 ret 1134 1135$L$SEH_end_set_encrypt_key: 1136 1137ALIGN 16 1138$L$key_expansion_128: 1139 movups XMMWORD[rax],xmm0 1140 lea rax,[16+rax] 1141$L$key_expansion_128_cold: 1142 shufps xmm4,xmm0,16 1143 xorps xmm0,xmm4 1144 shufps xmm4,xmm0,140 1145 xorps xmm0,xmm4 1146 shufps xmm1,xmm1,255 1147 xorps xmm0,xmm1 1148 ret 1149 1150ALIGN 16 1151$L$key_expansion_192a: 1152 movups XMMWORD[rax],xmm0 1153 lea rax,[16+rax] 1154$L$key_expansion_192a_cold: 1155 movaps xmm5,xmm2 1156$L$key_expansion_192b_warm: 1157 shufps xmm4,xmm0,16 1158 movdqa xmm3,xmm2 1159 xorps xmm0,xmm4 1160 shufps xmm4,xmm0,140 1161 pslldq xmm3,4 1162 xorps xmm0,xmm4 1163 pshufd xmm1,xmm1,85 1164 pxor xmm2,xmm3 1165 pxor xmm0,xmm1 1166 pshufd xmm3,xmm0,255 1167 pxor xmm2,xmm3 1168 ret 1169 1170ALIGN 16 1171$L$key_expansion_192b: 1172 movaps xmm3,xmm0 1173 shufps xmm5,xmm0,68 1174 movups XMMWORD[rax],xmm5 1175 shufps xmm3,xmm2,78 1176 movups XMMWORD[16+rax],xmm3 1177 lea rax,[32+rax] 1178 jmp NEAR $L$key_expansion_192b_warm 1179 1180ALIGN 16 1181$L$key_expansion_256a: 1182 movups XMMWORD[rax],xmm2 1183 lea rax,[16+rax] 1184$L$key_expansion_256a_cold: 1185 shufps xmm4,xmm0,16 1186 xorps xmm0,xmm4 1187 shufps xmm4,xmm0,140 1188 xorps xmm0,xmm4 1189 shufps xmm1,xmm1,255 1190 xorps xmm0,xmm1 1191 ret 1192 1193ALIGN 16 1194$L$key_expansion_256b: 1195 movups XMMWORD[rax],xmm0 1196 lea rax,[16+rax] 1197 1198 shufps xmm4,xmm2,16 1199 xorps xmm2,xmm4 1200 shufps xmm4,xmm2,140 1201 xorps xmm2,xmm4 1202 shufps xmm1,xmm1,170 1203 xorps xmm2,xmm1 1204 ret 1205 1206 1207section .rdata rdata align=8 1208ALIGN 64 1209$L$bswap_mask: 1210 DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 1211$L$increment32: 1212 DD 6,6,6,0 1213$L$increment64: 1214 DD 1,0,0,0 1215$L$increment1: 1216 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1217$L$key_rotate: 1218 DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d 1219$L$key_rotate192: 1220 DD 0x04070605,0x04070605,0x04070605,0x04070605 1221$L$key_rcon1: 1222 DD 1,1,1,1 1223$L$key_rcon1b: 1224 DD 0x1b,0x1b,0x1b,0x1b 1225 1226 DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 1227 DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 1228 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 1229 DB 115,108,46,111,114,103,62,0 1230ALIGN 64 1231section .text 1232 1233EXTERN __imp_RtlVirtualUnwind 1234 1235ALIGN 16 1236ctr_xts_se_handler: 1237 push rsi 1238 push rdi 1239 push rbx 1240 push rbp 1241 push r12 1242 push r13 1243 push r14 1244 push r15 1245 pushfq 1246 sub rsp,64 1247 1248 mov rax,QWORD[120+r8] 1249 mov rbx,QWORD[248+r8] 1250 1251 mov rsi,QWORD[8+r9] 1252 mov r11,QWORD[56+r9] 1253 1254 mov r10d,DWORD[r11] 1255 lea r10,[r10*1+rsi] 1256 cmp rbx,r10 1257 jb NEAR $L$common_seh_tail 1258 1259 mov rax,QWORD[152+r8] 1260 1261 mov r10d,DWORD[4+r11] 1262 lea r10,[r10*1+rsi] 1263 cmp rbx,r10 1264 jae NEAR $L$common_seh_tail 1265 1266 mov rax,QWORD[208+r8] 1267 1268 lea rsi,[((-168))+rax] 1269 lea rdi,[512+r8] 1270 mov ecx,20 1271 DD 0xa548f3fc 1272 1273 mov rbp,QWORD[((-8))+rax] 1274 mov QWORD[160+r8],rbp 1275 1276 1277$L$common_seh_tail: 1278 mov rdi,QWORD[8+rax] 1279 mov rsi,QWORD[16+rax] 1280 mov QWORD[152+r8],rax 1281 mov QWORD[168+r8],rsi 1282 mov QWORD[176+r8],rdi 1283 1284 mov rdi,QWORD[40+r9] 1285 mov rsi,r8 1286 mov ecx,154 1287 DD 0xa548f3fc 1288 1289 mov rsi,r9 1290 xor rcx,rcx 1291 mov rdx,QWORD[8+rsi] 1292 mov r8,QWORD[rsi] 1293 mov r9,QWORD[16+rsi] 1294 mov r10,QWORD[40+rsi] 1295 lea r11,[56+rsi] 1296 lea r12,[24+rsi] 1297 mov QWORD[32+rsp],r10 1298 mov QWORD[40+rsp],r11 1299 mov QWORD[48+rsp],r12 1300 mov QWORD[56+rsp],rcx 1301 call QWORD[__imp_RtlVirtualUnwind] 1302 1303 mov eax,1 1304 add rsp,64 1305 popfq 1306 pop r15 1307 pop r14 1308 pop r13 1309 pop r12 1310 pop rbp 1311 pop rbx 1312 pop rdi 1313 pop rsi 1314 ret 1315 1316 1317section .pdata rdata align=4 1318ALIGN 4 1319 DD $L$SEH_begin_aes_hw_ctr32_encrypt_blocks wrt ..imagebase 1320 DD $L$SEH_end_aes_hw_ctr32_encrypt_blocks wrt ..imagebase 1321 DD $L$SEH_info_ctr32 wrt ..imagebase 1322 DD aes_hw_set_encrypt_key wrt ..imagebase 1323 DD $L$SEH_end_set_encrypt_key wrt ..imagebase 1324 DD $L$SEH_info_key wrt ..imagebase 1325section .xdata rdata align=8 1326ALIGN 8 1327$L$SEH_info_ctr32: 1328 DB 9,0,0,0 1329 DD ctr_xts_se_handler wrt ..imagebase 1330 DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase 1331$L$SEH_info_key: 1332 DB 0x01,0x04,0x01,0x00 1333 DB 0x04,0x02,0x00,0x00 1334%else 1335; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 1336ret 1337%endif 1338