vpaes-x86.S revision 238405
1238405Sjkim # $FreeBSD: head/secure/lib/libcrypto/i386/vpaes-x86.s 238405 2012-07-12 19:30:53Z jkim $ 2238405Sjkim.file "vpaes-x86.s" 3238405Sjkim.text 4238405Sjkim.align 64 5238405Sjkim.L_vpaes_consts: 6238405Sjkim.long 218628480,235210255,168496130,67568393 7238405Sjkim.long 252381056,17041926,33884169,51187212 8238405Sjkim.long 252645135,252645135,252645135,252645135 9238405Sjkim.long 1512730624,3266504856,1377990664,3401244816 10238405Sjkim.long 830229760,1275146365,2969422977,3447763452 11238405Sjkim.long 3411033600,2979783055,338359620,2782886510 12238405Sjkim.long 4209124096,907596821,221174255,1006095553 13238405Sjkim.long 191964160,3799684038,3164090317,1589111125 14238405Sjkim.long 182528256,1777043520,2877432650,3265356744 15238405Sjkim.long 1874708224,3503451415,3305285752,363511674 16238405Sjkim.long 1606117888,3487855781,1093350906,2384367825 17238405Sjkim.long 197121,67569157,134941193,202313229 18238405Sjkim.long 67569157,134941193,202313229,197121 19238405Sjkim.long 134941193,202313229,197121,67569157 20238405Sjkim.long 202313229,197121,67569157,134941193 21238405Sjkim.long 33619971,100992007,168364043,235736079 22238405Sjkim.long 235736079,33619971,100992007,168364043 23238405Sjkim.long 168364043,235736079,33619971,100992007 24238405Sjkim.long 100992007,168364043,235736079,33619971 25238405Sjkim.long 50462976,117835012,185207048,252579084 26238405Sjkim.long 252314880,51251460,117574920,184942860 27238405Sjkim.long 184682752,252054788,50987272,118359308 28238405Sjkim.long 118099200,185467140,251790600,50727180 29238405Sjkim.long 2946363062,528716217,1300004225,1881839624 30238405Sjkim.long 1532713819,1532713819,1532713819,1532713819 31238405Sjkim.long 3602276352,4288629033,3737020424,4153884961 32238405Sjkim.long 1354558464,32357713,2958822624,3775749553 33238405Sjkim.long 1201988352,132424512,1572796698,503232858 34238405Sjkim.long 2213177600,1597421020,4103937655,675398315 35238405Sjkim.long 2749646592,4273543773,1511898873,121693092 36238405Sjkim.long 3040248576,1103263732,2871565598,1608280554 37238405Sjkim.long 2236667136,2588920351,482954393,64377734 38238405Sjkim.long 3069987328,291237287,2117370568,3650299247 39238405Sjkim.long 533321216,3573750986,2572112006,1401264716 40238405Sjkim.long 1339849704,2721158661,548607111,3445553514 41238405Sjkim.long 2128193280,3054596040,2183486460,1257083700 42238405Sjkim.long 655635200,1165381986,3923443150,2344132524 43238405Sjkim.long 190078720,256924420,290342170,357187870 44238405Sjkim.long 1610966272,2263057382,4103205268,309794674 45238405Sjkim.long 2592527872,2233205587,1335446729,3402964816 46238405Sjkim.long 3973531904,3225098121,3002836325,1918774430 47238405Sjkim.long 3870401024,2102906079,2284471353,4117666579 48238405Sjkim.long 617007872,1021508343,366931923,691083277 49238405Sjkim.long 2528395776,3491914898,2968704004,1613121270 50238405Sjkim.long 3445188352,3247741094,844474987,4093578302 51238405Sjkim.long 651481088,1190302358,1689581232,574775300 52238405Sjkim.long 4289380608,206939853,2555985458,2489840491 53238405Sjkim.long 2130264064,327674451,3566485037,3349835193 54238405Sjkim.long 2470714624,316102159,3636825756,3393945945 55238405Sjkim.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 56238405Sjkim.byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 57238405Sjkim.byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 58238405Sjkim.byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 59238405Sjkim.byte 118,101,114,115,105,116,121,41,0 60238405Sjkim.align 64 61238405Sjkim.type _vpaes_preheat,@function 62238405Sjkim.align 16 63238405Sjkim_vpaes_preheat: 64238405Sjkim addl (%esp),%ebp 65238405Sjkim movdqa -48(%ebp),%xmm7 66238405Sjkim movdqa -16(%ebp),%xmm6 67238405Sjkim ret 68238405Sjkim.size _vpaes_preheat,.-_vpaes_preheat 69238405Sjkim.type _vpaes_encrypt_core,@function 70238405Sjkim.align 16 71238405Sjkim_vpaes_encrypt_core: 72238405Sjkim movl $16,%ecx 73238405Sjkim movl 240(%edx),%eax 74238405Sjkim movdqa %xmm6,%xmm1 75238405Sjkim movdqa (%ebp),%xmm2 76238405Sjkim pandn %xmm0,%xmm1 77238405Sjkim movdqu (%edx),%xmm5 78238405Sjkim psrld $4,%xmm1 79238405Sjkim pand %xmm6,%xmm0 80238405Sjkim.byte 102,15,56,0,208 81238405Sjkim movdqa 16(%ebp),%xmm0 82238405Sjkim.byte 102,15,56,0,193 83238405Sjkim pxor %xmm5,%xmm2 84238405Sjkim pxor %xmm2,%xmm0 85238405Sjkim addl $16,%edx 86238405Sjkim leal 192(%ebp),%ebx 87238405Sjkim jmp .L000enc_entry 88238405Sjkim.align 16 89238405Sjkim.L001enc_loop: 90238405Sjkim movdqa 32(%ebp),%xmm4 91238405Sjkim.byte 102,15,56,0,226 92238405Sjkim pxor %xmm5,%xmm4 93238405Sjkim movdqa 48(%ebp),%xmm0 94238405Sjkim.byte 102,15,56,0,195 95238405Sjkim pxor %xmm4,%xmm0 96238405Sjkim movdqa 64(%ebp),%xmm5 97238405Sjkim.byte 102,15,56,0,234 98238405Sjkim movdqa -64(%ebx,%ecx,1),%xmm1 99238405Sjkim movdqa 80(%ebp),%xmm2 100238405Sjkim.byte 102,15,56,0,211 101238405Sjkim pxor %xmm5,%xmm2 102238405Sjkim movdqa (%ebx,%ecx,1),%xmm4 103238405Sjkim movdqa %xmm0,%xmm3 104238405Sjkim.byte 102,15,56,0,193 105238405Sjkim addl $16,%edx 106238405Sjkim pxor %xmm2,%xmm0 107238405Sjkim.byte 102,15,56,0,220 108238405Sjkim addl $16,%ecx 109238405Sjkim pxor %xmm0,%xmm3 110238405Sjkim.byte 102,15,56,0,193 111238405Sjkim andl $48,%ecx 112238405Sjkim pxor %xmm3,%xmm0 113238405Sjkim subl $1,%eax 114238405Sjkim.L000enc_entry: 115238405Sjkim movdqa %xmm6,%xmm1 116238405Sjkim pandn %xmm0,%xmm1 117238405Sjkim psrld $4,%xmm1 118238405Sjkim pand %xmm6,%xmm0 119238405Sjkim movdqa -32(%ebp),%xmm5 120238405Sjkim.byte 102,15,56,0,232 121238405Sjkim pxor %xmm1,%xmm0 122238405Sjkim movdqa %xmm7,%xmm3 123238405Sjkim.byte 102,15,56,0,217 124238405Sjkim pxor %xmm5,%xmm3 125238405Sjkim movdqa %xmm7,%xmm4 126238405Sjkim.byte 102,15,56,0,224 127238405Sjkim pxor %xmm5,%xmm4 128238405Sjkim movdqa %xmm7,%xmm2 129238405Sjkim.byte 102,15,56,0,211 130238405Sjkim pxor %xmm0,%xmm2 131238405Sjkim movdqa %xmm7,%xmm3 132238405Sjkim movdqu (%edx),%xmm5 133238405Sjkim.byte 102,15,56,0,220 134238405Sjkim pxor %xmm1,%xmm3 135238405Sjkim jnz .L001enc_loop 136238405Sjkim movdqa 96(%ebp),%xmm4 137238405Sjkim movdqa 112(%ebp),%xmm0 138238405Sjkim.byte 102,15,56,0,226 139238405Sjkim pxor %xmm5,%xmm4 140238405Sjkim.byte 102,15,56,0,195 141238405Sjkim movdqa 64(%ebx,%ecx,1),%xmm1 142238405Sjkim pxor %xmm4,%xmm0 143238405Sjkim.byte 102,15,56,0,193 144238405Sjkim ret 145238405Sjkim.size _vpaes_encrypt_core,.-_vpaes_encrypt_core 146238405Sjkim.type _vpaes_decrypt_core,@function 147238405Sjkim.align 16 148238405Sjkim_vpaes_decrypt_core: 149238405Sjkim movl 240(%edx),%eax 150238405Sjkim leal 608(%ebp),%ebx 151238405Sjkim movdqa %xmm6,%xmm1 152238405Sjkim movdqa -64(%ebx),%xmm2 153238405Sjkim pandn %xmm0,%xmm1 154238405Sjkim movl %eax,%ecx 155238405Sjkim psrld $4,%xmm1 156238405Sjkim movdqu (%edx),%xmm5 157238405Sjkim shll $4,%ecx 158238405Sjkim pand %xmm6,%xmm0 159238405Sjkim.byte 102,15,56,0,208 160238405Sjkim movdqa -48(%ebx),%xmm0 161238405Sjkim xorl $48,%ecx 162238405Sjkim.byte 102,15,56,0,193 163238405Sjkim andl $48,%ecx 164238405Sjkim pxor %xmm5,%xmm2 165238405Sjkim movdqa 176(%ebp),%xmm5 166238405Sjkim pxor %xmm2,%xmm0 167238405Sjkim addl $16,%edx 168238405Sjkim leal -352(%ebx,%ecx,1),%ecx 169238405Sjkim jmp .L002dec_entry 170238405Sjkim.align 16 171238405Sjkim.L003dec_loop: 172238405Sjkim movdqa -32(%ebx),%xmm4 173238405Sjkim.byte 102,15,56,0,226 174238405Sjkim pxor %xmm0,%xmm4 175238405Sjkim movdqa -16(%ebx),%xmm0 176238405Sjkim.byte 102,15,56,0,195 177238405Sjkim pxor %xmm4,%xmm0 178238405Sjkim addl $16,%edx 179238405Sjkim.byte 102,15,56,0,197 180238405Sjkim movdqa (%ebx),%xmm4 181238405Sjkim.byte 102,15,56,0,226 182238405Sjkim pxor %xmm0,%xmm4 183238405Sjkim movdqa 16(%ebx),%xmm0 184238405Sjkim.byte 102,15,56,0,195 185238405Sjkim pxor %xmm4,%xmm0 186238405Sjkim subl $1,%eax 187238405Sjkim.byte 102,15,56,0,197 188238405Sjkim movdqa 32(%ebx),%xmm4 189238405Sjkim.byte 102,15,56,0,226 190238405Sjkim pxor %xmm0,%xmm4 191238405Sjkim movdqa 48(%ebx),%xmm0 192238405Sjkim.byte 102,15,56,0,195 193238405Sjkim pxor %xmm4,%xmm0 194238405Sjkim.byte 102,15,56,0,197 195238405Sjkim movdqa 64(%ebx),%xmm4 196238405Sjkim.byte 102,15,56,0,226 197238405Sjkim pxor %xmm0,%xmm4 198238405Sjkim movdqa 80(%ebx),%xmm0 199238405Sjkim.byte 102,15,56,0,195 200238405Sjkim pxor %xmm4,%xmm0 201238405Sjkim.byte 102,15,58,15,237,12 202238405Sjkim.L002dec_entry: 203238405Sjkim movdqa %xmm6,%xmm1 204238405Sjkim pandn %xmm0,%xmm1 205238405Sjkim psrld $4,%xmm1 206238405Sjkim pand %xmm6,%xmm0 207238405Sjkim movdqa -32(%ebp),%xmm2 208238405Sjkim.byte 102,15,56,0,208 209238405Sjkim pxor %xmm1,%xmm0 210238405Sjkim movdqa %xmm7,%xmm3 211238405Sjkim.byte 102,15,56,0,217 212238405Sjkim pxor %xmm2,%xmm3 213238405Sjkim movdqa %xmm7,%xmm4 214238405Sjkim.byte 102,15,56,0,224 215238405Sjkim pxor %xmm2,%xmm4 216238405Sjkim movdqa %xmm7,%xmm2 217238405Sjkim.byte 102,15,56,0,211 218238405Sjkim pxor %xmm0,%xmm2 219238405Sjkim movdqa %xmm7,%xmm3 220238405Sjkim.byte 102,15,56,0,220 221238405Sjkim pxor %xmm1,%xmm3 222238405Sjkim movdqu (%edx),%xmm0 223238405Sjkim jnz .L003dec_loop 224238405Sjkim movdqa 96(%ebx),%xmm4 225238405Sjkim.byte 102,15,56,0,226 226238405Sjkim pxor %xmm0,%xmm4 227238405Sjkim movdqa 112(%ebx),%xmm0 228238405Sjkim movdqa (%ecx),%xmm2 229238405Sjkim.byte 102,15,56,0,195 230238405Sjkim pxor %xmm4,%xmm0 231238405Sjkim.byte 102,15,56,0,194 232238405Sjkim ret 233238405Sjkim.size _vpaes_decrypt_core,.-_vpaes_decrypt_core 234238405Sjkim.type _vpaes_schedule_core,@function 235238405Sjkim.align 16 236238405Sjkim_vpaes_schedule_core: 237238405Sjkim addl (%esp),%ebp 238238405Sjkim movdqu (%esi),%xmm0 239238405Sjkim movdqa 320(%ebp),%xmm2 240238405Sjkim movdqa %xmm0,%xmm3 241238405Sjkim leal (%ebp),%ebx 242238405Sjkim movdqa %xmm2,4(%esp) 243238405Sjkim call _vpaes_schedule_transform 244238405Sjkim movdqa %xmm0,%xmm7 245238405Sjkim testl %edi,%edi 246238405Sjkim jnz .L004schedule_am_decrypting 247238405Sjkim movdqu %xmm0,(%edx) 248238405Sjkim jmp .L005schedule_go 249238405Sjkim.L004schedule_am_decrypting: 250238405Sjkim movdqa 256(%ebp,%ecx,1),%xmm1 251238405Sjkim.byte 102,15,56,0,217 252238405Sjkim movdqu %xmm3,(%edx) 253238405Sjkim xorl $48,%ecx 254238405Sjkim.L005schedule_go: 255238405Sjkim cmpl $192,%eax 256238405Sjkim ja .L006schedule_256 257238405Sjkim je .L007schedule_192 258238405Sjkim.L008schedule_128: 259238405Sjkim movl $10,%eax 260238405Sjkim.L009loop_schedule_128: 261238405Sjkim call _vpaes_schedule_round 262238405Sjkim decl %eax 263238405Sjkim jz .L010schedule_mangle_last 264238405Sjkim call _vpaes_schedule_mangle 265238405Sjkim jmp .L009loop_schedule_128 266238405Sjkim.align 16 267238405Sjkim.L007schedule_192: 268238405Sjkim movdqu 8(%esi),%xmm0 269238405Sjkim call _vpaes_schedule_transform 270238405Sjkim movdqa %xmm0,%xmm6 271238405Sjkim pxor %xmm4,%xmm4 272238405Sjkim movhlps %xmm4,%xmm6 273238405Sjkim movl $4,%eax 274238405Sjkim.L011loop_schedule_192: 275238405Sjkim call _vpaes_schedule_round 276238405Sjkim.byte 102,15,58,15,198,8 277238405Sjkim call _vpaes_schedule_mangle 278238405Sjkim call _vpaes_schedule_192_smear 279238405Sjkim call _vpaes_schedule_mangle 280238405Sjkim call _vpaes_schedule_round 281238405Sjkim decl %eax 282238405Sjkim jz .L010schedule_mangle_last 283238405Sjkim call _vpaes_schedule_mangle 284238405Sjkim call _vpaes_schedule_192_smear 285238405Sjkim jmp .L011loop_schedule_192 286238405Sjkim.align 16 287238405Sjkim.L006schedule_256: 288238405Sjkim movdqu 16(%esi),%xmm0 289238405Sjkim call _vpaes_schedule_transform 290238405Sjkim movl $7,%eax 291238405Sjkim.L012loop_schedule_256: 292238405Sjkim call _vpaes_schedule_mangle 293238405Sjkim movdqa %xmm0,%xmm6 294238405Sjkim call _vpaes_schedule_round 295238405Sjkim decl %eax 296238405Sjkim jz .L010schedule_mangle_last 297238405Sjkim call _vpaes_schedule_mangle 298238405Sjkim pshufd $255,%xmm0,%xmm0 299238405Sjkim movdqa %xmm7,20(%esp) 300238405Sjkim movdqa %xmm6,%xmm7 301238405Sjkim call .L_vpaes_schedule_low_round 302238405Sjkim movdqa 20(%esp),%xmm7 303238405Sjkim jmp .L012loop_schedule_256 304238405Sjkim.align 16 305238405Sjkim.L010schedule_mangle_last: 306238405Sjkim leal 384(%ebp),%ebx 307238405Sjkim testl %edi,%edi 308238405Sjkim jnz .L013schedule_mangle_last_dec 309238405Sjkim movdqa 256(%ebp,%ecx,1),%xmm1 310238405Sjkim.byte 102,15,56,0,193 311238405Sjkim leal 352(%ebp),%ebx 312238405Sjkim addl $32,%edx 313238405Sjkim.L013schedule_mangle_last_dec: 314238405Sjkim addl $-16,%edx 315238405Sjkim pxor 336(%ebp),%xmm0 316238405Sjkim call _vpaes_schedule_transform 317238405Sjkim movdqu %xmm0,(%edx) 318238405Sjkim pxor %xmm0,%xmm0 319238405Sjkim pxor %xmm1,%xmm1 320238405Sjkim pxor %xmm2,%xmm2 321238405Sjkim pxor %xmm3,%xmm3 322238405Sjkim pxor %xmm4,%xmm4 323238405Sjkim pxor %xmm5,%xmm5 324238405Sjkim pxor %xmm6,%xmm6 325238405Sjkim pxor %xmm7,%xmm7 326238405Sjkim ret 327238405Sjkim.size _vpaes_schedule_core,.-_vpaes_schedule_core 328238405Sjkim.type _vpaes_schedule_192_smear,@function 329238405Sjkim.align 16 330238405Sjkim_vpaes_schedule_192_smear: 331238405Sjkim pshufd $128,%xmm6,%xmm0 332238405Sjkim pxor %xmm0,%xmm6 333238405Sjkim pshufd $254,%xmm7,%xmm0 334238405Sjkim pxor %xmm0,%xmm6 335238405Sjkim movdqa %xmm6,%xmm0 336238405Sjkim pxor %xmm1,%xmm1 337238405Sjkim movhlps %xmm1,%xmm6 338238405Sjkim ret 339238405Sjkim.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear 340238405Sjkim.type _vpaes_schedule_round,@function 341238405Sjkim.align 16 342238405Sjkim_vpaes_schedule_round: 343238405Sjkim movdqa 8(%esp),%xmm2 344238405Sjkim pxor %xmm1,%xmm1 345238405Sjkim.byte 102,15,58,15,202,15 346238405Sjkim.byte 102,15,58,15,210,15 347238405Sjkim pxor %xmm1,%xmm7 348238405Sjkim pshufd $255,%xmm0,%xmm0 349238405Sjkim.byte 102,15,58,15,192,1 350238405Sjkim movdqa %xmm2,8(%esp) 351238405Sjkim.L_vpaes_schedule_low_round: 352238405Sjkim movdqa %xmm7,%xmm1 353238405Sjkim pslldq $4,%xmm7 354238405Sjkim pxor %xmm1,%xmm7 355238405Sjkim movdqa %xmm7,%xmm1 356238405Sjkim pslldq $8,%xmm7 357238405Sjkim pxor %xmm1,%xmm7 358238405Sjkim pxor 336(%ebp),%xmm7 359238405Sjkim movdqa -16(%ebp),%xmm4 360238405Sjkim movdqa -48(%ebp),%xmm5 361238405Sjkim movdqa %xmm4,%xmm1 362238405Sjkim pandn %xmm0,%xmm1 363238405Sjkim psrld $4,%xmm1 364238405Sjkim pand %xmm4,%xmm0 365238405Sjkim movdqa -32(%ebp),%xmm2 366238405Sjkim.byte 102,15,56,0,208 367238405Sjkim pxor %xmm1,%xmm0 368238405Sjkim movdqa %xmm5,%xmm3 369238405Sjkim.byte 102,15,56,0,217 370238405Sjkim pxor %xmm2,%xmm3 371238405Sjkim movdqa %xmm5,%xmm4 372238405Sjkim.byte 102,15,56,0,224 373238405Sjkim pxor %xmm2,%xmm4 374238405Sjkim movdqa %xmm5,%xmm2 375238405Sjkim.byte 102,15,56,0,211 376238405Sjkim pxor %xmm0,%xmm2 377238405Sjkim movdqa %xmm5,%xmm3 378238405Sjkim.byte 102,15,56,0,220 379238405Sjkim pxor %xmm1,%xmm3 380238405Sjkim movdqa 32(%ebp),%xmm4 381238405Sjkim.byte 102,15,56,0,226 382238405Sjkim movdqa 48(%ebp),%xmm0 383238405Sjkim.byte 102,15,56,0,195 384238405Sjkim pxor %xmm4,%xmm0 385238405Sjkim pxor %xmm7,%xmm0 386238405Sjkim movdqa %xmm0,%xmm7 387238405Sjkim ret 388238405Sjkim.size _vpaes_schedule_round,.-_vpaes_schedule_round 389238405Sjkim.type _vpaes_schedule_transform,@function 390238405Sjkim.align 16 391238405Sjkim_vpaes_schedule_transform: 392238405Sjkim movdqa -16(%ebp),%xmm2 393238405Sjkim movdqa %xmm2,%xmm1 394238405Sjkim pandn %xmm0,%xmm1 395238405Sjkim psrld $4,%xmm1 396238405Sjkim pand %xmm2,%xmm0 397238405Sjkim movdqa (%ebx),%xmm2 398238405Sjkim.byte 102,15,56,0,208 399238405Sjkim movdqa 16(%ebx),%xmm0 400238405Sjkim.byte 102,15,56,0,193 401238405Sjkim pxor %xmm2,%xmm0 402238405Sjkim ret 403238405Sjkim.size _vpaes_schedule_transform,.-_vpaes_schedule_transform 404238405Sjkim.type _vpaes_schedule_mangle,@function 405238405Sjkim.align 16 406238405Sjkim_vpaes_schedule_mangle: 407238405Sjkim movdqa %xmm0,%xmm4 408238405Sjkim movdqa 128(%ebp),%xmm5 409238405Sjkim testl %edi,%edi 410238405Sjkim jnz .L014schedule_mangle_dec 411238405Sjkim addl $16,%edx 412238405Sjkim pxor 336(%ebp),%xmm4 413238405Sjkim.byte 102,15,56,0,229 414238405Sjkim movdqa %xmm4,%xmm3 415238405Sjkim.byte 102,15,56,0,229 416238405Sjkim pxor %xmm4,%xmm3 417238405Sjkim.byte 102,15,56,0,229 418238405Sjkim pxor %xmm4,%xmm3 419238405Sjkim jmp .L015schedule_mangle_both 420238405Sjkim.align 16 421238405Sjkim.L014schedule_mangle_dec: 422238405Sjkim movdqa -16(%ebp),%xmm2 423238405Sjkim leal 416(%ebp),%esi 424238405Sjkim movdqa %xmm2,%xmm1 425238405Sjkim pandn %xmm4,%xmm1 426238405Sjkim psrld $4,%xmm1 427238405Sjkim pand %xmm2,%xmm4 428238405Sjkim movdqa (%esi),%xmm2 429238405Sjkim.byte 102,15,56,0,212 430238405Sjkim movdqa 16(%esi),%xmm3 431238405Sjkim.byte 102,15,56,0,217 432238405Sjkim pxor %xmm2,%xmm3 433238405Sjkim.byte 102,15,56,0,221 434238405Sjkim movdqa 32(%esi),%xmm2 435238405Sjkim.byte 102,15,56,0,212 436238405Sjkim pxor %xmm3,%xmm2 437238405Sjkim movdqa 48(%esi),%xmm3 438238405Sjkim.byte 102,15,56,0,217 439238405Sjkim pxor %xmm2,%xmm3 440238405Sjkim.byte 102,15,56,0,221 441238405Sjkim movdqa 64(%esi),%xmm2 442238405Sjkim.byte 102,15,56,0,212 443238405Sjkim pxor %xmm3,%xmm2 444238405Sjkim movdqa 80(%esi),%xmm3 445238405Sjkim.byte 102,15,56,0,217 446238405Sjkim pxor %xmm2,%xmm3 447238405Sjkim.byte 102,15,56,0,221 448238405Sjkim movdqa 96(%esi),%xmm2 449238405Sjkim.byte 102,15,56,0,212 450238405Sjkim pxor %xmm3,%xmm2 451238405Sjkim movdqa 112(%esi),%xmm3 452238405Sjkim.byte 102,15,56,0,217 453238405Sjkim pxor %xmm2,%xmm3 454238405Sjkim addl $-16,%edx 455238405Sjkim.L015schedule_mangle_both: 456238405Sjkim movdqa 256(%ebp,%ecx,1),%xmm1 457238405Sjkim.byte 102,15,56,0,217 458238405Sjkim addl $-16,%ecx 459238405Sjkim andl $48,%ecx 460238405Sjkim movdqu %xmm3,(%edx) 461238405Sjkim ret 462238405Sjkim.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle 463238405Sjkim.globl vpaes_set_encrypt_key 464238405Sjkim.type vpaes_set_encrypt_key,@function 465238405Sjkim.align 16 466238405Sjkimvpaes_set_encrypt_key: 467238405Sjkim.L_vpaes_set_encrypt_key_begin: 468238405Sjkim pushl %ebp 469238405Sjkim pushl %ebx 470238405Sjkim pushl %esi 471238405Sjkim pushl %edi 472238405Sjkim movl 20(%esp),%esi 473238405Sjkim leal -56(%esp),%ebx 474238405Sjkim movl 24(%esp),%eax 475238405Sjkim andl $-16,%ebx 476238405Sjkim movl 28(%esp),%edx 477238405Sjkim xchgl %esp,%ebx 478238405Sjkim movl %ebx,48(%esp) 479238405Sjkim movl %eax,%ebx 480238405Sjkim shrl $5,%ebx 481238405Sjkim addl $5,%ebx 482238405Sjkim movl %ebx,240(%edx) 483238405Sjkim movl $48,%ecx 484238405Sjkim movl $0,%edi 485238405Sjkim leal .L_vpaes_consts+0x30-.L016pic_point,%ebp 486238405Sjkim call _vpaes_schedule_core 487238405Sjkim.L016pic_point: 488238405Sjkim movl 48(%esp),%esp 489238405Sjkim xorl %eax,%eax 490238405Sjkim popl %edi 491238405Sjkim popl %esi 492238405Sjkim popl %ebx 493238405Sjkim popl %ebp 494238405Sjkim ret 495238405Sjkim.size vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin 496238405Sjkim.globl vpaes_set_decrypt_key 497238405Sjkim.type vpaes_set_decrypt_key,@function 498238405Sjkim.align 16 499238405Sjkimvpaes_set_decrypt_key: 500238405Sjkim.L_vpaes_set_decrypt_key_begin: 501238405Sjkim pushl %ebp 502238405Sjkim pushl %ebx 503238405Sjkim pushl %esi 504238405Sjkim pushl %edi 505238405Sjkim movl 20(%esp),%esi 506238405Sjkim leal -56(%esp),%ebx 507238405Sjkim movl 24(%esp),%eax 508238405Sjkim andl $-16,%ebx 509238405Sjkim movl 28(%esp),%edx 510238405Sjkim xchgl %esp,%ebx 511238405Sjkim movl %ebx,48(%esp) 512238405Sjkim movl %eax,%ebx 513238405Sjkim shrl $5,%ebx 514238405Sjkim addl $5,%ebx 515238405Sjkim movl %ebx,240(%edx) 516238405Sjkim shll $4,%ebx 517238405Sjkim leal 16(%edx,%ebx,1),%edx 518238405Sjkim movl $1,%edi 519238405Sjkim movl %eax,%ecx 520238405Sjkim shrl $1,%ecx 521238405Sjkim andl $32,%ecx 522238405Sjkim xorl $32,%ecx 523238405Sjkim leal .L_vpaes_consts+0x30-.L017pic_point,%ebp 524238405Sjkim call _vpaes_schedule_core 525238405Sjkim.L017pic_point: 526238405Sjkim movl 48(%esp),%esp 527238405Sjkim xorl %eax,%eax 528238405Sjkim popl %edi 529238405Sjkim popl %esi 530238405Sjkim popl %ebx 531238405Sjkim popl %ebp 532238405Sjkim ret 533238405Sjkim.size vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin 534238405Sjkim.globl vpaes_encrypt 535238405Sjkim.type vpaes_encrypt,@function 536238405Sjkim.align 16 537238405Sjkimvpaes_encrypt: 538238405Sjkim.L_vpaes_encrypt_begin: 539238405Sjkim pushl %ebp 540238405Sjkim pushl %ebx 541238405Sjkim pushl %esi 542238405Sjkim pushl %edi 543238405Sjkim leal .L_vpaes_consts+0x30-.L018pic_point,%ebp 544238405Sjkim call _vpaes_preheat 545238405Sjkim.L018pic_point: 546238405Sjkim movl 20(%esp),%esi 547238405Sjkim leal -56(%esp),%ebx 548238405Sjkim movl 24(%esp),%edi 549238405Sjkim andl $-16,%ebx 550238405Sjkim movl 28(%esp),%edx 551238405Sjkim xchgl %esp,%ebx 552238405Sjkim movl %ebx,48(%esp) 553238405Sjkim movdqu (%esi),%xmm0 554238405Sjkim call _vpaes_encrypt_core 555238405Sjkim movdqu %xmm0,(%edi) 556238405Sjkim movl 48(%esp),%esp 557238405Sjkim popl %edi 558238405Sjkim popl %esi 559238405Sjkim popl %ebx 560238405Sjkim popl %ebp 561238405Sjkim ret 562238405Sjkim.size vpaes_encrypt,.-.L_vpaes_encrypt_begin 563238405Sjkim.globl vpaes_decrypt 564238405Sjkim.type vpaes_decrypt,@function 565238405Sjkim.align 16 566238405Sjkimvpaes_decrypt: 567238405Sjkim.L_vpaes_decrypt_begin: 568238405Sjkim pushl %ebp 569238405Sjkim pushl %ebx 570238405Sjkim pushl %esi 571238405Sjkim pushl %edi 572238405Sjkim leal .L_vpaes_consts+0x30-.L019pic_point,%ebp 573238405Sjkim call _vpaes_preheat 574238405Sjkim.L019pic_point: 575238405Sjkim movl 20(%esp),%esi 576238405Sjkim leal -56(%esp),%ebx 577238405Sjkim movl 24(%esp),%edi 578238405Sjkim andl $-16,%ebx 579238405Sjkim movl 28(%esp),%edx 580238405Sjkim xchgl %esp,%ebx 581238405Sjkim movl %ebx,48(%esp) 582238405Sjkim movdqu (%esi),%xmm0 583238405Sjkim call _vpaes_decrypt_core 584238405Sjkim movdqu %xmm0,(%edi) 585238405Sjkim movl 48(%esp),%esp 586238405Sjkim popl %edi 587238405Sjkim popl %esi 588238405Sjkim popl %ebx 589238405Sjkim popl %ebp 590238405Sjkim ret 591238405Sjkim.size vpaes_decrypt,.-.L_vpaes_decrypt_begin 592238405Sjkim.globl vpaes_cbc_encrypt 593238405Sjkim.type vpaes_cbc_encrypt,@function 594238405Sjkim.align 16 595238405Sjkimvpaes_cbc_encrypt: 596238405Sjkim.L_vpaes_cbc_encrypt_begin: 597238405Sjkim pushl %ebp 598238405Sjkim pushl %ebx 599238405Sjkim pushl %esi 600238405Sjkim pushl %edi 601238405Sjkim movl 20(%esp),%esi 602238405Sjkim movl 24(%esp),%edi 603238405Sjkim movl 28(%esp),%eax 604238405Sjkim movl 32(%esp),%edx 605238405Sjkim subl $16,%eax 606238405Sjkim jc .L020cbc_abort 607238405Sjkim leal -56(%esp),%ebx 608238405Sjkim movl 36(%esp),%ebp 609238405Sjkim andl $-16,%ebx 610238405Sjkim movl 40(%esp),%ecx 611238405Sjkim xchgl %esp,%ebx 612238405Sjkim movdqu (%ebp),%xmm1 613238405Sjkim subl %esi,%edi 614238405Sjkim movl %ebx,48(%esp) 615238405Sjkim movl %edi,(%esp) 616238405Sjkim movl %edx,4(%esp) 617238405Sjkim movl %ebp,8(%esp) 618238405Sjkim movl %eax,%edi 619238405Sjkim leal .L_vpaes_consts+0x30-.L021pic_point,%ebp 620238405Sjkim call _vpaes_preheat 621238405Sjkim.L021pic_point: 622238405Sjkim cmpl $0,%ecx 623238405Sjkim je .L022cbc_dec_loop 624238405Sjkim jmp .L023cbc_enc_loop 625238405Sjkim.align 16 626238405Sjkim.L023cbc_enc_loop: 627238405Sjkim movdqu (%esi),%xmm0 628238405Sjkim pxor %xmm1,%xmm0 629238405Sjkim call _vpaes_encrypt_core 630238405Sjkim movl (%esp),%ebx 631238405Sjkim movl 4(%esp),%edx 632238405Sjkim movdqa %xmm0,%xmm1 633238405Sjkim movdqu %xmm0,(%ebx,%esi,1) 634238405Sjkim leal 16(%esi),%esi 635238405Sjkim subl $16,%edi 636238405Sjkim jnc .L023cbc_enc_loop 637238405Sjkim jmp .L024cbc_done 638238405Sjkim.align 16 639238405Sjkim.L022cbc_dec_loop: 640238405Sjkim movdqu (%esi),%xmm0 641238405Sjkim movdqa %xmm1,16(%esp) 642238405Sjkim movdqa %xmm0,32(%esp) 643238405Sjkim call _vpaes_decrypt_core 644238405Sjkim movl (%esp),%ebx 645238405Sjkim movl 4(%esp),%edx 646238405Sjkim pxor 16(%esp),%xmm0 647238405Sjkim movdqa 32(%esp),%xmm1 648238405Sjkim movdqu %xmm0,(%ebx,%esi,1) 649238405Sjkim leal 16(%esi),%esi 650238405Sjkim subl $16,%edi 651238405Sjkim jnc .L022cbc_dec_loop 652238405Sjkim.L024cbc_done: 653238405Sjkim movl 8(%esp),%ebx 654238405Sjkim movl 48(%esp),%esp 655238405Sjkim movdqu %xmm1,(%ebx) 656238405Sjkim.L020cbc_abort: 657238405Sjkim popl %edi 658238405Sjkim popl %esi 659238405Sjkim popl %ebx 660238405Sjkim popl %ebp 661238405Sjkim ret 662238405Sjkim.size vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin 663