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