1#include <machine/asm.h> 2.text 3.align 64 4.L_vpaes_consts: 5.long 218628480,235210255,168496130,67568393 6.long 252381056,17041926,33884169,51187212 7.long 252645135,252645135,252645135,252645135 8.long 1512730624,3266504856,1377990664,3401244816 9.long 830229760,1275146365,2969422977,3447763452 10.long 3411033600,2979783055,338359620,2782886510 11.long 4209124096,907596821,221174255,1006095553 12.long 191964160,3799684038,3164090317,1589111125 13.long 182528256,1777043520,2877432650,3265356744 14.long 1874708224,3503451415,3305285752,363511674 15.long 1606117888,3487855781,1093350906,2384367825 16.long 197121,67569157,134941193,202313229 17.long 67569157,134941193,202313229,197121 18.long 134941193,202313229,197121,67569157 19.long 202313229,197121,67569157,134941193 20.long 33619971,100992007,168364043,235736079 21.long 235736079,33619971,100992007,168364043 22.long 168364043,235736079,33619971,100992007 23.long 100992007,168364043,235736079,33619971 24.long 50462976,117835012,185207048,252579084 25.long 252314880,51251460,117574920,184942860 26.long 184682752,252054788,50987272,118359308 27.long 118099200,185467140,251790600,50727180 28.long 2946363062,528716217,1300004225,1881839624 29.long 1532713819,1532713819,1532713819,1532713819 30.long 3602276352,4288629033,3737020424,4153884961 31.long 1354558464,32357713,2958822624,3775749553 32.long 1201988352,132424512,1572796698,503232858 33.long 2213177600,1597421020,4103937655,675398315 34.long 2749646592,4273543773,1511898873,121693092 35.long 3040248576,1103263732,2871565598,1608280554 36.long 2236667136,2588920351,482954393,64377734 37.long 3069987328,291237287,2117370568,3650299247 38.long 533321216,3573750986,2572112006,1401264716 39.long 1339849704,2721158661,548607111,3445553514 40.long 2128193280,3054596040,2183486460,1257083700 41.long 655635200,1165381986,3923443150,2344132524 42.long 190078720,256924420,290342170,357187870 43.long 1610966272,2263057382,4103205268,309794674 44.long 2592527872,2233205587,1335446729,3402964816 45.long 3973531904,3225098121,3002836325,1918774430 46.long 3870401024,2102906079,2284471353,4117666579 47.long 617007872,1021508343,366931923,691083277 48.long 2528395776,3491914898,2968704004,1613121270 49.long 3445188352,3247741094,844474987,4093578302 50.long 651481088,1190302358,1689581232,574775300 51.long 4289380608,206939853,2555985458,2489840491 52.long 2130264064,327674451,3566485037,3349835193 53.long 2470714624,316102159,3636825756,3393945945 54.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 55.byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 56.byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 57.byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 58.byte 118,101,114,115,105,116,121,41,0 59.align 64 60.type _vpaes_preheat,@function 61.align 16 62_vpaes_preheat: 63 #ifdef __CET__ 64 65.byte 243,15,30,251 66 #endif 67 68 addl (%esp),%ebp 69 movdqa -48(%ebp),%xmm7 70 movdqa -16(%ebp),%xmm6 71 ret 72.size _vpaes_preheat,.-_vpaes_preheat 73.type _vpaes_encrypt_core,@function 74.align 16 75_vpaes_encrypt_core: 76 #ifdef __CET__ 77 78.byte 243,15,30,251 79 #endif 80 81 movl $16,%ecx 82 movl 240(%edx),%eax 83 movdqa %xmm6,%xmm1 84 movdqa (%ebp),%xmm2 85 pandn %xmm0,%xmm1 86 pand %xmm6,%xmm0 87 movdqu (%edx),%xmm5 88.byte 102,15,56,0,208 89 movdqa 16(%ebp),%xmm0 90 pxor %xmm5,%xmm2 91 psrld $4,%xmm1 92 addl $16,%edx 93.byte 102,15,56,0,193 94 leal 192(%ebp),%ebx 95 pxor %xmm2,%xmm0 96 jmp .L000enc_entry 97.align 16 98.L001enc_loop: 99 movdqa 32(%ebp),%xmm4 100 movdqa 48(%ebp),%xmm0 101.byte 102,15,56,0,226 102.byte 102,15,56,0,195 103 pxor %xmm5,%xmm4 104 movdqa 64(%ebp),%xmm5 105 pxor %xmm4,%xmm0 106 movdqa -64(%ebx,%ecx,1),%xmm1 107.byte 102,15,56,0,234 108 movdqa 80(%ebp),%xmm2 109 movdqa (%ebx,%ecx,1),%xmm4 110.byte 102,15,56,0,211 111 movdqa %xmm0,%xmm3 112 pxor %xmm5,%xmm2 113.byte 102,15,56,0,193 114 addl $16,%edx 115 pxor %xmm2,%xmm0 116.byte 102,15,56,0,220 117 addl $16,%ecx 118 pxor %xmm0,%xmm3 119.byte 102,15,56,0,193 120 andl $48,%ecx 121 subl $1,%eax 122 pxor %xmm3,%xmm0 123.L000enc_entry: 124 movdqa %xmm6,%xmm1 125 movdqa -32(%ebp),%xmm5 126 pandn %xmm0,%xmm1 127 psrld $4,%xmm1 128 pand %xmm6,%xmm0 129.byte 102,15,56,0,232 130 movdqa %xmm7,%xmm3 131 pxor %xmm1,%xmm0 132.byte 102,15,56,0,217 133 movdqa %xmm7,%xmm4 134 pxor %xmm5,%xmm3 135.byte 102,15,56,0,224 136 movdqa %xmm7,%xmm2 137 pxor %xmm5,%xmm4 138.byte 102,15,56,0,211 139 movdqa %xmm7,%xmm3 140 pxor %xmm0,%xmm2 141.byte 102,15,56,0,220 142 movdqu (%edx),%xmm5 143 pxor %xmm1,%xmm3 144 jnz .L001enc_loop 145 movdqa 96(%ebp),%xmm4 146 movdqa 112(%ebp),%xmm0 147.byte 102,15,56,0,226 148 pxor %xmm5,%xmm4 149.byte 102,15,56,0,195 150 movdqa 64(%ebx,%ecx,1),%xmm1 151 pxor %xmm4,%xmm0 152.byte 102,15,56,0,193 153 ret 154.size _vpaes_encrypt_core,.-_vpaes_encrypt_core 155.type _vpaes_decrypt_core,@function 156.align 16 157_vpaes_decrypt_core: 158 #ifdef __CET__ 159 160.byte 243,15,30,251 161 #endif 162 163 leal 608(%ebp),%ebx 164 movl 240(%edx),%eax 165 movdqa %xmm6,%xmm1 166 movdqa -64(%ebx),%xmm2 167 pandn %xmm0,%xmm1 168 movl %eax,%ecx 169 psrld $4,%xmm1 170 movdqu (%edx),%xmm5 171 shll $4,%ecx 172 pand %xmm6,%xmm0 173.byte 102,15,56,0,208 174 movdqa -48(%ebx),%xmm0 175 xorl $48,%ecx 176.byte 102,15,56,0,193 177 andl $48,%ecx 178 pxor %xmm5,%xmm2 179 movdqa 176(%ebp),%xmm5 180 pxor %xmm2,%xmm0 181 addl $16,%edx 182 leal -352(%ebx,%ecx,1),%ecx 183 jmp .L002dec_entry 184.align 16 185.L003dec_loop: 186 movdqa -32(%ebx),%xmm4 187 movdqa -16(%ebx),%xmm1 188.byte 102,15,56,0,226 189.byte 102,15,56,0,203 190 pxor %xmm4,%xmm0 191 movdqa (%ebx),%xmm4 192 pxor %xmm1,%xmm0 193 movdqa 16(%ebx),%xmm1 194.byte 102,15,56,0,226 195.byte 102,15,56,0,197 196.byte 102,15,56,0,203 197 pxor %xmm4,%xmm0 198 movdqa 32(%ebx),%xmm4 199 pxor %xmm1,%xmm0 200 movdqa 48(%ebx),%xmm1 201.byte 102,15,56,0,226 202.byte 102,15,56,0,197 203.byte 102,15,56,0,203 204 pxor %xmm4,%xmm0 205 movdqa 64(%ebx),%xmm4 206 pxor %xmm1,%xmm0 207 movdqa 80(%ebx),%xmm1 208.byte 102,15,56,0,226 209.byte 102,15,56,0,197 210.byte 102,15,56,0,203 211 pxor %xmm4,%xmm0 212 addl $16,%edx 213.byte 102,15,58,15,237,12 214 pxor %xmm1,%xmm0 215 subl $1,%eax 216.L002dec_entry: 217 movdqa %xmm6,%xmm1 218 movdqa -32(%ebp),%xmm2 219 pandn %xmm0,%xmm1 220 pand %xmm6,%xmm0 221 psrld $4,%xmm1 222.byte 102,15,56,0,208 223 movdqa %xmm7,%xmm3 224 pxor %xmm1,%xmm0 225.byte 102,15,56,0,217 226 movdqa %xmm7,%xmm4 227 pxor %xmm2,%xmm3 228.byte 102,15,56,0,224 229 pxor %xmm2,%xmm4 230 movdqa %xmm7,%xmm2 231.byte 102,15,56,0,211 232 movdqa %xmm7,%xmm3 233 pxor %xmm0,%xmm2 234.byte 102,15,56,0,220 235 movdqu (%edx),%xmm0 236 pxor %xmm1,%xmm3 237 jnz .L003dec_loop 238 movdqa 96(%ebx),%xmm4 239.byte 102,15,56,0,226 240 pxor %xmm0,%xmm4 241 movdqa 112(%ebx),%xmm0 242 movdqa (%ecx),%xmm2 243.byte 102,15,56,0,195 244 pxor %xmm4,%xmm0 245.byte 102,15,56,0,194 246 ret 247.size _vpaes_decrypt_core,.-_vpaes_decrypt_core 248.type _vpaes_schedule_core,@function 249.align 16 250_vpaes_schedule_core: 251 #ifdef __CET__ 252 253.byte 243,15,30,251 254 #endif 255 256 addl (%esp),%ebp 257 movdqu (%esi),%xmm0 258 movdqa 320(%ebp),%xmm2 259 movdqa %xmm0,%xmm3 260 leal (%ebp),%ebx 261 movdqa %xmm2,4(%esp) 262 call _vpaes_schedule_transform 263 movdqa %xmm0,%xmm7 264 testl %edi,%edi 265 jnz .L004schedule_am_decrypting 266 movdqu %xmm0,(%edx) 267 jmp .L005schedule_go 268.L004schedule_am_decrypting: 269 movdqa 256(%ebp,%ecx,1),%xmm1 270.byte 102,15,56,0,217 271 movdqu %xmm3,(%edx) 272 xorl $48,%ecx 273.L005schedule_go: 274 cmpl $192,%eax 275 ja .L006schedule_256 276 je .L007schedule_192 277.L008schedule_128: 278 movl $10,%eax 279.L009loop_schedule_128: 280 call _vpaes_schedule_round 281 decl %eax 282 jz .L010schedule_mangle_last 283 call _vpaes_schedule_mangle 284 jmp .L009loop_schedule_128 285.align 16 286.L007schedule_192: 287 movdqu 8(%esi),%xmm0 288 call _vpaes_schedule_transform 289 movdqa %xmm0,%xmm6 290 pxor %xmm4,%xmm4 291 movhlps %xmm4,%xmm6 292 movl $4,%eax 293.L011loop_schedule_192: 294 call _vpaes_schedule_round 295.byte 102,15,58,15,198,8 296 call _vpaes_schedule_mangle 297 call _vpaes_schedule_192_smear 298 call _vpaes_schedule_mangle 299 call _vpaes_schedule_round 300 decl %eax 301 jz .L010schedule_mangle_last 302 call _vpaes_schedule_mangle 303 call _vpaes_schedule_192_smear 304 jmp .L011loop_schedule_192 305.align 16 306.L006schedule_256: 307 movdqu 16(%esi),%xmm0 308 call _vpaes_schedule_transform 309 movl $7,%eax 310.L012loop_schedule_256: 311 call _vpaes_schedule_mangle 312 movdqa %xmm0,%xmm6 313 call _vpaes_schedule_round 314 decl %eax 315 jz .L010schedule_mangle_last 316 call _vpaes_schedule_mangle 317 pshufd $255,%xmm0,%xmm0 318 movdqa %xmm7,20(%esp) 319 movdqa %xmm6,%xmm7 320 call .L_vpaes_schedule_low_round 321 movdqa 20(%esp),%xmm7 322 jmp .L012loop_schedule_256 323.align 16 324.L010schedule_mangle_last: 325 leal 384(%ebp),%ebx 326 testl %edi,%edi 327 jnz .L013schedule_mangle_last_dec 328 movdqa 256(%ebp,%ecx,1),%xmm1 329.byte 102,15,56,0,193 330 leal 352(%ebp),%ebx 331 addl $32,%edx 332.L013schedule_mangle_last_dec: 333 addl $-16,%edx 334 pxor 336(%ebp),%xmm0 335 call _vpaes_schedule_transform 336 movdqu %xmm0,(%edx) 337 pxor %xmm0,%xmm0 338 pxor %xmm1,%xmm1 339 pxor %xmm2,%xmm2 340 pxor %xmm3,%xmm3 341 pxor %xmm4,%xmm4 342 pxor %xmm5,%xmm5 343 pxor %xmm6,%xmm6 344 pxor %xmm7,%xmm7 345 ret 346.size _vpaes_schedule_core,.-_vpaes_schedule_core 347.type _vpaes_schedule_192_smear,@function 348.align 16 349_vpaes_schedule_192_smear: 350 #ifdef __CET__ 351 352.byte 243,15,30,251 353 #endif 354 355 pshufd $128,%xmm6,%xmm1 356 pshufd $254,%xmm7,%xmm0 357 pxor %xmm1,%xmm6 358 pxor %xmm1,%xmm1 359 pxor %xmm0,%xmm6 360 movdqa %xmm6,%xmm0 361 movhlps %xmm1,%xmm6 362 ret 363.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear 364.type _vpaes_schedule_round,@function 365.align 16 366_vpaes_schedule_round: 367 #ifdef __CET__ 368 369.byte 243,15,30,251 370 #endif 371 372 movdqa 8(%esp),%xmm2 373 pxor %xmm1,%xmm1 374.byte 102,15,58,15,202,15 375.byte 102,15,58,15,210,15 376 pxor %xmm1,%xmm7 377 pshufd $255,%xmm0,%xmm0 378.byte 102,15,58,15,192,1 379 movdqa %xmm2,8(%esp) 380.L_vpaes_schedule_low_round: 381 movdqa %xmm7,%xmm1 382 pslldq $4,%xmm7 383 pxor %xmm1,%xmm7 384 movdqa %xmm7,%xmm1 385 pslldq $8,%xmm7 386 pxor %xmm1,%xmm7 387 pxor 336(%ebp),%xmm7 388 movdqa -16(%ebp),%xmm4 389 movdqa -48(%ebp),%xmm5 390 movdqa %xmm4,%xmm1 391 pandn %xmm0,%xmm1 392 psrld $4,%xmm1 393 pand %xmm4,%xmm0 394 movdqa -32(%ebp),%xmm2 395.byte 102,15,56,0,208 396 pxor %xmm1,%xmm0 397 movdqa %xmm5,%xmm3 398.byte 102,15,56,0,217 399 pxor %xmm2,%xmm3 400 movdqa %xmm5,%xmm4 401.byte 102,15,56,0,224 402 pxor %xmm2,%xmm4 403 movdqa %xmm5,%xmm2 404.byte 102,15,56,0,211 405 pxor %xmm0,%xmm2 406 movdqa %xmm5,%xmm3 407.byte 102,15,56,0,220 408 pxor %xmm1,%xmm3 409 movdqa 32(%ebp),%xmm4 410.byte 102,15,56,0,226 411 movdqa 48(%ebp),%xmm0 412.byte 102,15,56,0,195 413 pxor %xmm4,%xmm0 414 pxor %xmm7,%xmm0 415 movdqa %xmm0,%xmm7 416 ret 417.size _vpaes_schedule_round,.-_vpaes_schedule_round 418.type _vpaes_schedule_transform,@function 419.align 16 420_vpaes_schedule_transform: 421 #ifdef __CET__ 422 423.byte 243,15,30,251 424 #endif 425 426 movdqa -16(%ebp),%xmm2 427 movdqa %xmm2,%xmm1 428 pandn %xmm0,%xmm1 429 psrld $4,%xmm1 430 pand %xmm2,%xmm0 431 movdqa (%ebx),%xmm2 432.byte 102,15,56,0,208 433 movdqa 16(%ebx),%xmm0 434.byte 102,15,56,0,193 435 pxor %xmm2,%xmm0 436 ret 437.size _vpaes_schedule_transform,.-_vpaes_schedule_transform 438.type _vpaes_schedule_mangle,@function 439.align 16 440_vpaes_schedule_mangle: 441 #ifdef __CET__ 442 443.byte 243,15,30,251 444 #endif 445 446 movdqa %xmm0,%xmm4 447 movdqa 128(%ebp),%xmm5 448 testl %edi,%edi 449 jnz .L014schedule_mangle_dec 450 addl $16,%edx 451 pxor 336(%ebp),%xmm4 452.byte 102,15,56,0,229 453 movdqa %xmm4,%xmm3 454.byte 102,15,56,0,229 455 pxor %xmm4,%xmm3 456.byte 102,15,56,0,229 457 pxor %xmm4,%xmm3 458 jmp .L015schedule_mangle_both 459.align 16 460.L014schedule_mangle_dec: 461 movdqa -16(%ebp),%xmm2 462 leal 416(%ebp),%esi 463 movdqa %xmm2,%xmm1 464 pandn %xmm4,%xmm1 465 psrld $4,%xmm1 466 pand %xmm2,%xmm4 467 movdqa (%esi),%xmm2 468.byte 102,15,56,0,212 469 movdqa 16(%esi),%xmm3 470.byte 102,15,56,0,217 471 pxor %xmm2,%xmm3 472.byte 102,15,56,0,221 473 movdqa 32(%esi),%xmm2 474.byte 102,15,56,0,212 475 pxor %xmm3,%xmm2 476 movdqa 48(%esi),%xmm3 477.byte 102,15,56,0,217 478 pxor %xmm2,%xmm3 479.byte 102,15,56,0,221 480 movdqa 64(%esi),%xmm2 481.byte 102,15,56,0,212 482 pxor %xmm3,%xmm2 483 movdqa 80(%esi),%xmm3 484.byte 102,15,56,0,217 485 pxor %xmm2,%xmm3 486.byte 102,15,56,0,221 487 movdqa 96(%esi),%xmm2 488.byte 102,15,56,0,212 489 pxor %xmm3,%xmm2 490 movdqa 112(%esi),%xmm3 491.byte 102,15,56,0,217 492 pxor %xmm2,%xmm3 493 addl $-16,%edx 494.L015schedule_mangle_both: 495 movdqa 256(%ebp,%ecx,1),%xmm1 496.byte 102,15,56,0,217 497 addl $-16,%ecx 498 andl $48,%ecx 499 movdqu %xmm3,(%edx) 500 ret 501.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle 502.globl vpaes_set_encrypt_key 503.type vpaes_set_encrypt_key,@function 504.align 16 505vpaes_set_encrypt_key: 506.L_vpaes_set_encrypt_key_begin: 507 #ifdef __CET__ 508 509.byte 243,15,30,251 510 #endif 511 512 pushl %ebp 513 pushl %ebx 514 pushl %esi 515 pushl %edi 516 movl 20(%esp),%esi 517 leal -56(%esp),%ebx 518 movl 24(%esp),%eax 519 andl $-16,%ebx 520 movl 28(%esp),%edx 521 xchgl %esp,%ebx 522 movl %ebx,48(%esp) 523 movl %eax,%ebx 524 shrl $5,%ebx 525 addl $5,%ebx 526 movl %ebx,240(%edx) 527 movl $48,%ecx 528 movl $0,%edi 529 leal .L_vpaes_consts+0x30-.L016pic_point,%ebp 530 call _vpaes_schedule_core 531.L016pic_point: 532 movl 48(%esp),%esp 533 xorl %eax,%eax 534 popl %edi 535 popl %esi 536 popl %ebx 537 popl %ebp 538 ret 539.size vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin 540.globl vpaes_set_decrypt_key 541.type vpaes_set_decrypt_key,@function 542.align 16 543vpaes_set_decrypt_key: 544.L_vpaes_set_decrypt_key_begin: 545 #ifdef __CET__ 546 547.byte 243,15,30,251 548 #endif 549 550 pushl %ebp 551 pushl %ebx 552 pushl %esi 553 pushl %edi 554 movl 20(%esp),%esi 555 leal -56(%esp),%ebx 556 movl 24(%esp),%eax 557 andl $-16,%ebx 558 movl 28(%esp),%edx 559 xchgl %esp,%ebx 560 movl %ebx,48(%esp) 561 movl %eax,%ebx 562 shrl $5,%ebx 563 addl $5,%ebx 564 movl %ebx,240(%edx) 565 shll $4,%ebx 566 leal 16(%edx,%ebx,1),%edx 567 movl $1,%edi 568 movl %eax,%ecx 569 shrl $1,%ecx 570 andl $32,%ecx 571 xorl $32,%ecx 572 leal .L_vpaes_consts+0x30-.L017pic_point,%ebp 573 call _vpaes_schedule_core 574.L017pic_point: 575 movl 48(%esp),%esp 576 xorl %eax,%eax 577 popl %edi 578 popl %esi 579 popl %ebx 580 popl %ebp 581 ret 582.size vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin 583.globl vpaes_encrypt 584.type vpaes_encrypt,@function 585.align 16 586vpaes_encrypt: 587.L_vpaes_encrypt_begin: 588 #ifdef __CET__ 589 590.byte 243,15,30,251 591 #endif 592 593 pushl %ebp 594 pushl %ebx 595 pushl %esi 596 pushl %edi 597 leal .L_vpaes_consts+0x30-.L018pic_point,%ebp 598 call _vpaes_preheat 599.L018pic_point: 600 movl 20(%esp),%esi 601 leal -56(%esp),%ebx 602 movl 24(%esp),%edi 603 andl $-16,%ebx 604 movl 28(%esp),%edx 605 xchgl %esp,%ebx 606 movl %ebx,48(%esp) 607 movdqu (%esi),%xmm0 608 call _vpaes_encrypt_core 609 movdqu %xmm0,(%edi) 610 movl 48(%esp),%esp 611 popl %edi 612 popl %esi 613 popl %ebx 614 popl %ebp 615 ret 616.size vpaes_encrypt,.-.L_vpaes_encrypt_begin 617.globl vpaes_decrypt 618.type vpaes_decrypt,@function 619.align 16 620vpaes_decrypt: 621.L_vpaes_decrypt_begin: 622 #ifdef __CET__ 623 624.byte 243,15,30,251 625 #endif 626 627 pushl %ebp 628 pushl %ebx 629 pushl %esi 630 pushl %edi 631 leal .L_vpaes_consts+0x30-.L019pic_point,%ebp 632 call _vpaes_preheat 633.L019pic_point: 634 movl 20(%esp),%esi 635 leal -56(%esp),%ebx 636 movl 24(%esp),%edi 637 andl $-16,%ebx 638 movl 28(%esp),%edx 639 xchgl %esp,%ebx 640 movl %ebx,48(%esp) 641 movdqu (%esi),%xmm0 642 call _vpaes_decrypt_core 643 movdqu %xmm0,(%edi) 644 movl 48(%esp),%esp 645 popl %edi 646 popl %esi 647 popl %ebx 648 popl %ebp 649 ret 650.size vpaes_decrypt,.-.L_vpaes_decrypt_begin 651.globl vpaes_cbc_encrypt 652.type vpaes_cbc_encrypt,@function 653.align 16 654vpaes_cbc_encrypt: 655.L_vpaes_cbc_encrypt_begin: 656 #ifdef __CET__ 657 658.byte 243,15,30,251 659 #endif 660 661 pushl %ebp 662 pushl %ebx 663 pushl %esi 664 pushl %edi 665 movl 20(%esp),%esi 666 movl 24(%esp),%edi 667 movl 28(%esp),%eax 668 movl 32(%esp),%edx 669 subl $16,%eax 670 jc .L020cbc_abort 671 leal -56(%esp),%ebx 672 movl 36(%esp),%ebp 673 andl $-16,%ebx 674 movl 40(%esp),%ecx 675 xchgl %esp,%ebx 676 movdqu (%ebp),%xmm1 677 subl %esi,%edi 678 movl %ebx,48(%esp) 679 movl %edi,(%esp) 680 movl %edx,4(%esp) 681 movl %ebp,8(%esp) 682 movl %eax,%edi 683 leal .L_vpaes_consts+0x30-.L021pic_point,%ebp 684 call _vpaes_preheat 685.L021pic_point: 686 cmpl $0,%ecx 687 je .L022cbc_dec_loop 688 jmp .L023cbc_enc_loop 689.align 16 690.L023cbc_enc_loop: 691 movdqu (%esi),%xmm0 692 pxor %xmm1,%xmm0 693 call _vpaes_encrypt_core 694 movl (%esp),%ebx 695 movl 4(%esp),%edx 696 movdqa %xmm0,%xmm1 697 movdqu %xmm0,(%ebx,%esi,1) 698 leal 16(%esi),%esi 699 subl $16,%edi 700 jnc .L023cbc_enc_loop 701 jmp .L024cbc_done 702.align 16 703.L022cbc_dec_loop: 704 movdqu (%esi),%xmm0 705 movdqa %xmm1,16(%esp) 706 movdqa %xmm0,32(%esp) 707 call _vpaes_decrypt_core 708 movl (%esp),%ebx 709 movl 4(%esp),%edx 710 pxor 16(%esp),%xmm0 711 movdqa 32(%esp),%xmm1 712 movdqu %xmm0,(%ebx,%esi,1) 713 leal 16(%esi),%esi 714 subl $16,%edi 715 jnc .L022cbc_dec_loop 716.L024cbc_done: 717 movl 8(%esp),%ebx 718 movl 48(%esp),%esp 719 movdqu %xmm1,(%ebx) 720.L020cbc_abort: 721 popl %edi 722 popl %esi 723 popl %ebx 724 popl %ebp 725 ret 726.size vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin 727 728 .section ".note.gnu.property", "a" 729 .p2align 2 730 .long 1f - 0f 731 .long 4f - 1f 732 .long 5 7330: 734 .asciz "GNU" 7351: 736 .p2align 2 737 .long 0xc0000002 738 .long 3f - 2f 7392: 740 .long 3 7413: 742 .p2align 2 7434: 744