1238405Sjkim # $FreeBSD$ 2238405Sjkim.text 3238405Sjkim.globl aesni_encrypt 4238405Sjkim.type aesni_encrypt,@function 5238405Sjkim.align 16 6238405Sjkimaesni_encrypt: 7238405Sjkim movups (%rdi),%xmm2 8238405Sjkim movl 240(%rdx),%eax 9238405Sjkim movups (%rdx),%xmm0 10238405Sjkim movups 16(%rdx),%xmm1 11238405Sjkim leaq 32(%rdx),%rdx 12238405Sjkim xorps %xmm0,%xmm2 13238405Sjkim.Loop_enc1_1: 14238405Sjkim.byte 102,15,56,220,209 15238405Sjkim decl %eax 16238405Sjkim movups (%rdx),%xmm1 17238405Sjkim leaq 16(%rdx),%rdx 18238405Sjkim jnz .Loop_enc1_1 19238405Sjkim.byte 102,15,56,221,209 20238405Sjkim movups %xmm2,(%rsi) 21238405Sjkim .byte 0xf3,0xc3 22238405Sjkim.size aesni_encrypt,.-aesni_encrypt 23238405Sjkim 24238405Sjkim.globl aesni_decrypt 25238405Sjkim.type aesni_decrypt,@function 26238405Sjkim.align 16 27238405Sjkimaesni_decrypt: 28238405Sjkim movups (%rdi),%xmm2 29238405Sjkim movl 240(%rdx),%eax 30238405Sjkim movups (%rdx),%xmm0 31238405Sjkim movups 16(%rdx),%xmm1 32238405Sjkim leaq 32(%rdx),%rdx 33238405Sjkim xorps %xmm0,%xmm2 34238405Sjkim.Loop_dec1_2: 35238405Sjkim.byte 102,15,56,222,209 36238405Sjkim decl %eax 37238405Sjkim movups (%rdx),%xmm1 38238405Sjkim leaq 16(%rdx),%rdx 39238405Sjkim jnz .Loop_dec1_2 40238405Sjkim.byte 102,15,56,223,209 41238405Sjkim movups %xmm2,(%rsi) 42238405Sjkim .byte 0xf3,0xc3 43238405Sjkim.size aesni_decrypt, .-aesni_decrypt 44238405Sjkim.type _aesni_encrypt3,@function 45238405Sjkim.align 16 46238405Sjkim_aesni_encrypt3: 47238405Sjkim movups (%rcx),%xmm0 48238405Sjkim shrl $1,%eax 49238405Sjkim movups 16(%rcx),%xmm1 50238405Sjkim leaq 32(%rcx),%rcx 51238405Sjkim xorps %xmm0,%xmm2 52238405Sjkim xorps %xmm0,%xmm3 53238405Sjkim xorps %xmm0,%xmm4 54238405Sjkim movups (%rcx),%xmm0 55238405Sjkim 56238405Sjkim.Lenc_loop3: 57238405Sjkim.byte 102,15,56,220,209 58238405Sjkim.byte 102,15,56,220,217 59238405Sjkim decl %eax 60238405Sjkim.byte 102,15,56,220,225 61238405Sjkim movups 16(%rcx),%xmm1 62238405Sjkim.byte 102,15,56,220,208 63238405Sjkim.byte 102,15,56,220,216 64238405Sjkim leaq 32(%rcx),%rcx 65238405Sjkim.byte 102,15,56,220,224 66238405Sjkim movups (%rcx),%xmm0 67238405Sjkim jnz .Lenc_loop3 68238405Sjkim 69238405Sjkim.byte 102,15,56,220,209 70238405Sjkim.byte 102,15,56,220,217 71238405Sjkim.byte 102,15,56,220,225 72238405Sjkim.byte 102,15,56,221,208 73238405Sjkim.byte 102,15,56,221,216 74238405Sjkim.byte 102,15,56,221,224 75238405Sjkim .byte 0xf3,0xc3 76238405Sjkim.size _aesni_encrypt3,.-_aesni_encrypt3 77238405Sjkim.type _aesni_decrypt3,@function 78238405Sjkim.align 16 79238405Sjkim_aesni_decrypt3: 80238405Sjkim movups (%rcx),%xmm0 81238405Sjkim shrl $1,%eax 82238405Sjkim movups 16(%rcx),%xmm1 83238405Sjkim leaq 32(%rcx),%rcx 84238405Sjkim xorps %xmm0,%xmm2 85238405Sjkim xorps %xmm0,%xmm3 86238405Sjkim xorps %xmm0,%xmm4 87238405Sjkim movups (%rcx),%xmm0 88238405Sjkim 89238405Sjkim.Ldec_loop3: 90238405Sjkim.byte 102,15,56,222,209 91238405Sjkim.byte 102,15,56,222,217 92238405Sjkim decl %eax 93238405Sjkim.byte 102,15,56,222,225 94238405Sjkim movups 16(%rcx),%xmm1 95238405Sjkim.byte 102,15,56,222,208 96238405Sjkim.byte 102,15,56,222,216 97238405Sjkim leaq 32(%rcx),%rcx 98238405Sjkim.byte 102,15,56,222,224 99238405Sjkim movups (%rcx),%xmm0 100238405Sjkim jnz .Ldec_loop3 101238405Sjkim 102238405Sjkim.byte 102,15,56,222,209 103238405Sjkim.byte 102,15,56,222,217 104238405Sjkim.byte 102,15,56,222,225 105238405Sjkim.byte 102,15,56,223,208 106238405Sjkim.byte 102,15,56,223,216 107238405Sjkim.byte 102,15,56,223,224 108238405Sjkim .byte 0xf3,0xc3 109238405Sjkim.size _aesni_decrypt3,.-_aesni_decrypt3 110238405Sjkim.type _aesni_encrypt4,@function 111238405Sjkim.align 16 112238405Sjkim_aesni_encrypt4: 113238405Sjkim movups (%rcx),%xmm0 114238405Sjkim shrl $1,%eax 115238405Sjkim movups 16(%rcx),%xmm1 116238405Sjkim leaq 32(%rcx),%rcx 117238405Sjkim xorps %xmm0,%xmm2 118238405Sjkim xorps %xmm0,%xmm3 119238405Sjkim xorps %xmm0,%xmm4 120238405Sjkim xorps %xmm0,%xmm5 121238405Sjkim movups (%rcx),%xmm0 122238405Sjkim 123238405Sjkim.Lenc_loop4: 124238405Sjkim.byte 102,15,56,220,209 125238405Sjkim.byte 102,15,56,220,217 126238405Sjkim decl %eax 127238405Sjkim.byte 102,15,56,220,225 128238405Sjkim.byte 102,15,56,220,233 129238405Sjkim movups 16(%rcx),%xmm1 130238405Sjkim.byte 102,15,56,220,208 131238405Sjkim.byte 102,15,56,220,216 132238405Sjkim leaq 32(%rcx),%rcx 133238405Sjkim.byte 102,15,56,220,224 134238405Sjkim.byte 102,15,56,220,232 135238405Sjkim movups (%rcx),%xmm0 136238405Sjkim jnz .Lenc_loop4 137238405Sjkim 138238405Sjkim.byte 102,15,56,220,209 139238405Sjkim.byte 102,15,56,220,217 140238405Sjkim.byte 102,15,56,220,225 141238405Sjkim.byte 102,15,56,220,233 142238405Sjkim.byte 102,15,56,221,208 143238405Sjkim.byte 102,15,56,221,216 144238405Sjkim.byte 102,15,56,221,224 145238405Sjkim.byte 102,15,56,221,232 146238405Sjkim .byte 0xf3,0xc3 147238405Sjkim.size _aesni_encrypt4,.-_aesni_encrypt4 148238405Sjkim.type _aesni_decrypt4,@function 149238405Sjkim.align 16 150238405Sjkim_aesni_decrypt4: 151238405Sjkim movups (%rcx),%xmm0 152238405Sjkim shrl $1,%eax 153238405Sjkim movups 16(%rcx),%xmm1 154238405Sjkim leaq 32(%rcx),%rcx 155238405Sjkim xorps %xmm0,%xmm2 156238405Sjkim xorps %xmm0,%xmm3 157238405Sjkim xorps %xmm0,%xmm4 158238405Sjkim xorps %xmm0,%xmm5 159238405Sjkim movups (%rcx),%xmm0 160238405Sjkim 161238405Sjkim.Ldec_loop4: 162238405Sjkim.byte 102,15,56,222,209 163238405Sjkim.byte 102,15,56,222,217 164238405Sjkim decl %eax 165238405Sjkim.byte 102,15,56,222,225 166238405Sjkim.byte 102,15,56,222,233 167238405Sjkim movups 16(%rcx),%xmm1 168238405Sjkim.byte 102,15,56,222,208 169238405Sjkim.byte 102,15,56,222,216 170238405Sjkim leaq 32(%rcx),%rcx 171238405Sjkim.byte 102,15,56,222,224 172238405Sjkim.byte 102,15,56,222,232 173238405Sjkim movups (%rcx),%xmm0 174238405Sjkim jnz .Ldec_loop4 175238405Sjkim 176238405Sjkim.byte 102,15,56,222,209 177238405Sjkim.byte 102,15,56,222,217 178238405Sjkim.byte 102,15,56,222,225 179238405Sjkim.byte 102,15,56,222,233 180238405Sjkim.byte 102,15,56,223,208 181238405Sjkim.byte 102,15,56,223,216 182238405Sjkim.byte 102,15,56,223,224 183238405Sjkim.byte 102,15,56,223,232 184238405Sjkim .byte 0xf3,0xc3 185238405Sjkim.size _aesni_decrypt4,.-_aesni_decrypt4 186238405Sjkim.type _aesni_encrypt6,@function 187238405Sjkim.align 16 188238405Sjkim_aesni_encrypt6: 189238405Sjkim movups (%rcx),%xmm0 190238405Sjkim shrl $1,%eax 191238405Sjkim movups 16(%rcx),%xmm1 192238405Sjkim leaq 32(%rcx),%rcx 193238405Sjkim xorps %xmm0,%xmm2 194238405Sjkim pxor %xmm0,%xmm3 195238405Sjkim.byte 102,15,56,220,209 196238405Sjkim pxor %xmm0,%xmm4 197238405Sjkim.byte 102,15,56,220,217 198238405Sjkim pxor %xmm0,%xmm5 199238405Sjkim.byte 102,15,56,220,225 200238405Sjkim pxor %xmm0,%xmm6 201238405Sjkim.byte 102,15,56,220,233 202238405Sjkim pxor %xmm0,%xmm7 203238405Sjkim decl %eax 204238405Sjkim.byte 102,15,56,220,241 205238405Sjkim movups (%rcx),%xmm0 206238405Sjkim.byte 102,15,56,220,249 207238405Sjkim jmp .Lenc_loop6_enter 208238405Sjkim.align 16 209238405Sjkim.Lenc_loop6: 210238405Sjkim.byte 102,15,56,220,209 211238405Sjkim.byte 102,15,56,220,217 212238405Sjkim decl %eax 213238405Sjkim.byte 102,15,56,220,225 214238405Sjkim.byte 102,15,56,220,233 215238405Sjkim.byte 102,15,56,220,241 216238405Sjkim.byte 102,15,56,220,249 217238405Sjkim.Lenc_loop6_enter: 218238405Sjkim movups 16(%rcx),%xmm1 219238405Sjkim.byte 102,15,56,220,208 220238405Sjkim.byte 102,15,56,220,216 221238405Sjkim leaq 32(%rcx),%rcx 222238405Sjkim.byte 102,15,56,220,224 223238405Sjkim.byte 102,15,56,220,232 224238405Sjkim.byte 102,15,56,220,240 225238405Sjkim.byte 102,15,56,220,248 226238405Sjkim movups (%rcx),%xmm0 227238405Sjkim jnz .Lenc_loop6 228238405Sjkim 229238405Sjkim.byte 102,15,56,220,209 230238405Sjkim.byte 102,15,56,220,217 231238405Sjkim.byte 102,15,56,220,225 232238405Sjkim.byte 102,15,56,220,233 233238405Sjkim.byte 102,15,56,220,241 234238405Sjkim.byte 102,15,56,220,249 235238405Sjkim.byte 102,15,56,221,208 236238405Sjkim.byte 102,15,56,221,216 237238405Sjkim.byte 102,15,56,221,224 238238405Sjkim.byte 102,15,56,221,232 239238405Sjkim.byte 102,15,56,221,240 240238405Sjkim.byte 102,15,56,221,248 241238405Sjkim .byte 0xf3,0xc3 242238405Sjkim.size _aesni_encrypt6,.-_aesni_encrypt6 243238405Sjkim.type _aesni_decrypt6,@function 244238405Sjkim.align 16 245238405Sjkim_aesni_decrypt6: 246238405Sjkim movups (%rcx),%xmm0 247238405Sjkim shrl $1,%eax 248238405Sjkim movups 16(%rcx),%xmm1 249238405Sjkim leaq 32(%rcx),%rcx 250238405Sjkim xorps %xmm0,%xmm2 251238405Sjkim pxor %xmm0,%xmm3 252238405Sjkim.byte 102,15,56,222,209 253238405Sjkim pxor %xmm0,%xmm4 254238405Sjkim.byte 102,15,56,222,217 255238405Sjkim pxor %xmm0,%xmm5 256238405Sjkim.byte 102,15,56,222,225 257238405Sjkim pxor %xmm0,%xmm6 258238405Sjkim.byte 102,15,56,222,233 259238405Sjkim pxor %xmm0,%xmm7 260238405Sjkim decl %eax 261238405Sjkim.byte 102,15,56,222,241 262238405Sjkim movups (%rcx),%xmm0 263238405Sjkim.byte 102,15,56,222,249 264238405Sjkim jmp .Ldec_loop6_enter 265238405Sjkim.align 16 266238405Sjkim.Ldec_loop6: 267238405Sjkim.byte 102,15,56,222,209 268238405Sjkim.byte 102,15,56,222,217 269238405Sjkim decl %eax 270238405Sjkim.byte 102,15,56,222,225 271238405Sjkim.byte 102,15,56,222,233 272238405Sjkim.byte 102,15,56,222,241 273238405Sjkim.byte 102,15,56,222,249 274238405Sjkim.Ldec_loop6_enter: 275238405Sjkim movups 16(%rcx),%xmm1 276238405Sjkim.byte 102,15,56,222,208 277238405Sjkim.byte 102,15,56,222,216 278238405Sjkim leaq 32(%rcx),%rcx 279238405Sjkim.byte 102,15,56,222,224 280238405Sjkim.byte 102,15,56,222,232 281238405Sjkim.byte 102,15,56,222,240 282238405Sjkim.byte 102,15,56,222,248 283238405Sjkim movups (%rcx),%xmm0 284238405Sjkim jnz .Ldec_loop6 285238405Sjkim 286238405Sjkim.byte 102,15,56,222,209 287238405Sjkim.byte 102,15,56,222,217 288238405Sjkim.byte 102,15,56,222,225 289238405Sjkim.byte 102,15,56,222,233 290238405Sjkim.byte 102,15,56,222,241 291238405Sjkim.byte 102,15,56,222,249 292238405Sjkim.byte 102,15,56,223,208 293238405Sjkim.byte 102,15,56,223,216 294238405Sjkim.byte 102,15,56,223,224 295238405Sjkim.byte 102,15,56,223,232 296238405Sjkim.byte 102,15,56,223,240 297238405Sjkim.byte 102,15,56,223,248 298238405Sjkim .byte 0xf3,0xc3 299238405Sjkim.size _aesni_decrypt6,.-_aesni_decrypt6 300238405Sjkim.type _aesni_encrypt8,@function 301238405Sjkim.align 16 302238405Sjkim_aesni_encrypt8: 303238405Sjkim movups (%rcx),%xmm0 304238405Sjkim shrl $1,%eax 305238405Sjkim movups 16(%rcx),%xmm1 306238405Sjkim leaq 32(%rcx),%rcx 307238405Sjkim xorps %xmm0,%xmm2 308238405Sjkim xorps %xmm0,%xmm3 309238405Sjkim.byte 102,15,56,220,209 310238405Sjkim pxor %xmm0,%xmm4 311238405Sjkim.byte 102,15,56,220,217 312238405Sjkim pxor %xmm0,%xmm5 313238405Sjkim.byte 102,15,56,220,225 314238405Sjkim pxor %xmm0,%xmm6 315238405Sjkim.byte 102,15,56,220,233 316238405Sjkim pxor %xmm0,%xmm7 317238405Sjkim decl %eax 318238405Sjkim.byte 102,15,56,220,241 319238405Sjkim pxor %xmm0,%xmm8 320238405Sjkim.byte 102,15,56,220,249 321238405Sjkim pxor %xmm0,%xmm9 322238405Sjkim movups (%rcx),%xmm0 323238405Sjkim.byte 102,68,15,56,220,193 324238405Sjkim.byte 102,68,15,56,220,201 325238405Sjkim movups 16(%rcx),%xmm1 326238405Sjkim jmp .Lenc_loop8_enter 327238405Sjkim.align 16 328238405Sjkim.Lenc_loop8: 329238405Sjkim.byte 102,15,56,220,209 330238405Sjkim.byte 102,15,56,220,217 331238405Sjkim decl %eax 332238405Sjkim.byte 102,15,56,220,225 333238405Sjkim.byte 102,15,56,220,233 334238405Sjkim.byte 102,15,56,220,241 335238405Sjkim.byte 102,15,56,220,249 336238405Sjkim.byte 102,68,15,56,220,193 337238405Sjkim.byte 102,68,15,56,220,201 338238405Sjkim movups 16(%rcx),%xmm1 339238405Sjkim.Lenc_loop8_enter: 340238405Sjkim.byte 102,15,56,220,208 341238405Sjkim.byte 102,15,56,220,216 342238405Sjkim leaq 32(%rcx),%rcx 343238405Sjkim.byte 102,15,56,220,224 344238405Sjkim.byte 102,15,56,220,232 345238405Sjkim.byte 102,15,56,220,240 346238405Sjkim.byte 102,15,56,220,248 347238405Sjkim.byte 102,68,15,56,220,192 348238405Sjkim.byte 102,68,15,56,220,200 349238405Sjkim movups (%rcx),%xmm0 350238405Sjkim jnz .Lenc_loop8 351238405Sjkim 352238405Sjkim.byte 102,15,56,220,209 353238405Sjkim.byte 102,15,56,220,217 354238405Sjkim.byte 102,15,56,220,225 355238405Sjkim.byte 102,15,56,220,233 356238405Sjkim.byte 102,15,56,220,241 357238405Sjkim.byte 102,15,56,220,249 358238405Sjkim.byte 102,68,15,56,220,193 359238405Sjkim.byte 102,68,15,56,220,201 360238405Sjkim.byte 102,15,56,221,208 361238405Sjkim.byte 102,15,56,221,216 362238405Sjkim.byte 102,15,56,221,224 363238405Sjkim.byte 102,15,56,221,232 364238405Sjkim.byte 102,15,56,221,240 365238405Sjkim.byte 102,15,56,221,248 366238405Sjkim.byte 102,68,15,56,221,192 367238405Sjkim.byte 102,68,15,56,221,200 368238405Sjkim .byte 0xf3,0xc3 369238405Sjkim.size _aesni_encrypt8,.-_aesni_encrypt8 370238405Sjkim.type _aesni_decrypt8,@function 371238405Sjkim.align 16 372238405Sjkim_aesni_decrypt8: 373238405Sjkim movups (%rcx),%xmm0 374238405Sjkim shrl $1,%eax 375238405Sjkim movups 16(%rcx),%xmm1 376238405Sjkim leaq 32(%rcx),%rcx 377238405Sjkim xorps %xmm0,%xmm2 378238405Sjkim xorps %xmm0,%xmm3 379238405Sjkim.byte 102,15,56,222,209 380238405Sjkim pxor %xmm0,%xmm4 381238405Sjkim.byte 102,15,56,222,217 382238405Sjkim pxor %xmm0,%xmm5 383238405Sjkim.byte 102,15,56,222,225 384238405Sjkim pxor %xmm0,%xmm6 385238405Sjkim.byte 102,15,56,222,233 386238405Sjkim pxor %xmm0,%xmm7 387238405Sjkim decl %eax 388238405Sjkim.byte 102,15,56,222,241 389238405Sjkim pxor %xmm0,%xmm8 390238405Sjkim.byte 102,15,56,222,249 391238405Sjkim pxor %xmm0,%xmm9 392238405Sjkim movups (%rcx),%xmm0 393238405Sjkim.byte 102,68,15,56,222,193 394238405Sjkim.byte 102,68,15,56,222,201 395238405Sjkim movups 16(%rcx),%xmm1 396238405Sjkim jmp .Ldec_loop8_enter 397238405Sjkim.align 16 398238405Sjkim.Ldec_loop8: 399238405Sjkim.byte 102,15,56,222,209 400238405Sjkim.byte 102,15,56,222,217 401238405Sjkim decl %eax 402238405Sjkim.byte 102,15,56,222,225 403238405Sjkim.byte 102,15,56,222,233 404238405Sjkim.byte 102,15,56,222,241 405238405Sjkim.byte 102,15,56,222,249 406238405Sjkim.byte 102,68,15,56,222,193 407238405Sjkim.byte 102,68,15,56,222,201 408238405Sjkim movups 16(%rcx),%xmm1 409238405Sjkim.Ldec_loop8_enter: 410238405Sjkim.byte 102,15,56,222,208 411238405Sjkim.byte 102,15,56,222,216 412238405Sjkim leaq 32(%rcx),%rcx 413238405Sjkim.byte 102,15,56,222,224 414238405Sjkim.byte 102,15,56,222,232 415238405Sjkim.byte 102,15,56,222,240 416238405Sjkim.byte 102,15,56,222,248 417238405Sjkim.byte 102,68,15,56,222,192 418238405Sjkim.byte 102,68,15,56,222,200 419238405Sjkim movups (%rcx),%xmm0 420238405Sjkim jnz .Ldec_loop8 421238405Sjkim 422238405Sjkim.byte 102,15,56,222,209 423238405Sjkim.byte 102,15,56,222,217 424238405Sjkim.byte 102,15,56,222,225 425238405Sjkim.byte 102,15,56,222,233 426238405Sjkim.byte 102,15,56,222,241 427238405Sjkim.byte 102,15,56,222,249 428238405Sjkim.byte 102,68,15,56,222,193 429238405Sjkim.byte 102,68,15,56,222,201 430238405Sjkim.byte 102,15,56,223,208 431238405Sjkim.byte 102,15,56,223,216 432238405Sjkim.byte 102,15,56,223,224 433238405Sjkim.byte 102,15,56,223,232 434238405Sjkim.byte 102,15,56,223,240 435238405Sjkim.byte 102,15,56,223,248 436238405Sjkim.byte 102,68,15,56,223,192 437238405Sjkim.byte 102,68,15,56,223,200 438238405Sjkim .byte 0xf3,0xc3 439238405Sjkim.size _aesni_decrypt8,.-_aesni_decrypt8 440238405Sjkim.globl aesni_ecb_encrypt 441238405Sjkim.type aesni_ecb_encrypt,@function 442238405Sjkim.align 16 443238405Sjkimaesni_ecb_encrypt: 444238405Sjkim andq $-16,%rdx 445238405Sjkim jz .Lecb_ret 446238405Sjkim 447238405Sjkim movl 240(%rcx),%eax 448238405Sjkim movups (%rcx),%xmm0 449238405Sjkim movq %rcx,%r11 450238405Sjkim movl %eax,%r10d 451238405Sjkim testl %r8d,%r8d 452238405Sjkim jz .Lecb_decrypt 453238405Sjkim 454238405Sjkim cmpq $128,%rdx 455238405Sjkim jb .Lecb_enc_tail 456238405Sjkim 457238405Sjkim movdqu (%rdi),%xmm2 458238405Sjkim movdqu 16(%rdi),%xmm3 459238405Sjkim movdqu 32(%rdi),%xmm4 460238405Sjkim movdqu 48(%rdi),%xmm5 461238405Sjkim movdqu 64(%rdi),%xmm6 462238405Sjkim movdqu 80(%rdi),%xmm7 463238405Sjkim movdqu 96(%rdi),%xmm8 464238405Sjkim movdqu 112(%rdi),%xmm9 465238405Sjkim leaq 128(%rdi),%rdi 466238405Sjkim subq $128,%rdx 467238405Sjkim jmp .Lecb_enc_loop8_enter 468238405Sjkim.align 16 469238405Sjkim.Lecb_enc_loop8: 470238405Sjkim movups %xmm2,(%rsi) 471238405Sjkim movq %r11,%rcx 472238405Sjkim movdqu (%rdi),%xmm2 473238405Sjkim movl %r10d,%eax 474238405Sjkim movups %xmm3,16(%rsi) 475238405Sjkim movdqu 16(%rdi),%xmm3 476238405Sjkim movups %xmm4,32(%rsi) 477238405Sjkim movdqu 32(%rdi),%xmm4 478238405Sjkim movups %xmm5,48(%rsi) 479238405Sjkim movdqu 48(%rdi),%xmm5 480238405Sjkim movups %xmm6,64(%rsi) 481238405Sjkim movdqu 64(%rdi),%xmm6 482238405Sjkim movups %xmm7,80(%rsi) 483238405Sjkim movdqu 80(%rdi),%xmm7 484238405Sjkim movups %xmm8,96(%rsi) 485238405Sjkim movdqu 96(%rdi),%xmm8 486238405Sjkim movups %xmm9,112(%rsi) 487238405Sjkim leaq 128(%rsi),%rsi 488238405Sjkim movdqu 112(%rdi),%xmm9 489238405Sjkim leaq 128(%rdi),%rdi 490238405Sjkim.Lecb_enc_loop8_enter: 491238405Sjkim 492238405Sjkim call _aesni_encrypt8 493238405Sjkim 494238405Sjkim subq $128,%rdx 495238405Sjkim jnc .Lecb_enc_loop8 496238405Sjkim 497238405Sjkim movups %xmm2,(%rsi) 498238405Sjkim movq %r11,%rcx 499238405Sjkim movups %xmm3,16(%rsi) 500238405Sjkim movl %r10d,%eax 501238405Sjkim movups %xmm4,32(%rsi) 502238405Sjkim movups %xmm5,48(%rsi) 503238405Sjkim movups %xmm6,64(%rsi) 504238405Sjkim movups %xmm7,80(%rsi) 505238405Sjkim movups %xmm8,96(%rsi) 506238405Sjkim movups %xmm9,112(%rsi) 507238405Sjkim leaq 128(%rsi),%rsi 508238405Sjkim addq $128,%rdx 509238405Sjkim jz .Lecb_ret 510238405Sjkim 511238405Sjkim.Lecb_enc_tail: 512238405Sjkim movups (%rdi),%xmm2 513238405Sjkim cmpq $32,%rdx 514238405Sjkim jb .Lecb_enc_one 515238405Sjkim movups 16(%rdi),%xmm3 516238405Sjkim je .Lecb_enc_two 517238405Sjkim movups 32(%rdi),%xmm4 518238405Sjkim cmpq $64,%rdx 519238405Sjkim jb .Lecb_enc_three 520238405Sjkim movups 48(%rdi),%xmm5 521238405Sjkim je .Lecb_enc_four 522238405Sjkim movups 64(%rdi),%xmm6 523238405Sjkim cmpq $96,%rdx 524238405Sjkim jb .Lecb_enc_five 525238405Sjkim movups 80(%rdi),%xmm7 526238405Sjkim je .Lecb_enc_six 527238405Sjkim movdqu 96(%rdi),%xmm8 528238405Sjkim call _aesni_encrypt8 529238405Sjkim movups %xmm2,(%rsi) 530238405Sjkim movups %xmm3,16(%rsi) 531238405Sjkim movups %xmm4,32(%rsi) 532238405Sjkim movups %xmm5,48(%rsi) 533238405Sjkim movups %xmm6,64(%rsi) 534238405Sjkim movups %xmm7,80(%rsi) 535238405Sjkim movups %xmm8,96(%rsi) 536238405Sjkim jmp .Lecb_ret 537238405Sjkim.align 16 538238405Sjkim.Lecb_enc_one: 539238405Sjkim movups (%rcx),%xmm0 540238405Sjkim movups 16(%rcx),%xmm1 541238405Sjkim leaq 32(%rcx),%rcx 542238405Sjkim xorps %xmm0,%xmm2 543238405Sjkim.Loop_enc1_3: 544238405Sjkim.byte 102,15,56,220,209 545238405Sjkim decl %eax 546238405Sjkim movups (%rcx),%xmm1 547238405Sjkim leaq 16(%rcx),%rcx 548238405Sjkim jnz .Loop_enc1_3 549238405Sjkim.byte 102,15,56,221,209 550238405Sjkim movups %xmm2,(%rsi) 551238405Sjkim jmp .Lecb_ret 552238405Sjkim.align 16 553238405Sjkim.Lecb_enc_two: 554238405Sjkim xorps %xmm4,%xmm4 555238405Sjkim call _aesni_encrypt3 556238405Sjkim movups %xmm2,(%rsi) 557238405Sjkim movups %xmm3,16(%rsi) 558238405Sjkim jmp .Lecb_ret 559238405Sjkim.align 16 560238405Sjkim.Lecb_enc_three: 561238405Sjkim call _aesni_encrypt3 562238405Sjkim movups %xmm2,(%rsi) 563238405Sjkim movups %xmm3,16(%rsi) 564238405Sjkim movups %xmm4,32(%rsi) 565238405Sjkim jmp .Lecb_ret 566238405Sjkim.align 16 567238405Sjkim.Lecb_enc_four: 568238405Sjkim call _aesni_encrypt4 569238405Sjkim movups %xmm2,(%rsi) 570238405Sjkim movups %xmm3,16(%rsi) 571238405Sjkim movups %xmm4,32(%rsi) 572238405Sjkim movups %xmm5,48(%rsi) 573238405Sjkim jmp .Lecb_ret 574238405Sjkim.align 16 575238405Sjkim.Lecb_enc_five: 576238405Sjkim xorps %xmm7,%xmm7 577238405Sjkim call _aesni_encrypt6 578238405Sjkim movups %xmm2,(%rsi) 579238405Sjkim movups %xmm3,16(%rsi) 580238405Sjkim movups %xmm4,32(%rsi) 581238405Sjkim movups %xmm5,48(%rsi) 582238405Sjkim movups %xmm6,64(%rsi) 583238405Sjkim jmp .Lecb_ret 584238405Sjkim.align 16 585238405Sjkim.Lecb_enc_six: 586238405Sjkim call _aesni_encrypt6 587238405Sjkim movups %xmm2,(%rsi) 588238405Sjkim movups %xmm3,16(%rsi) 589238405Sjkim movups %xmm4,32(%rsi) 590238405Sjkim movups %xmm5,48(%rsi) 591238405Sjkim movups %xmm6,64(%rsi) 592238405Sjkim movups %xmm7,80(%rsi) 593238405Sjkim jmp .Lecb_ret 594238405Sjkim 595238405Sjkim.align 16 596238405Sjkim.Lecb_decrypt: 597238405Sjkim cmpq $128,%rdx 598238405Sjkim jb .Lecb_dec_tail 599238405Sjkim 600238405Sjkim movdqu (%rdi),%xmm2 601238405Sjkim movdqu 16(%rdi),%xmm3 602238405Sjkim movdqu 32(%rdi),%xmm4 603238405Sjkim movdqu 48(%rdi),%xmm5 604238405Sjkim movdqu 64(%rdi),%xmm6 605238405Sjkim movdqu 80(%rdi),%xmm7 606238405Sjkim movdqu 96(%rdi),%xmm8 607238405Sjkim movdqu 112(%rdi),%xmm9 608238405Sjkim leaq 128(%rdi),%rdi 609238405Sjkim subq $128,%rdx 610238405Sjkim jmp .Lecb_dec_loop8_enter 611238405Sjkim.align 16 612238405Sjkim.Lecb_dec_loop8: 613238405Sjkim movups %xmm2,(%rsi) 614238405Sjkim movq %r11,%rcx 615238405Sjkim movdqu (%rdi),%xmm2 616238405Sjkim movl %r10d,%eax 617238405Sjkim movups %xmm3,16(%rsi) 618238405Sjkim movdqu 16(%rdi),%xmm3 619238405Sjkim movups %xmm4,32(%rsi) 620238405Sjkim movdqu 32(%rdi),%xmm4 621238405Sjkim movups %xmm5,48(%rsi) 622238405Sjkim movdqu 48(%rdi),%xmm5 623238405Sjkim movups %xmm6,64(%rsi) 624238405Sjkim movdqu 64(%rdi),%xmm6 625238405Sjkim movups %xmm7,80(%rsi) 626238405Sjkim movdqu 80(%rdi),%xmm7 627238405Sjkim movups %xmm8,96(%rsi) 628238405Sjkim movdqu 96(%rdi),%xmm8 629238405Sjkim movups %xmm9,112(%rsi) 630238405Sjkim leaq 128(%rsi),%rsi 631238405Sjkim movdqu 112(%rdi),%xmm9 632238405Sjkim leaq 128(%rdi),%rdi 633238405Sjkim.Lecb_dec_loop8_enter: 634238405Sjkim 635238405Sjkim call _aesni_decrypt8 636238405Sjkim 637238405Sjkim movups (%r11),%xmm0 638238405Sjkim subq $128,%rdx 639238405Sjkim jnc .Lecb_dec_loop8 640238405Sjkim 641238405Sjkim movups %xmm2,(%rsi) 642238405Sjkim movq %r11,%rcx 643238405Sjkim movups %xmm3,16(%rsi) 644238405Sjkim movl %r10d,%eax 645238405Sjkim movups %xmm4,32(%rsi) 646238405Sjkim movups %xmm5,48(%rsi) 647238405Sjkim movups %xmm6,64(%rsi) 648238405Sjkim movups %xmm7,80(%rsi) 649238405Sjkim movups %xmm8,96(%rsi) 650238405Sjkim movups %xmm9,112(%rsi) 651238405Sjkim leaq 128(%rsi),%rsi 652238405Sjkim addq $128,%rdx 653238405Sjkim jz .Lecb_ret 654238405Sjkim 655238405Sjkim.Lecb_dec_tail: 656238405Sjkim movups (%rdi),%xmm2 657238405Sjkim cmpq $32,%rdx 658238405Sjkim jb .Lecb_dec_one 659238405Sjkim movups 16(%rdi),%xmm3 660238405Sjkim je .Lecb_dec_two 661238405Sjkim movups 32(%rdi),%xmm4 662238405Sjkim cmpq $64,%rdx 663238405Sjkim jb .Lecb_dec_three 664238405Sjkim movups 48(%rdi),%xmm5 665238405Sjkim je .Lecb_dec_four 666238405Sjkim movups 64(%rdi),%xmm6 667238405Sjkim cmpq $96,%rdx 668238405Sjkim jb .Lecb_dec_five 669238405Sjkim movups 80(%rdi),%xmm7 670238405Sjkim je .Lecb_dec_six 671238405Sjkim movups 96(%rdi),%xmm8 672238405Sjkim movups (%rcx),%xmm0 673238405Sjkim call _aesni_decrypt8 674238405Sjkim movups %xmm2,(%rsi) 675238405Sjkim movups %xmm3,16(%rsi) 676238405Sjkim movups %xmm4,32(%rsi) 677238405Sjkim movups %xmm5,48(%rsi) 678238405Sjkim movups %xmm6,64(%rsi) 679238405Sjkim movups %xmm7,80(%rsi) 680238405Sjkim movups %xmm8,96(%rsi) 681238405Sjkim jmp .Lecb_ret 682238405Sjkim.align 16 683238405Sjkim.Lecb_dec_one: 684238405Sjkim movups (%rcx),%xmm0 685238405Sjkim movups 16(%rcx),%xmm1 686238405Sjkim leaq 32(%rcx),%rcx 687238405Sjkim xorps %xmm0,%xmm2 688238405Sjkim.Loop_dec1_4: 689238405Sjkim.byte 102,15,56,222,209 690238405Sjkim decl %eax 691238405Sjkim movups (%rcx),%xmm1 692238405Sjkim leaq 16(%rcx),%rcx 693238405Sjkim jnz .Loop_dec1_4 694238405Sjkim.byte 102,15,56,223,209 695238405Sjkim movups %xmm2,(%rsi) 696238405Sjkim jmp .Lecb_ret 697238405Sjkim.align 16 698238405Sjkim.Lecb_dec_two: 699238405Sjkim xorps %xmm4,%xmm4 700238405Sjkim call _aesni_decrypt3 701238405Sjkim movups %xmm2,(%rsi) 702238405Sjkim movups %xmm3,16(%rsi) 703238405Sjkim jmp .Lecb_ret 704238405Sjkim.align 16 705238405Sjkim.Lecb_dec_three: 706238405Sjkim call _aesni_decrypt3 707238405Sjkim movups %xmm2,(%rsi) 708238405Sjkim movups %xmm3,16(%rsi) 709238405Sjkim movups %xmm4,32(%rsi) 710238405Sjkim jmp .Lecb_ret 711238405Sjkim.align 16 712238405Sjkim.Lecb_dec_four: 713238405Sjkim call _aesni_decrypt4 714238405Sjkim movups %xmm2,(%rsi) 715238405Sjkim movups %xmm3,16(%rsi) 716238405Sjkim movups %xmm4,32(%rsi) 717238405Sjkim movups %xmm5,48(%rsi) 718238405Sjkim jmp .Lecb_ret 719238405Sjkim.align 16 720238405Sjkim.Lecb_dec_five: 721238405Sjkim xorps %xmm7,%xmm7 722238405Sjkim call _aesni_decrypt6 723238405Sjkim movups %xmm2,(%rsi) 724238405Sjkim movups %xmm3,16(%rsi) 725238405Sjkim movups %xmm4,32(%rsi) 726238405Sjkim movups %xmm5,48(%rsi) 727238405Sjkim movups %xmm6,64(%rsi) 728238405Sjkim jmp .Lecb_ret 729238405Sjkim.align 16 730238405Sjkim.Lecb_dec_six: 731238405Sjkim call _aesni_decrypt6 732238405Sjkim movups %xmm2,(%rsi) 733238405Sjkim movups %xmm3,16(%rsi) 734238405Sjkim movups %xmm4,32(%rsi) 735238405Sjkim movups %xmm5,48(%rsi) 736238405Sjkim movups %xmm6,64(%rsi) 737238405Sjkim movups %xmm7,80(%rsi) 738238405Sjkim 739238405Sjkim.Lecb_ret: 740238405Sjkim .byte 0xf3,0xc3 741238405Sjkim.size aesni_ecb_encrypt,.-aesni_ecb_encrypt 742238405Sjkim.globl aesni_ccm64_encrypt_blocks 743238405Sjkim.type aesni_ccm64_encrypt_blocks,@function 744238405Sjkim.align 16 745238405Sjkimaesni_ccm64_encrypt_blocks: 746238405Sjkim movl 240(%rcx),%eax 747238405Sjkim movdqu (%r8),%xmm9 748238405Sjkim movdqa .Lincrement64(%rip),%xmm6 749238405Sjkim movdqa .Lbswap_mask(%rip),%xmm7 750238405Sjkim 751238405Sjkim shrl $1,%eax 752238405Sjkim leaq 0(%rcx),%r11 753238405Sjkim movdqu (%r9),%xmm3 754238405Sjkim movdqa %xmm9,%xmm2 755238405Sjkim movl %eax,%r10d 756238405Sjkim.byte 102,68,15,56,0,207 757238405Sjkim jmp .Lccm64_enc_outer 758238405Sjkim.align 16 759238405Sjkim.Lccm64_enc_outer: 760238405Sjkim movups (%r11),%xmm0 761238405Sjkim movl %r10d,%eax 762238405Sjkim movups (%rdi),%xmm8 763238405Sjkim 764238405Sjkim xorps %xmm0,%xmm2 765238405Sjkim movups 16(%r11),%xmm1 766238405Sjkim xorps %xmm8,%xmm0 767238405Sjkim leaq 32(%r11),%rcx 768238405Sjkim xorps %xmm0,%xmm3 769238405Sjkim movups (%rcx),%xmm0 770238405Sjkim 771238405Sjkim.Lccm64_enc2_loop: 772238405Sjkim.byte 102,15,56,220,209 773238405Sjkim decl %eax 774238405Sjkim.byte 102,15,56,220,217 775238405Sjkim movups 16(%rcx),%xmm1 776238405Sjkim.byte 102,15,56,220,208 777238405Sjkim leaq 32(%rcx),%rcx 778238405Sjkim.byte 102,15,56,220,216 779238405Sjkim movups 0(%rcx),%xmm0 780238405Sjkim jnz .Lccm64_enc2_loop 781238405Sjkim.byte 102,15,56,220,209 782238405Sjkim.byte 102,15,56,220,217 783238405Sjkim paddq %xmm6,%xmm9 784238405Sjkim.byte 102,15,56,221,208 785238405Sjkim.byte 102,15,56,221,216 786238405Sjkim 787238405Sjkim decq %rdx 788238405Sjkim leaq 16(%rdi),%rdi 789238405Sjkim xorps %xmm2,%xmm8 790238405Sjkim movdqa %xmm9,%xmm2 791238405Sjkim movups %xmm8,(%rsi) 792238405Sjkim leaq 16(%rsi),%rsi 793238405Sjkim.byte 102,15,56,0,215 794238405Sjkim jnz .Lccm64_enc_outer 795238405Sjkim 796238405Sjkim movups %xmm3,(%r9) 797238405Sjkim .byte 0xf3,0xc3 798238405Sjkim.size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks 799238405Sjkim.globl aesni_ccm64_decrypt_blocks 800238405Sjkim.type aesni_ccm64_decrypt_blocks,@function 801238405Sjkim.align 16 802238405Sjkimaesni_ccm64_decrypt_blocks: 803238405Sjkim movl 240(%rcx),%eax 804238405Sjkim movups (%r8),%xmm9 805238405Sjkim movdqu (%r9),%xmm3 806238405Sjkim movdqa .Lincrement64(%rip),%xmm6 807238405Sjkim movdqa .Lbswap_mask(%rip),%xmm7 808238405Sjkim 809238405Sjkim movaps %xmm9,%xmm2 810238405Sjkim movl %eax,%r10d 811238405Sjkim movq %rcx,%r11 812238405Sjkim.byte 102,68,15,56,0,207 813238405Sjkim movups (%rcx),%xmm0 814238405Sjkim movups 16(%rcx),%xmm1 815238405Sjkim leaq 32(%rcx),%rcx 816238405Sjkim xorps %xmm0,%xmm2 817238405Sjkim.Loop_enc1_5: 818238405Sjkim.byte 102,15,56,220,209 819238405Sjkim decl %eax 820238405Sjkim movups (%rcx),%xmm1 821238405Sjkim leaq 16(%rcx),%rcx 822238405Sjkim jnz .Loop_enc1_5 823238405Sjkim.byte 102,15,56,221,209 824238405Sjkim movups (%rdi),%xmm8 825238405Sjkim paddq %xmm6,%xmm9 826238405Sjkim leaq 16(%rdi),%rdi 827238405Sjkim jmp .Lccm64_dec_outer 828238405Sjkim.align 16 829238405Sjkim.Lccm64_dec_outer: 830238405Sjkim xorps %xmm2,%xmm8 831238405Sjkim movdqa %xmm9,%xmm2 832238405Sjkim movl %r10d,%eax 833238405Sjkim movups %xmm8,(%rsi) 834238405Sjkim leaq 16(%rsi),%rsi 835238405Sjkim.byte 102,15,56,0,215 836238405Sjkim 837238405Sjkim subq $1,%rdx 838238405Sjkim jz .Lccm64_dec_break 839238405Sjkim 840238405Sjkim movups (%r11),%xmm0 841238405Sjkim shrl $1,%eax 842238405Sjkim movups 16(%r11),%xmm1 843238405Sjkim xorps %xmm0,%xmm8 844238405Sjkim leaq 32(%r11),%rcx 845238405Sjkim xorps %xmm0,%xmm2 846238405Sjkim xorps %xmm8,%xmm3 847238405Sjkim movups (%rcx),%xmm0 848238405Sjkim 849238405Sjkim.Lccm64_dec2_loop: 850238405Sjkim.byte 102,15,56,220,209 851238405Sjkim decl %eax 852238405Sjkim.byte 102,15,56,220,217 853238405Sjkim movups 16(%rcx),%xmm1 854238405Sjkim.byte 102,15,56,220,208 855238405Sjkim leaq 32(%rcx),%rcx 856238405Sjkim.byte 102,15,56,220,216 857238405Sjkim movups 0(%rcx),%xmm0 858238405Sjkim jnz .Lccm64_dec2_loop 859238405Sjkim movups (%rdi),%xmm8 860238405Sjkim paddq %xmm6,%xmm9 861238405Sjkim.byte 102,15,56,220,209 862238405Sjkim.byte 102,15,56,220,217 863238405Sjkim leaq 16(%rdi),%rdi 864238405Sjkim.byte 102,15,56,221,208 865238405Sjkim.byte 102,15,56,221,216 866238405Sjkim jmp .Lccm64_dec_outer 867238405Sjkim 868238405Sjkim.align 16 869238405Sjkim.Lccm64_dec_break: 870238405Sjkim 871238405Sjkim movups (%r11),%xmm0 872238405Sjkim movups 16(%r11),%xmm1 873238405Sjkim xorps %xmm0,%xmm8 874238405Sjkim leaq 32(%r11),%r11 875238405Sjkim xorps %xmm8,%xmm3 876238405Sjkim.Loop_enc1_6: 877238405Sjkim.byte 102,15,56,220,217 878238405Sjkim decl %eax 879238405Sjkim movups (%r11),%xmm1 880238405Sjkim leaq 16(%r11),%r11 881238405Sjkim jnz .Loop_enc1_6 882238405Sjkim.byte 102,15,56,221,217 883238405Sjkim movups %xmm3,(%r9) 884238405Sjkim .byte 0xf3,0xc3 885238405Sjkim.size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks 886238405Sjkim.globl aesni_ctr32_encrypt_blocks 887238405Sjkim.type aesni_ctr32_encrypt_blocks,@function 888238405Sjkim.align 16 889238405Sjkimaesni_ctr32_encrypt_blocks: 890238405Sjkim cmpq $1,%rdx 891238405Sjkim je .Lctr32_one_shortcut 892238405Sjkim 893238405Sjkim movdqu (%r8),%xmm14 894238405Sjkim movdqa .Lbswap_mask(%rip),%xmm15 895238405Sjkim xorl %eax,%eax 896238405Sjkim.byte 102,69,15,58,22,242,3 897238405Sjkim.byte 102,68,15,58,34,240,3 898238405Sjkim 899238405Sjkim movl 240(%rcx),%eax 900238405Sjkim bswapl %r10d 901238405Sjkim pxor %xmm12,%xmm12 902238405Sjkim pxor %xmm13,%xmm13 903238405Sjkim.byte 102,69,15,58,34,226,0 904238405Sjkim leaq 3(%r10),%r11 905238405Sjkim.byte 102,69,15,58,34,235,0 906238405Sjkim incl %r10d 907238405Sjkim.byte 102,69,15,58,34,226,1 908238405Sjkim incq %r11 909238405Sjkim.byte 102,69,15,58,34,235,1 910238405Sjkim incl %r10d 911238405Sjkim.byte 102,69,15,58,34,226,2 912238405Sjkim incq %r11 913238405Sjkim.byte 102,69,15,58,34,235,2 914238405Sjkim movdqa %xmm12,-40(%rsp) 915238405Sjkim.byte 102,69,15,56,0,231 916238405Sjkim movdqa %xmm13,-24(%rsp) 917238405Sjkim.byte 102,69,15,56,0,239 918238405Sjkim 919238405Sjkim pshufd $192,%xmm12,%xmm2 920238405Sjkim pshufd $128,%xmm12,%xmm3 921238405Sjkim pshufd $64,%xmm12,%xmm4 922238405Sjkim cmpq $6,%rdx 923238405Sjkim jb .Lctr32_tail 924238405Sjkim shrl $1,%eax 925238405Sjkim movq %rcx,%r11 926238405Sjkim movl %eax,%r10d 927238405Sjkim subq $6,%rdx 928238405Sjkim jmp .Lctr32_loop6 929238405Sjkim 930238405Sjkim.align 16 931238405Sjkim.Lctr32_loop6: 932238405Sjkim pshufd $192,%xmm13,%xmm5 933238405Sjkim por %xmm14,%xmm2 934238405Sjkim movups (%r11),%xmm0 935238405Sjkim pshufd $128,%xmm13,%xmm6 936238405Sjkim por %xmm14,%xmm3 937238405Sjkim movups 16(%r11),%xmm1 938238405Sjkim pshufd $64,%xmm13,%xmm7 939238405Sjkim por %xmm14,%xmm4 940238405Sjkim por %xmm14,%xmm5 941238405Sjkim xorps %xmm0,%xmm2 942238405Sjkim por %xmm14,%xmm6 943238405Sjkim por %xmm14,%xmm7 944238405Sjkim 945238405Sjkim 946238405Sjkim 947238405Sjkim 948238405Sjkim pxor %xmm0,%xmm3 949238405Sjkim.byte 102,15,56,220,209 950238405Sjkim leaq 32(%r11),%rcx 951238405Sjkim pxor %xmm0,%xmm4 952238405Sjkim.byte 102,15,56,220,217 953238405Sjkim movdqa .Lincrement32(%rip),%xmm13 954238405Sjkim pxor %xmm0,%xmm5 955238405Sjkim.byte 102,15,56,220,225 956238405Sjkim movdqa -40(%rsp),%xmm12 957238405Sjkim pxor %xmm0,%xmm6 958238405Sjkim.byte 102,15,56,220,233 959238405Sjkim pxor %xmm0,%xmm7 960238405Sjkim movups (%rcx),%xmm0 961238405Sjkim decl %eax 962238405Sjkim.byte 102,15,56,220,241 963238405Sjkim.byte 102,15,56,220,249 964238405Sjkim jmp .Lctr32_enc_loop6_enter 965238405Sjkim.align 16 966238405Sjkim.Lctr32_enc_loop6: 967238405Sjkim.byte 102,15,56,220,209 968238405Sjkim.byte 102,15,56,220,217 969238405Sjkim decl %eax 970238405Sjkim.byte 102,15,56,220,225 971238405Sjkim.byte 102,15,56,220,233 972238405Sjkim.byte 102,15,56,220,241 973238405Sjkim.byte 102,15,56,220,249 974238405Sjkim.Lctr32_enc_loop6_enter: 975238405Sjkim movups 16(%rcx),%xmm1 976238405Sjkim.byte 102,15,56,220,208 977238405Sjkim.byte 102,15,56,220,216 978238405Sjkim leaq 32(%rcx),%rcx 979238405Sjkim.byte 102,15,56,220,224 980238405Sjkim.byte 102,15,56,220,232 981238405Sjkim.byte 102,15,56,220,240 982238405Sjkim.byte 102,15,56,220,248 983238405Sjkim movups (%rcx),%xmm0 984238405Sjkim jnz .Lctr32_enc_loop6 985238405Sjkim 986238405Sjkim.byte 102,15,56,220,209 987238405Sjkim paddd %xmm13,%xmm12 988238405Sjkim.byte 102,15,56,220,217 989238405Sjkim paddd -24(%rsp),%xmm13 990238405Sjkim.byte 102,15,56,220,225 991238405Sjkim movdqa %xmm12,-40(%rsp) 992238405Sjkim.byte 102,15,56,220,233 993238405Sjkim movdqa %xmm13,-24(%rsp) 994238405Sjkim.byte 102,15,56,220,241 995238405Sjkim.byte 102,69,15,56,0,231 996238405Sjkim.byte 102,15,56,220,249 997238405Sjkim.byte 102,69,15,56,0,239 998238405Sjkim 999238405Sjkim.byte 102,15,56,221,208 1000238405Sjkim movups (%rdi),%xmm8 1001238405Sjkim.byte 102,15,56,221,216 1002238405Sjkim movups 16(%rdi),%xmm9 1003238405Sjkim.byte 102,15,56,221,224 1004238405Sjkim movups 32(%rdi),%xmm10 1005238405Sjkim.byte 102,15,56,221,232 1006238405Sjkim movups 48(%rdi),%xmm11 1007238405Sjkim.byte 102,15,56,221,240 1008238405Sjkim movups 64(%rdi),%xmm1 1009238405Sjkim.byte 102,15,56,221,248 1010238405Sjkim movups 80(%rdi),%xmm0 1011238405Sjkim leaq 96(%rdi),%rdi 1012238405Sjkim 1013238405Sjkim xorps %xmm2,%xmm8 1014238405Sjkim pshufd $192,%xmm12,%xmm2 1015238405Sjkim xorps %xmm3,%xmm9 1016238405Sjkim pshufd $128,%xmm12,%xmm3 1017238405Sjkim movups %xmm8,(%rsi) 1018238405Sjkim xorps %xmm4,%xmm10 1019238405Sjkim pshufd $64,%xmm12,%xmm4 1020238405Sjkim movups %xmm9,16(%rsi) 1021238405Sjkim xorps %xmm5,%xmm11 1022238405Sjkim movups %xmm10,32(%rsi) 1023238405Sjkim xorps %xmm6,%xmm1 1024238405Sjkim movups %xmm11,48(%rsi) 1025238405Sjkim xorps %xmm7,%xmm0 1026238405Sjkim movups %xmm1,64(%rsi) 1027238405Sjkim movups %xmm0,80(%rsi) 1028238405Sjkim leaq 96(%rsi),%rsi 1029238405Sjkim movl %r10d,%eax 1030238405Sjkim subq $6,%rdx 1031238405Sjkim jnc .Lctr32_loop6 1032238405Sjkim 1033238405Sjkim addq $6,%rdx 1034238405Sjkim jz .Lctr32_done 1035238405Sjkim movq %r11,%rcx 1036238405Sjkim leal 1(%rax,%rax,1),%eax 1037238405Sjkim 1038238405Sjkim.Lctr32_tail: 1039238405Sjkim por %xmm14,%xmm2 1040238405Sjkim movups (%rdi),%xmm8 1041238405Sjkim cmpq $2,%rdx 1042238405Sjkim jb .Lctr32_one 1043238405Sjkim 1044238405Sjkim por %xmm14,%xmm3 1045238405Sjkim movups 16(%rdi),%xmm9 1046238405Sjkim je .Lctr32_two 1047238405Sjkim 1048238405Sjkim pshufd $192,%xmm13,%xmm5 1049238405Sjkim por %xmm14,%xmm4 1050238405Sjkim movups 32(%rdi),%xmm10 1051238405Sjkim cmpq $4,%rdx 1052238405Sjkim jb .Lctr32_three 1053238405Sjkim 1054238405Sjkim pshufd $128,%xmm13,%xmm6 1055238405Sjkim por %xmm14,%xmm5 1056238405Sjkim movups 48(%rdi),%xmm11 1057238405Sjkim je .Lctr32_four 1058238405Sjkim 1059238405Sjkim por %xmm14,%xmm6 1060238405Sjkim xorps %xmm7,%xmm7 1061238405Sjkim 1062238405Sjkim call _aesni_encrypt6 1063238405Sjkim 1064238405Sjkim movups 64(%rdi),%xmm1 1065238405Sjkim xorps %xmm2,%xmm8 1066238405Sjkim xorps %xmm3,%xmm9 1067238405Sjkim movups %xmm8,(%rsi) 1068238405Sjkim xorps %xmm4,%xmm10 1069238405Sjkim movups %xmm9,16(%rsi) 1070238405Sjkim xorps %xmm5,%xmm11 1071238405Sjkim movups %xmm10,32(%rsi) 1072238405Sjkim xorps %xmm6,%xmm1 1073238405Sjkim movups %xmm11,48(%rsi) 1074238405Sjkim movups %xmm1,64(%rsi) 1075238405Sjkim jmp .Lctr32_done 1076238405Sjkim 1077238405Sjkim.align 16 1078238405Sjkim.Lctr32_one_shortcut: 1079238405Sjkim movups (%r8),%xmm2 1080238405Sjkim movups (%rdi),%xmm8 1081238405Sjkim movl 240(%rcx),%eax 1082238405Sjkim.Lctr32_one: 1083238405Sjkim movups (%rcx),%xmm0 1084238405Sjkim movups 16(%rcx),%xmm1 1085238405Sjkim leaq 32(%rcx),%rcx 1086238405Sjkim xorps %xmm0,%xmm2 1087238405Sjkim.Loop_enc1_7: 1088238405Sjkim.byte 102,15,56,220,209 1089238405Sjkim decl %eax 1090238405Sjkim movups (%rcx),%xmm1 1091238405Sjkim leaq 16(%rcx),%rcx 1092238405Sjkim jnz .Loop_enc1_7 1093238405Sjkim.byte 102,15,56,221,209 1094238405Sjkim xorps %xmm2,%xmm8 1095238405Sjkim movups %xmm8,(%rsi) 1096238405Sjkim jmp .Lctr32_done 1097238405Sjkim 1098238405Sjkim.align 16 1099238405Sjkim.Lctr32_two: 1100238405Sjkim xorps %xmm4,%xmm4 1101238405Sjkim call _aesni_encrypt3 1102238405Sjkim xorps %xmm2,%xmm8 1103238405Sjkim xorps %xmm3,%xmm9 1104238405Sjkim movups %xmm8,(%rsi) 1105238405Sjkim movups %xmm9,16(%rsi) 1106238405Sjkim jmp .Lctr32_done 1107238405Sjkim 1108238405Sjkim.align 16 1109238405Sjkim.Lctr32_three: 1110238405Sjkim call _aesni_encrypt3 1111238405Sjkim xorps %xmm2,%xmm8 1112238405Sjkim xorps %xmm3,%xmm9 1113238405Sjkim movups %xmm8,(%rsi) 1114238405Sjkim xorps %xmm4,%xmm10 1115238405Sjkim movups %xmm9,16(%rsi) 1116238405Sjkim movups %xmm10,32(%rsi) 1117238405Sjkim jmp .Lctr32_done 1118238405Sjkim 1119238405Sjkim.align 16 1120238405Sjkim.Lctr32_four: 1121238405Sjkim call _aesni_encrypt4 1122238405Sjkim xorps %xmm2,%xmm8 1123238405Sjkim xorps %xmm3,%xmm9 1124238405Sjkim movups %xmm8,(%rsi) 1125238405Sjkim xorps %xmm4,%xmm10 1126238405Sjkim movups %xmm9,16(%rsi) 1127238405Sjkim xorps %xmm5,%xmm11 1128238405Sjkim movups %xmm10,32(%rsi) 1129238405Sjkim movups %xmm11,48(%rsi) 1130238405Sjkim 1131238405Sjkim.Lctr32_done: 1132238405Sjkim .byte 0xf3,0xc3 1133238405Sjkim.size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks 1134238405Sjkim.globl aesni_xts_encrypt 1135238405Sjkim.type aesni_xts_encrypt,@function 1136238405Sjkim.align 16 1137238405Sjkimaesni_xts_encrypt: 1138238405Sjkim leaq -104(%rsp),%rsp 1139238405Sjkim movups (%r9),%xmm15 1140238405Sjkim movl 240(%r8),%eax 1141238405Sjkim movl 240(%rcx),%r10d 1142238405Sjkim movups (%r8),%xmm0 1143238405Sjkim movups 16(%r8),%xmm1 1144238405Sjkim leaq 32(%r8),%r8 1145238405Sjkim xorps %xmm0,%xmm15 1146238405Sjkim.Loop_enc1_8: 1147238405Sjkim.byte 102,68,15,56,220,249 1148238405Sjkim decl %eax 1149238405Sjkim movups (%r8),%xmm1 1150238405Sjkim leaq 16(%r8),%r8 1151238405Sjkim jnz .Loop_enc1_8 1152238405Sjkim.byte 102,68,15,56,221,249 1153238405Sjkim movq %rcx,%r11 1154238405Sjkim movl %r10d,%eax 1155238405Sjkim movq %rdx,%r9 1156238405Sjkim andq $-16,%rdx 1157238405Sjkim 1158238405Sjkim movdqa .Lxts_magic(%rip),%xmm8 1159238405Sjkim pxor %xmm14,%xmm14 1160238405Sjkim pcmpgtd %xmm15,%xmm14 1161238405Sjkim pshufd $19,%xmm14,%xmm9 1162238405Sjkim pxor %xmm14,%xmm14 1163238405Sjkim movdqa %xmm15,%xmm10 1164238405Sjkim paddq %xmm15,%xmm15 1165238405Sjkim pand %xmm8,%xmm9 1166238405Sjkim pcmpgtd %xmm15,%xmm14 1167238405Sjkim pxor %xmm9,%xmm15 1168238405Sjkim pshufd $19,%xmm14,%xmm9 1169238405Sjkim pxor %xmm14,%xmm14 1170238405Sjkim movdqa %xmm15,%xmm11 1171238405Sjkim paddq %xmm15,%xmm15 1172238405Sjkim pand %xmm8,%xmm9 1173238405Sjkim pcmpgtd %xmm15,%xmm14 1174238405Sjkim pxor %xmm9,%xmm15 1175238405Sjkim pshufd $19,%xmm14,%xmm9 1176238405Sjkim pxor %xmm14,%xmm14 1177238405Sjkim movdqa %xmm15,%xmm12 1178238405Sjkim paddq %xmm15,%xmm15 1179238405Sjkim pand %xmm8,%xmm9 1180238405Sjkim pcmpgtd %xmm15,%xmm14 1181238405Sjkim pxor %xmm9,%xmm15 1182238405Sjkim pshufd $19,%xmm14,%xmm9 1183238405Sjkim pxor %xmm14,%xmm14 1184238405Sjkim movdqa %xmm15,%xmm13 1185238405Sjkim paddq %xmm15,%xmm15 1186238405Sjkim pand %xmm8,%xmm9 1187238405Sjkim pcmpgtd %xmm15,%xmm14 1188238405Sjkim pxor %xmm9,%xmm15 1189238405Sjkim subq $96,%rdx 1190238405Sjkim jc .Lxts_enc_short 1191238405Sjkim 1192238405Sjkim shrl $1,%eax 1193238405Sjkim subl $1,%eax 1194238405Sjkim movl %eax,%r10d 1195238405Sjkim jmp .Lxts_enc_grandloop 1196238405Sjkim 1197238405Sjkim.align 16 1198238405Sjkim.Lxts_enc_grandloop: 1199238405Sjkim pshufd $19,%xmm14,%xmm9 1200238405Sjkim movdqa %xmm15,%xmm14 1201238405Sjkim paddq %xmm15,%xmm15 1202238405Sjkim movdqu 0(%rdi),%xmm2 1203238405Sjkim pand %xmm8,%xmm9 1204238405Sjkim movdqu 16(%rdi),%xmm3 1205238405Sjkim pxor %xmm9,%xmm15 1206238405Sjkim 1207238405Sjkim movdqu 32(%rdi),%xmm4 1208238405Sjkim pxor %xmm10,%xmm2 1209238405Sjkim movdqu 48(%rdi),%xmm5 1210238405Sjkim pxor %xmm11,%xmm3 1211238405Sjkim movdqu 64(%rdi),%xmm6 1212238405Sjkim pxor %xmm12,%xmm4 1213238405Sjkim movdqu 80(%rdi),%xmm7 1214238405Sjkim leaq 96(%rdi),%rdi 1215238405Sjkim pxor %xmm13,%xmm5 1216238405Sjkim movups (%r11),%xmm0 1217238405Sjkim pxor %xmm14,%xmm6 1218238405Sjkim pxor %xmm15,%xmm7 1219238405Sjkim 1220238405Sjkim 1221238405Sjkim 1222238405Sjkim movups 16(%r11),%xmm1 1223238405Sjkim pxor %xmm0,%xmm2 1224238405Sjkim pxor %xmm0,%xmm3 1225238405Sjkim movdqa %xmm10,0(%rsp) 1226238405Sjkim.byte 102,15,56,220,209 1227238405Sjkim leaq 32(%r11),%rcx 1228238405Sjkim pxor %xmm0,%xmm4 1229238405Sjkim movdqa %xmm11,16(%rsp) 1230238405Sjkim.byte 102,15,56,220,217 1231238405Sjkim pxor %xmm0,%xmm5 1232238405Sjkim movdqa %xmm12,32(%rsp) 1233238405Sjkim.byte 102,15,56,220,225 1234238405Sjkim pxor %xmm0,%xmm6 1235238405Sjkim movdqa %xmm13,48(%rsp) 1236238405Sjkim.byte 102,15,56,220,233 1237238405Sjkim pxor %xmm0,%xmm7 1238238405Sjkim movups (%rcx),%xmm0 1239238405Sjkim decl %eax 1240238405Sjkim movdqa %xmm14,64(%rsp) 1241238405Sjkim.byte 102,15,56,220,241 1242238405Sjkim movdqa %xmm15,80(%rsp) 1243238405Sjkim.byte 102,15,56,220,249 1244238405Sjkim pxor %xmm14,%xmm14 1245238405Sjkim pcmpgtd %xmm15,%xmm14 1246238405Sjkim jmp .Lxts_enc_loop6_enter 1247238405Sjkim 1248238405Sjkim.align 16 1249238405Sjkim.Lxts_enc_loop6: 1250238405Sjkim.byte 102,15,56,220,209 1251238405Sjkim.byte 102,15,56,220,217 1252238405Sjkim decl %eax 1253238405Sjkim.byte 102,15,56,220,225 1254238405Sjkim.byte 102,15,56,220,233 1255238405Sjkim.byte 102,15,56,220,241 1256238405Sjkim.byte 102,15,56,220,249 1257238405Sjkim.Lxts_enc_loop6_enter: 1258238405Sjkim movups 16(%rcx),%xmm1 1259238405Sjkim.byte 102,15,56,220,208 1260238405Sjkim.byte 102,15,56,220,216 1261238405Sjkim leaq 32(%rcx),%rcx 1262238405Sjkim.byte 102,15,56,220,224 1263238405Sjkim.byte 102,15,56,220,232 1264238405Sjkim.byte 102,15,56,220,240 1265238405Sjkim.byte 102,15,56,220,248 1266238405Sjkim movups (%rcx),%xmm0 1267238405Sjkim jnz .Lxts_enc_loop6 1268238405Sjkim 1269238405Sjkim pshufd $19,%xmm14,%xmm9 1270238405Sjkim pxor %xmm14,%xmm14 1271238405Sjkim paddq %xmm15,%xmm15 1272238405Sjkim.byte 102,15,56,220,209 1273238405Sjkim pand %xmm8,%xmm9 1274238405Sjkim.byte 102,15,56,220,217 1275238405Sjkim pcmpgtd %xmm15,%xmm14 1276238405Sjkim.byte 102,15,56,220,225 1277238405Sjkim pxor %xmm9,%xmm15 1278238405Sjkim.byte 102,15,56,220,233 1279238405Sjkim.byte 102,15,56,220,241 1280238405Sjkim.byte 102,15,56,220,249 1281238405Sjkim movups 16(%rcx),%xmm1 1282238405Sjkim 1283238405Sjkim pshufd $19,%xmm14,%xmm9 1284238405Sjkim pxor %xmm14,%xmm14 1285238405Sjkim movdqa %xmm15,%xmm10 1286238405Sjkim paddq %xmm15,%xmm15 1287238405Sjkim.byte 102,15,56,220,208 1288238405Sjkim pand %xmm8,%xmm9 1289238405Sjkim.byte 102,15,56,220,216 1290238405Sjkim pcmpgtd %xmm15,%xmm14 1291238405Sjkim.byte 102,15,56,220,224 1292238405Sjkim pxor %xmm9,%xmm15 1293238405Sjkim.byte 102,15,56,220,232 1294238405Sjkim.byte 102,15,56,220,240 1295238405Sjkim.byte 102,15,56,220,248 1296238405Sjkim movups 32(%rcx),%xmm0 1297238405Sjkim 1298238405Sjkim pshufd $19,%xmm14,%xmm9 1299238405Sjkim pxor %xmm14,%xmm14 1300238405Sjkim movdqa %xmm15,%xmm11 1301238405Sjkim paddq %xmm15,%xmm15 1302238405Sjkim.byte 102,15,56,220,209 1303238405Sjkim pand %xmm8,%xmm9 1304238405Sjkim.byte 102,15,56,220,217 1305238405Sjkim pcmpgtd %xmm15,%xmm14 1306238405Sjkim.byte 102,15,56,220,225 1307238405Sjkim pxor %xmm9,%xmm15 1308238405Sjkim.byte 102,15,56,220,233 1309238405Sjkim.byte 102,15,56,220,241 1310238405Sjkim.byte 102,15,56,220,249 1311238405Sjkim 1312238405Sjkim pshufd $19,%xmm14,%xmm9 1313238405Sjkim pxor %xmm14,%xmm14 1314238405Sjkim movdqa %xmm15,%xmm12 1315238405Sjkim paddq %xmm15,%xmm15 1316238405Sjkim.byte 102,15,56,221,208 1317238405Sjkim pand %xmm8,%xmm9 1318238405Sjkim.byte 102,15,56,221,216 1319238405Sjkim pcmpgtd %xmm15,%xmm14 1320238405Sjkim.byte 102,15,56,221,224 1321238405Sjkim pxor %xmm9,%xmm15 1322238405Sjkim.byte 102,15,56,221,232 1323238405Sjkim.byte 102,15,56,221,240 1324238405Sjkim.byte 102,15,56,221,248 1325238405Sjkim 1326238405Sjkim pshufd $19,%xmm14,%xmm9 1327238405Sjkim pxor %xmm14,%xmm14 1328238405Sjkim movdqa %xmm15,%xmm13 1329238405Sjkim paddq %xmm15,%xmm15 1330238405Sjkim xorps 0(%rsp),%xmm2 1331238405Sjkim pand %xmm8,%xmm9 1332238405Sjkim xorps 16(%rsp),%xmm3 1333238405Sjkim pcmpgtd %xmm15,%xmm14 1334238405Sjkim pxor %xmm9,%xmm15 1335238405Sjkim 1336238405Sjkim xorps 32(%rsp),%xmm4 1337238405Sjkim movups %xmm2,0(%rsi) 1338238405Sjkim xorps 48(%rsp),%xmm5 1339238405Sjkim movups %xmm3,16(%rsi) 1340238405Sjkim xorps 64(%rsp),%xmm6 1341238405Sjkim movups %xmm4,32(%rsi) 1342238405Sjkim xorps 80(%rsp),%xmm7 1343238405Sjkim movups %xmm5,48(%rsi) 1344238405Sjkim movl %r10d,%eax 1345238405Sjkim movups %xmm6,64(%rsi) 1346238405Sjkim movups %xmm7,80(%rsi) 1347238405Sjkim leaq 96(%rsi),%rsi 1348238405Sjkim subq $96,%rdx 1349238405Sjkim jnc .Lxts_enc_grandloop 1350238405Sjkim 1351238405Sjkim leal 3(%rax,%rax,1),%eax 1352238405Sjkim movq %r11,%rcx 1353238405Sjkim movl %eax,%r10d 1354238405Sjkim 1355238405Sjkim.Lxts_enc_short: 1356238405Sjkim addq $96,%rdx 1357238405Sjkim jz .Lxts_enc_done 1358238405Sjkim 1359238405Sjkim cmpq $32,%rdx 1360238405Sjkim jb .Lxts_enc_one 1361238405Sjkim je .Lxts_enc_two 1362238405Sjkim 1363238405Sjkim cmpq $64,%rdx 1364238405Sjkim jb .Lxts_enc_three 1365238405Sjkim je .Lxts_enc_four 1366238405Sjkim 1367238405Sjkim pshufd $19,%xmm14,%xmm9 1368238405Sjkim movdqa %xmm15,%xmm14 1369238405Sjkim paddq %xmm15,%xmm15 1370238405Sjkim movdqu (%rdi),%xmm2 1371238405Sjkim pand %xmm8,%xmm9 1372238405Sjkim movdqu 16(%rdi),%xmm3 1373238405Sjkim pxor %xmm9,%xmm15 1374238405Sjkim 1375238405Sjkim movdqu 32(%rdi),%xmm4 1376238405Sjkim pxor %xmm10,%xmm2 1377238405Sjkim movdqu 48(%rdi),%xmm5 1378238405Sjkim pxor %xmm11,%xmm3 1379238405Sjkim movdqu 64(%rdi),%xmm6 1380238405Sjkim leaq 80(%rdi),%rdi 1381238405Sjkim pxor %xmm12,%xmm4 1382238405Sjkim pxor %xmm13,%xmm5 1383238405Sjkim pxor %xmm14,%xmm6 1384238405Sjkim 1385238405Sjkim call _aesni_encrypt6 1386238405Sjkim 1387238405Sjkim xorps %xmm10,%xmm2 1388238405Sjkim movdqa %xmm15,%xmm10 1389238405Sjkim xorps %xmm11,%xmm3 1390238405Sjkim xorps %xmm12,%xmm4 1391238405Sjkim movdqu %xmm2,(%rsi) 1392238405Sjkim xorps %xmm13,%xmm5 1393238405Sjkim movdqu %xmm3,16(%rsi) 1394238405Sjkim xorps %xmm14,%xmm6 1395238405Sjkim movdqu %xmm4,32(%rsi) 1396238405Sjkim movdqu %xmm5,48(%rsi) 1397238405Sjkim movdqu %xmm6,64(%rsi) 1398238405Sjkim leaq 80(%rsi),%rsi 1399238405Sjkim jmp .Lxts_enc_done 1400238405Sjkim 1401238405Sjkim.align 16 1402238405Sjkim.Lxts_enc_one: 1403238405Sjkim movups (%rdi),%xmm2 1404238405Sjkim leaq 16(%rdi),%rdi 1405238405Sjkim xorps %xmm10,%xmm2 1406238405Sjkim movups (%rcx),%xmm0 1407238405Sjkim movups 16(%rcx),%xmm1 1408238405Sjkim leaq 32(%rcx),%rcx 1409238405Sjkim xorps %xmm0,%xmm2 1410238405Sjkim.Loop_enc1_9: 1411238405Sjkim.byte 102,15,56,220,209 1412238405Sjkim decl %eax 1413238405Sjkim movups (%rcx),%xmm1 1414238405Sjkim leaq 16(%rcx),%rcx 1415238405Sjkim jnz .Loop_enc1_9 1416238405Sjkim.byte 102,15,56,221,209 1417238405Sjkim xorps %xmm10,%xmm2 1418238405Sjkim movdqa %xmm11,%xmm10 1419238405Sjkim movups %xmm2,(%rsi) 1420238405Sjkim leaq 16(%rsi),%rsi 1421238405Sjkim jmp .Lxts_enc_done 1422238405Sjkim 1423238405Sjkim.align 16 1424238405Sjkim.Lxts_enc_two: 1425238405Sjkim movups (%rdi),%xmm2 1426238405Sjkim movups 16(%rdi),%xmm3 1427238405Sjkim leaq 32(%rdi),%rdi 1428238405Sjkim xorps %xmm10,%xmm2 1429238405Sjkim xorps %xmm11,%xmm3 1430238405Sjkim 1431238405Sjkim call _aesni_encrypt3 1432238405Sjkim 1433238405Sjkim xorps %xmm10,%xmm2 1434238405Sjkim movdqa %xmm12,%xmm10 1435238405Sjkim xorps %xmm11,%xmm3 1436238405Sjkim movups %xmm2,(%rsi) 1437238405Sjkim movups %xmm3,16(%rsi) 1438238405Sjkim leaq 32(%rsi),%rsi 1439238405Sjkim jmp .Lxts_enc_done 1440238405Sjkim 1441238405Sjkim.align 16 1442238405Sjkim.Lxts_enc_three: 1443238405Sjkim movups (%rdi),%xmm2 1444238405Sjkim movups 16(%rdi),%xmm3 1445238405Sjkim movups 32(%rdi),%xmm4 1446238405Sjkim leaq 48(%rdi),%rdi 1447238405Sjkim xorps %xmm10,%xmm2 1448238405Sjkim xorps %xmm11,%xmm3 1449238405Sjkim xorps %xmm12,%xmm4 1450238405Sjkim 1451238405Sjkim call _aesni_encrypt3 1452238405Sjkim 1453238405Sjkim xorps %xmm10,%xmm2 1454238405Sjkim movdqa %xmm13,%xmm10 1455238405Sjkim xorps %xmm11,%xmm3 1456238405Sjkim xorps %xmm12,%xmm4 1457238405Sjkim movups %xmm2,(%rsi) 1458238405Sjkim movups %xmm3,16(%rsi) 1459238405Sjkim movups %xmm4,32(%rsi) 1460238405Sjkim leaq 48(%rsi),%rsi 1461238405Sjkim jmp .Lxts_enc_done 1462238405Sjkim 1463238405Sjkim.align 16 1464238405Sjkim.Lxts_enc_four: 1465238405Sjkim movups (%rdi),%xmm2 1466238405Sjkim movups 16(%rdi),%xmm3 1467238405Sjkim movups 32(%rdi),%xmm4 1468238405Sjkim xorps %xmm10,%xmm2 1469238405Sjkim movups 48(%rdi),%xmm5 1470238405Sjkim leaq 64(%rdi),%rdi 1471238405Sjkim xorps %xmm11,%xmm3 1472238405Sjkim xorps %xmm12,%xmm4 1473238405Sjkim xorps %xmm13,%xmm5 1474238405Sjkim 1475238405Sjkim call _aesni_encrypt4 1476238405Sjkim 1477238405Sjkim xorps %xmm10,%xmm2 1478238405Sjkim movdqa %xmm15,%xmm10 1479238405Sjkim xorps %xmm11,%xmm3 1480238405Sjkim xorps %xmm12,%xmm4 1481238405Sjkim movups %xmm2,(%rsi) 1482238405Sjkim xorps %xmm13,%xmm5 1483238405Sjkim movups %xmm3,16(%rsi) 1484238405Sjkim movups %xmm4,32(%rsi) 1485238405Sjkim movups %xmm5,48(%rsi) 1486238405Sjkim leaq 64(%rsi),%rsi 1487238405Sjkim jmp .Lxts_enc_done 1488238405Sjkim 1489238405Sjkim.align 16 1490238405Sjkim.Lxts_enc_done: 1491238405Sjkim andq $15,%r9 1492238405Sjkim jz .Lxts_enc_ret 1493238405Sjkim movq %r9,%rdx 1494238405Sjkim 1495238405Sjkim.Lxts_enc_steal: 1496238405Sjkim movzbl (%rdi),%eax 1497238405Sjkim movzbl -16(%rsi),%ecx 1498238405Sjkim leaq 1(%rdi),%rdi 1499238405Sjkim movb %al,-16(%rsi) 1500238405Sjkim movb %cl,0(%rsi) 1501238405Sjkim leaq 1(%rsi),%rsi 1502238405Sjkim subq $1,%rdx 1503238405Sjkim jnz .Lxts_enc_steal 1504238405Sjkim 1505238405Sjkim subq %r9,%rsi 1506238405Sjkim movq %r11,%rcx 1507238405Sjkim movl %r10d,%eax 1508238405Sjkim 1509238405Sjkim movups -16(%rsi),%xmm2 1510238405Sjkim xorps %xmm10,%xmm2 1511238405Sjkim movups (%rcx),%xmm0 1512238405Sjkim movups 16(%rcx),%xmm1 1513238405Sjkim leaq 32(%rcx),%rcx 1514238405Sjkim xorps %xmm0,%xmm2 1515238405Sjkim.Loop_enc1_10: 1516238405Sjkim.byte 102,15,56,220,209 1517238405Sjkim decl %eax 1518238405Sjkim movups (%rcx),%xmm1 1519238405Sjkim leaq 16(%rcx),%rcx 1520238405Sjkim jnz .Loop_enc1_10 1521238405Sjkim.byte 102,15,56,221,209 1522238405Sjkim xorps %xmm10,%xmm2 1523238405Sjkim movups %xmm2,-16(%rsi) 1524238405Sjkim 1525238405Sjkim.Lxts_enc_ret: 1526238405Sjkim leaq 104(%rsp),%rsp 1527238405Sjkim.Lxts_enc_epilogue: 1528238405Sjkim .byte 0xf3,0xc3 1529238405Sjkim.size aesni_xts_encrypt,.-aesni_xts_encrypt 1530238405Sjkim.globl aesni_xts_decrypt 1531238405Sjkim.type aesni_xts_decrypt,@function 1532238405Sjkim.align 16 1533238405Sjkimaesni_xts_decrypt: 1534238405Sjkim leaq -104(%rsp),%rsp 1535238405Sjkim movups (%r9),%xmm15 1536238405Sjkim movl 240(%r8),%eax 1537238405Sjkim movl 240(%rcx),%r10d 1538238405Sjkim movups (%r8),%xmm0 1539238405Sjkim movups 16(%r8),%xmm1 1540238405Sjkim leaq 32(%r8),%r8 1541238405Sjkim xorps %xmm0,%xmm15 1542238405Sjkim.Loop_enc1_11: 1543238405Sjkim.byte 102,68,15,56,220,249 1544238405Sjkim decl %eax 1545238405Sjkim movups (%r8),%xmm1 1546238405Sjkim leaq 16(%r8),%r8 1547238405Sjkim jnz .Loop_enc1_11 1548238405Sjkim.byte 102,68,15,56,221,249 1549238405Sjkim xorl %eax,%eax 1550238405Sjkim testq $15,%rdx 1551238405Sjkim setnz %al 1552238405Sjkim shlq $4,%rax 1553238405Sjkim subq %rax,%rdx 1554238405Sjkim 1555238405Sjkim movq %rcx,%r11 1556238405Sjkim movl %r10d,%eax 1557238405Sjkim movq %rdx,%r9 1558238405Sjkim andq $-16,%rdx 1559238405Sjkim 1560238405Sjkim movdqa .Lxts_magic(%rip),%xmm8 1561238405Sjkim pxor %xmm14,%xmm14 1562238405Sjkim pcmpgtd %xmm15,%xmm14 1563238405Sjkim pshufd $19,%xmm14,%xmm9 1564238405Sjkim pxor %xmm14,%xmm14 1565238405Sjkim movdqa %xmm15,%xmm10 1566238405Sjkim paddq %xmm15,%xmm15 1567238405Sjkim pand %xmm8,%xmm9 1568238405Sjkim pcmpgtd %xmm15,%xmm14 1569238405Sjkim pxor %xmm9,%xmm15 1570238405Sjkim pshufd $19,%xmm14,%xmm9 1571238405Sjkim pxor %xmm14,%xmm14 1572238405Sjkim movdqa %xmm15,%xmm11 1573238405Sjkim paddq %xmm15,%xmm15 1574238405Sjkim pand %xmm8,%xmm9 1575238405Sjkim pcmpgtd %xmm15,%xmm14 1576238405Sjkim pxor %xmm9,%xmm15 1577238405Sjkim pshufd $19,%xmm14,%xmm9 1578238405Sjkim pxor %xmm14,%xmm14 1579238405Sjkim movdqa %xmm15,%xmm12 1580238405Sjkim paddq %xmm15,%xmm15 1581238405Sjkim pand %xmm8,%xmm9 1582238405Sjkim pcmpgtd %xmm15,%xmm14 1583238405Sjkim pxor %xmm9,%xmm15 1584238405Sjkim pshufd $19,%xmm14,%xmm9 1585238405Sjkim pxor %xmm14,%xmm14 1586238405Sjkim movdqa %xmm15,%xmm13 1587238405Sjkim paddq %xmm15,%xmm15 1588238405Sjkim pand %xmm8,%xmm9 1589238405Sjkim pcmpgtd %xmm15,%xmm14 1590238405Sjkim pxor %xmm9,%xmm15 1591238405Sjkim subq $96,%rdx 1592238405Sjkim jc .Lxts_dec_short 1593238405Sjkim 1594238405Sjkim shrl $1,%eax 1595238405Sjkim subl $1,%eax 1596238405Sjkim movl %eax,%r10d 1597238405Sjkim jmp .Lxts_dec_grandloop 1598238405Sjkim 1599238405Sjkim.align 16 1600238405Sjkim.Lxts_dec_grandloop: 1601238405Sjkim pshufd $19,%xmm14,%xmm9 1602238405Sjkim movdqa %xmm15,%xmm14 1603238405Sjkim paddq %xmm15,%xmm15 1604238405Sjkim movdqu 0(%rdi),%xmm2 1605238405Sjkim pand %xmm8,%xmm9 1606238405Sjkim movdqu 16(%rdi),%xmm3 1607238405Sjkim pxor %xmm9,%xmm15 1608238405Sjkim 1609238405Sjkim movdqu 32(%rdi),%xmm4 1610238405Sjkim pxor %xmm10,%xmm2 1611238405Sjkim movdqu 48(%rdi),%xmm5 1612238405Sjkim pxor %xmm11,%xmm3 1613238405Sjkim movdqu 64(%rdi),%xmm6 1614238405Sjkim pxor %xmm12,%xmm4 1615238405Sjkim movdqu 80(%rdi),%xmm7 1616238405Sjkim leaq 96(%rdi),%rdi 1617238405Sjkim pxor %xmm13,%xmm5 1618238405Sjkim movups (%r11),%xmm0 1619238405Sjkim pxor %xmm14,%xmm6 1620238405Sjkim pxor %xmm15,%xmm7 1621238405Sjkim 1622238405Sjkim 1623238405Sjkim 1624238405Sjkim movups 16(%r11),%xmm1 1625238405Sjkim pxor %xmm0,%xmm2 1626238405Sjkim pxor %xmm0,%xmm3 1627238405Sjkim movdqa %xmm10,0(%rsp) 1628238405Sjkim.byte 102,15,56,222,209 1629238405Sjkim leaq 32(%r11),%rcx 1630238405Sjkim pxor %xmm0,%xmm4 1631238405Sjkim movdqa %xmm11,16(%rsp) 1632238405Sjkim.byte 102,15,56,222,217 1633238405Sjkim pxor %xmm0,%xmm5 1634238405Sjkim movdqa %xmm12,32(%rsp) 1635238405Sjkim.byte 102,15,56,222,225 1636238405Sjkim pxor %xmm0,%xmm6 1637238405Sjkim movdqa %xmm13,48(%rsp) 1638238405Sjkim.byte 102,15,56,222,233 1639238405Sjkim pxor %xmm0,%xmm7 1640238405Sjkim movups (%rcx),%xmm0 1641238405Sjkim decl %eax 1642238405Sjkim movdqa %xmm14,64(%rsp) 1643238405Sjkim.byte 102,15,56,222,241 1644238405Sjkim movdqa %xmm15,80(%rsp) 1645238405Sjkim.byte 102,15,56,222,249 1646238405Sjkim pxor %xmm14,%xmm14 1647238405Sjkim pcmpgtd %xmm15,%xmm14 1648238405Sjkim jmp .Lxts_dec_loop6_enter 1649238405Sjkim 1650238405Sjkim.align 16 1651238405Sjkim.Lxts_dec_loop6: 1652238405Sjkim.byte 102,15,56,222,209 1653238405Sjkim.byte 102,15,56,222,217 1654238405Sjkim decl %eax 1655238405Sjkim.byte 102,15,56,222,225 1656238405Sjkim.byte 102,15,56,222,233 1657238405Sjkim.byte 102,15,56,222,241 1658238405Sjkim.byte 102,15,56,222,249 1659238405Sjkim.Lxts_dec_loop6_enter: 1660238405Sjkim movups 16(%rcx),%xmm1 1661238405Sjkim.byte 102,15,56,222,208 1662238405Sjkim.byte 102,15,56,222,216 1663238405Sjkim leaq 32(%rcx),%rcx 1664238405Sjkim.byte 102,15,56,222,224 1665238405Sjkim.byte 102,15,56,222,232 1666238405Sjkim.byte 102,15,56,222,240 1667238405Sjkim.byte 102,15,56,222,248 1668238405Sjkim movups (%rcx),%xmm0 1669238405Sjkim jnz .Lxts_dec_loop6 1670238405Sjkim 1671238405Sjkim pshufd $19,%xmm14,%xmm9 1672238405Sjkim pxor %xmm14,%xmm14 1673238405Sjkim paddq %xmm15,%xmm15 1674238405Sjkim.byte 102,15,56,222,209 1675238405Sjkim pand %xmm8,%xmm9 1676238405Sjkim.byte 102,15,56,222,217 1677238405Sjkim pcmpgtd %xmm15,%xmm14 1678238405Sjkim.byte 102,15,56,222,225 1679238405Sjkim pxor %xmm9,%xmm15 1680238405Sjkim.byte 102,15,56,222,233 1681238405Sjkim.byte 102,15,56,222,241 1682238405Sjkim.byte 102,15,56,222,249 1683238405Sjkim movups 16(%rcx),%xmm1 1684238405Sjkim 1685238405Sjkim pshufd $19,%xmm14,%xmm9 1686238405Sjkim pxor %xmm14,%xmm14 1687238405Sjkim movdqa %xmm15,%xmm10 1688238405Sjkim paddq %xmm15,%xmm15 1689238405Sjkim.byte 102,15,56,222,208 1690238405Sjkim pand %xmm8,%xmm9 1691238405Sjkim.byte 102,15,56,222,216 1692238405Sjkim pcmpgtd %xmm15,%xmm14 1693238405Sjkim.byte 102,15,56,222,224 1694238405Sjkim pxor %xmm9,%xmm15 1695238405Sjkim.byte 102,15,56,222,232 1696238405Sjkim.byte 102,15,56,222,240 1697238405Sjkim.byte 102,15,56,222,248 1698238405Sjkim movups 32(%rcx),%xmm0 1699238405Sjkim 1700238405Sjkim pshufd $19,%xmm14,%xmm9 1701238405Sjkim pxor %xmm14,%xmm14 1702238405Sjkim movdqa %xmm15,%xmm11 1703238405Sjkim paddq %xmm15,%xmm15 1704238405Sjkim.byte 102,15,56,222,209 1705238405Sjkim pand %xmm8,%xmm9 1706238405Sjkim.byte 102,15,56,222,217 1707238405Sjkim pcmpgtd %xmm15,%xmm14 1708238405Sjkim.byte 102,15,56,222,225 1709238405Sjkim pxor %xmm9,%xmm15 1710238405Sjkim.byte 102,15,56,222,233 1711238405Sjkim.byte 102,15,56,222,241 1712238405Sjkim.byte 102,15,56,222,249 1713238405Sjkim 1714238405Sjkim pshufd $19,%xmm14,%xmm9 1715238405Sjkim pxor %xmm14,%xmm14 1716238405Sjkim movdqa %xmm15,%xmm12 1717238405Sjkim paddq %xmm15,%xmm15 1718238405Sjkim.byte 102,15,56,223,208 1719238405Sjkim pand %xmm8,%xmm9 1720238405Sjkim.byte 102,15,56,223,216 1721238405Sjkim pcmpgtd %xmm15,%xmm14 1722238405Sjkim.byte 102,15,56,223,224 1723238405Sjkim pxor %xmm9,%xmm15 1724238405Sjkim.byte 102,15,56,223,232 1725238405Sjkim.byte 102,15,56,223,240 1726238405Sjkim.byte 102,15,56,223,248 1727238405Sjkim 1728238405Sjkim pshufd $19,%xmm14,%xmm9 1729238405Sjkim pxor %xmm14,%xmm14 1730238405Sjkim movdqa %xmm15,%xmm13 1731238405Sjkim paddq %xmm15,%xmm15 1732238405Sjkim xorps 0(%rsp),%xmm2 1733238405Sjkim pand %xmm8,%xmm9 1734238405Sjkim xorps 16(%rsp),%xmm3 1735238405Sjkim pcmpgtd %xmm15,%xmm14 1736238405Sjkim pxor %xmm9,%xmm15 1737238405Sjkim 1738238405Sjkim xorps 32(%rsp),%xmm4 1739238405Sjkim movups %xmm2,0(%rsi) 1740238405Sjkim xorps 48(%rsp),%xmm5 1741238405Sjkim movups %xmm3,16(%rsi) 1742238405Sjkim xorps 64(%rsp),%xmm6 1743238405Sjkim movups %xmm4,32(%rsi) 1744238405Sjkim xorps 80(%rsp),%xmm7 1745238405Sjkim movups %xmm5,48(%rsi) 1746238405Sjkim movl %r10d,%eax 1747238405Sjkim movups %xmm6,64(%rsi) 1748238405Sjkim movups %xmm7,80(%rsi) 1749238405Sjkim leaq 96(%rsi),%rsi 1750238405Sjkim subq $96,%rdx 1751238405Sjkim jnc .Lxts_dec_grandloop 1752238405Sjkim 1753238405Sjkim leal 3(%rax,%rax,1),%eax 1754238405Sjkim movq %r11,%rcx 1755238405Sjkim movl %eax,%r10d 1756238405Sjkim 1757238405Sjkim.Lxts_dec_short: 1758238405Sjkim addq $96,%rdx 1759238405Sjkim jz .Lxts_dec_done 1760238405Sjkim 1761238405Sjkim cmpq $32,%rdx 1762238405Sjkim jb .Lxts_dec_one 1763238405Sjkim je .Lxts_dec_two 1764238405Sjkim 1765238405Sjkim cmpq $64,%rdx 1766238405Sjkim jb .Lxts_dec_three 1767238405Sjkim je .Lxts_dec_four 1768238405Sjkim 1769238405Sjkim pshufd $19,%xmm14,%xmm9 1770238405Sjkim movdqa %xmm15,%xmm14 1771238405Sjkim paddq %xmm15,%xmm15 1772238405Sjkim movdqu (%rdi),%xmm2 1773238405Sjkim pand %xmm8,%xmm9 1774238405Sjkim movdqu 16(%rdi),%xmm3 1775238405Sjkim pxor %xmm9,%xmm15 1776238405Sjkim 1777238405Sjkim movdqu 32(%rdi),%xmm4 1778238405Sjkim pxor %xmm10,%xmm2 1779238405Sjkim movdqu 48(%rdi),%xmm5 1780238405Sjkim pxor %xmm11,%xmm3 1781238405Sjkim movdqu 64(%rdi),%xmm6 1782238405Sjkim leaq 80(%rdi),%rdi 1783238405Sjkim pxor %xmm12,%xmm4 1784238405Sjkim pxor %xmm13,%xmm5 1785238405Sjkim pxor %xmm14,%xmm6 1786238405Sjkim 1787238405Sjkim call _aesni_decrypt6 1788238405Sjkim 1789238405Sjkim xorps %xmm10,%xmm2 1790238405Sjkim xorps %xmm11,%xmm3 1791238405Sjkim xorps %xmm12,%xmm4 1792238405Sjkim movdqu %xmm2,(%rsi) 1793238405Sjkim xorps %xmm13,%xmm5 1794238405Sjkim movdqu %xmm3,16(%rsi) 1795238405Sjkim xorps %xmm14,%xmm6 1796238405Sjkim movdqu %xmm4,32(%rsi) 1797238405Sjkim pxor %xmm14,%xmm14 1798238405Sjkim movdqu %xmm5,48(%rsi) 1799238405Sjkim pcmpgtd %xmm15,%xmm14 1800238405Sjkim movdqu %xmm6,64(%rsi) 1801238405Sjkim leaq 80(%rsi),%rsi 1802238405Sjkim pshufd $19,%xmm14,%xmm11 1803238405Sjkim andq $15,%r9 1804238405Sjkim jz .Lxts_dec_ret 1805238405Sjkim 1806238405Sjkim movdqa %xmm15,%xmm10 1807238405Sjkim paddq %xmm15,%xmm15 1808238405Sjkim pand %xmm8,%xmm11 1809238405Sjkim pxor %xmm15,%xmm11 1810238405Sjkim jmp .Lxts_dec_done2 1811238405Sjkim 1812238405Sjkim.align 16 1813238405Sjkim.Lxts_dec_one: 1814238405Sjkim movups (%rdi),%xmm2 1815238405Sjkim leaq 16(%rdi),%rdi 1816238405Sjkim xorps %xmm10,%xmm2 1817238405Sjkim movups (%rcx),%xmm0 1818238405Sjkim movups 16(%rcx),%xmm1 1819238405Sjkim leaq 32(%rcx),%rcx 1820238405Sjkim xorps %xmm0,%xmm2 1821238405Sjkim.Loop_dec1_12: 1822238405Sjkim.byte 102,15,56,222,209 1823238405Sjkim decl %eax 1824238405Sjkim movups (%rcx),%xmm1 1825238405Sjkim leaq 16(%rcx),%rcx 1826238405Sjkim jnz .Loop_dec1_12 1827238405Sjkim.byte 102,15,56,223,209 1828238405Sjkim xorps %xmm10,%xmm2 1829238405Sjkim movdqa %xmm11,%xmm10 1830238405Sjkim movups %xmm2,(%rsi) 1831238405Sjkim movdqa %xmm12,%xmm11 1832238405Sjkim leaq 16(%rsi),%rsi 1833238405Sjkim jmp .Lxts_dec_done 1834238405Sjkim 1835238405Sjkim.align 16 1836238405Sjkim.Lxts_dec_two: 1837238405Sjkim movups (%rdi),%xmm2 1838238405Sjkim movups 16(%rdi),%xmm3 1839238405Sjkim leaq 32(%rdi),%rdi 1840238405Sjkim xorps %xmm10,%xmm2 1841238405Sjkim xorps %xmm11,%xmm3 1842238405Sjkim 1843238405Sjkim call _aesni_decrypt3 1844238405Sjkim 1845238405Sjkim xorps %xmm10,%xmm2 1846238405Sjkim movdqa %xmm12,%xmm10 1847238405Sjkim xorps %xmm11,%xmm3 1848238405Sjkim movdqa %xmm13,%xmm11 1849238405Sjkim movups %xmm2,(%rsi) 1850238405Sjkim movups %xmm3,16(%rsi) 1851238405Sjkim leaq 32(%rsi),%rsi 1852238405Sjkim jmp .Lxts_dec_done 1853238405Sjkim 1854238405Sjkim.align 16 1855238405Sjkim.Lxts_dec_three: 1856238405Sjkim movups (%rdi),%xmm2 1857238405Sjkim movups 16(%rdi),%xmm3 1858238405Sjkim movups 32(%rdi),%xmm4 1859238405Sjkim leaq 48(%rdi),%rdi 1860238405Sjkim xorps %xmm10,%xmm2 1861238405Sjkim xorps %xmm11,%xmm3 1862238405Sjkim xorps %xmm12,%xmm4 1863238405Sjkim 1864238405Sjkim call _aesni_decrypt3 1865238405Sjkim 1866238405Sjkim xorps %xmm10,%xmm2 1867238405Sjkim movdqa %xmm13,%xmm10 1868238405Sjkim xorps %xmm11,%xmm3 1869238405Sjkim movdqa %xmm15,%xmm11 1870238405Sjkim xorps %xmm12,%xmm4 1871238405Sjkim movups %xmm2,(%rsi) 1872238405Sjkim movups %xmm3,16(%rsi) 1873238405Sjkim movups %xmm4,32(%rsi) 1874238405Sjkim leaq 48(%rsi),%rsi 1875238405Sjkim jmp .Lxts_dec_done 1876238405Sjkim 1877238405Sjkim.align 16 1878238405Sjkim.Lxts_dec_four: 1879238405Sjkim pshufd $19,%xmm14,%xmm9 1880238405Sjkim movdqa %xmm15,%xmm14 1881238405Sjkim paddq %xmm15,%xmm15 1882238405Sjkim movups (%rdi),%xmm2 1883238405Sjkim pand %xmm8,%xmm9 1884238405Sjkim movups 16(%rdi),%xmm3 1885238405Sjkim pxor %xmm9,%xmm15 1886238405Sjkim 1887238405Sjkim movups 32(%rdi),%xmm4 1888238405Sjkim xorps %xmm10,%xmm2 1889238405Sjkim movups 48(%rdi),%xmm5 1890238405Sjkim leaq 64(%rdi),%rdi 1891238405Sjkim xorps %xmm11,%xmm3 1892238405Sjkim xorps %xmm12,%xmm4 1893238405Sjkim xorps %xmm13,%xmm5 1894238405Sjkim 1895238405Sjkim call _aesni_decrypt4 1896238405Sjkim 1897238405Sjkim xorps %xmm10,%xmm2 1898238405Sjkim movdqa %xmm14,%xmm10 1899238405Sjkim xorps %xmm11,%xmm3 1900238405Sjkim movdqa %xmm15,%xmm11 1901238405Sjkim xorps %xmm12,%xmm4 1902238405Sjkim movups %xmm2,(%rsi) 1903238405Sjkim xorps %xmm13,%xmm5 1904238405Sjkim movups %xmm3,16(%rsi) 1905238405Sjkim movups %xmm4,32(%rsi) 1906238405Sjkim movups %xmm5,48(%rsi) 1907238405Sjkim leaq 64(%rsi),%rsi 1908238405Sjkim jmp .Lxts_dec_done 1909238405Sjkim 1910238405Sjkim.align 16 1911238405Sjkim.Lxts_dec_done: 1912238405Sjkim andq $15,%r9 1913238405Sjkim jz .Lxts_dec_ret 1914238405Sjkim.Lxts_dec_done2: 1915238405Sjkim movq %r9,%rdx 1916238405Sjkim movq %r11,%rcx 1917238405Sjkim movl %r10d,%eax 1918238405Sjkim 1919238405Sjkim movups (%rdi),%xmm2 1920238405Sjkim xorps %xmm11,%xmm2 1921238405Sjkim movups (%rcx),%xmm0 1922238405Sjkim movups 16(%rcx),%xmm1 1923238405Sjkim leaq 32(%rcx),%rcx 1924238405Sjkim xorps %xmm0,%xmm2 1925238405Sjkim.Loop_dec1_13: 1926238405Sjkim.byte 102,15,56,222,209 1927238405Sjkim decl %eax 1928238405Sjkim movups (%rcx),%xmm1 1929238405Sjkim leaq 16(%rcx),%rcx 1930238405Sjkim jnz .Loop_dec1_13 1931238405Sjkim.byte 102,15,56,223,209 1932238405Sjkim xorps %xmm11,%xmm2 1933238405Sjkim movups %xmm2,(%rsi) 1934238405Sjkim 1935238405Sjkim.Lxts_dec_steal: 1936238405Sjkim movzbl 16(%rdi),%eax 1937238405Sjkim movzbl (%rsi),%ecx 1938238405Sjkim leaq 1(%rdi),%rdi 1939238405Sjkim movb %al,(%rsi) 1940238405Sjkim movb %cl,16(%rsi) 1941238405Sjkim leaq 1(%rsi),%rsi 1942238405Sjkim subq $1,%rdx 1943238405Sjkim jnz .Lxts_dec_steal 1944238405Sjkim 1945238405Sjkim subq %r9,%rsi 1946238405Sjkim movq %r11,%rcx 1947238405Sjkim movl %r10d,%eax 1948238405Sjkim 1949238405Sjkim movups (%rsi),%xmm2 1950238405Sjkim xorps %xmm10,%xmm2 1951238405Sjkim movups (%rcx),%xmm0 1952238405Sjkim movups 16(%rcx),%xmm1 1953238405Sjkim leaq 32(%rcx),%rcx 1954238405Sjkim xorps %xmm0,%xmm2 1955238405Sjkim.Loop_dec1_14: 1956238405Sjkim.byte 102,15,56,222,209 1957238405Sjkim decl %eax 1958238405Sjkim movups (%rcx),%xmm1 1959238405Sjkim leaq 16(%rcx),%rcx 1960238405Sjkim jnz .Loop_dec1_14 1961238405Sjkim.byte 102,15,56,223,209 1962238405Sjkim xorps %xmm10,%xmm2 1963238405Sjkim movups %xmm2,(%rsi) 1964238405Sjkim 1965238405Sjkim.Lxts_dec_ret: 1966238405Sjkim leaq 104(%rsp),%rsp 1967238405Sjkim.Lxts_dec_epilogue: 1968238405Sjkim .byte 0xf3,0xc3 1969238405Sjkim.size aesni_xts_decrypt,.-aesni_xts_decrypt 1970238405Sjkim.globl aesni_cbc_encrypt 1971238405Sjkim.type aesni_cbc_encrypt,@function 1972238405Sjkim.align 16 1973238405Sjkimaesni_cbc_encrypt: 1974238405Sjkim testq %rdx,%rdx 1975238405Sjkim jz .Lcbc_ret 1976238405Sjkim 1977238405Sjkim movl 240(%rcx),%r10d 1978238405Sjkim movq %rcx,%r11 1979238405Sjkim testl %r9d,%r9d 1980238405Sjkim jz .Lcbc_decrypt 1981238405Sjkim 1982238405Sjkim movups (%r8),%xmm2 1983238405Sjkim movl %r10d,%eax 1984238405Sjkim cmpq $16,%rdx 1985238405Sjkim jb .Lcbc_enc_tail 1986238405Sjkim subq $16,%rdx 1987238405Sjkim jmp .Lcbc_enc_loop 1988238405Sjkim.align 16 1989238405Sjkim.Lcbc_enc_loop: 1990238405Sjkim movups (%rdi),%xmm3 1991238405Sjkim leaq 16(%rdi),%rdi 1992238405Sjkim 1993238405Sjkim movups (%rcx),%xmm0 1994238405Sjkim movups 16(%rcx),%xmm1 1995238405Sjkim xorps %xmm0,%xmm3 1996238405Sjkim leaq 32(%rcx),%rcx 1997238405Sjkim xorps %xmm3,%xmm2 1998238405Sjkim.Loop_enc1_15: 1999238405Sjkim.byte 102,15,56,220,209 2000238405Sjkim decl %eax 2001238405Sjkim movups (%rcx),%xmm1 2002238405Sjkim leaq 16(%rcx),%rcx 2003238405Sjkim jnz .Loop_enc1_15 2004238405Sjkim.byte 102,15,56,221,209 2005238405Sjkim movl %r10d,%eax 2006238405Sjkim movq %r11,%rcx 2007238405Sjkim movups %xmm2,0(%rsi) 2008238405Sjkim leaq 16(%rsi),%rsi 2009238405Sjkim subq $16,%rdx 2010238405Sjkim jnc .Lcbc_enc_loop 2011238405Sjkim addq $16,%rdx 2012238405Sjkim jnz .Lcbc_enc_tail 2013238405Sjkim movups %xmm2,(%r8) 2014238405Sjkim jmp .Lcbc_ret 2015238405Sjkim 2016238405Sjkim.Lcbc_enc_tail: 2017238405Sjkim movq %rdx,%rcx 2018238405Sjkim xchgq %rdi,%rsi 2019238405Sjkim.long 0x9066A4F3 2020238405Sjkim movl $16,%ecx 2021238405Sjkim subq %rdx,%rcx 2022238405Sjkim xorl %eax,%eax 2023238405Sjkim.long 0x9066AAF3 2024238405Sjkim leaq -16(%rdi),%rdi 2025238405Sjkim movl %r10d,%eax 2026238405Sjkim movq %rdi,%rsi 2027238405Sjkim movq %r11,%rcx 2028238405Sjkim xorq %rdx,%rdx 2029238405Sjkim jmp .Lcbc_enc_loop 2030238405Sjkim 2031238405Sjkim.align 16 2032238405Sjkim.Lcbc_decrypt: 2033238405Sjkim movups (%r8),%xmm9 2034238405Sjkim movl %r10d,%eax 2035238405Sjkim cmpq $112,%rdx 2036238405Sjkim jbe .Lcbc_dec_tail 2037238405Sjkim shrl $1,%r10d 2038238405Sjkim subq $112,%rdx 2039238405Sjkim movl %r10d,%eax 2040238405Sjkim movaps %xmm9,-24(%rsp) 2041238405Sjkim jmp .Lcbc_dec_loop8_enter 2042238405Sjkim.align 16 2043238405Sjkim.Lcbc_dec_loop8: 2044238405Sjkim movaps %xmm0,-24(%rsp) 2045238405Sjkim movups %xmm9,(%rsi) 2046238405Sjkim leaq 16(%rsi),%rsi 2047238405Sjkim.Lcbc_dec_loop8_enter: 2048238405Sjkim movups (%rcx),%xmm0 2049238405Sjkim movups (%rdi),%xmm2 2050238405Sjkim movups 16(%rdi),%xmm3 2051238405Sjkim movups 16(%rcx),%xmm1 2052238405Sjkim 2053238405Sjkim leaq 32(%rcx),%rcx 2054238405Sjkim movdqu 32(%rdi),%xmm4 2055238405Sjkim xorps %xmm0,%xmm2 2056238405Sjkim movdqu 48(%rdi),%xmm5 2057238405Sjkim xorps %xmm0,%xmm3 2058238405Sjkim movdqu 64(%rdi),%xmm6 2059238405Sjkim.byte 102,15,56,222,209 2060238405Sjkim pxor %xmm0,%xmm4 2061238405Sjkim movdqu 80(%rdi),%xmm7 2062238405Sjkim.byte 102,15,56,222,217 2063238405Sjkim pxor %xmm0,%xmm5 2064238405Sjkim movdqu 96(%rdi),%xmm8 2065238405Sjkim.byte 102,15,56,222,225 2066238405Sjkim pxor %xmm0,%xmm6 2067238405Sjkim movdqu 112(%rdi),%xmm9 2068238405Sjkim.byte 102,15,56,222,233 2069238405Sjkim pxor %xmm0,%xmm7 2070238405Sjkim decl %eax 2071238405Sjkim.byte 102,15,56,222,241 2072238405Sjkim pxor %xmm0,%xmm8 2073238405Sjkim.byte 102,15,56,222,249 2074238405Sjkim pxor %xmm0,%xmm9 2075238405Sjkim movups (%rcx),%xmm0 2076238405Sjkim.byte 102,68,15,56,222,193 2077238405Sjkim.byte 102,68,15,56,222,201 2078238405Sjkim movups 16(%rcx),%xmm1 2079238405Sjkim 2080238405Sjkim call .Ldec_loop8_enter 2081238405Sjkim 2082238405Sjkim movups (%rdi),%xmm1 2083238405Sjkim movups 16(%rdi),%xmm0 2084238405Sjkim xorps -24(%rsp),%xmm2 2085238405Sjkim xorps %xmm1,%xmm3 2086238405Sjkim movups 32(%rdi),%xmm1 2087238405Sjkim xorps %xmm0,%xmm4 2088238405Sjkim movups 48(%rdi),%xmm0 2089238405Sjkim xorps %xmm1,%xmm5 2090238405Sjkim movups 64(%rdi),%xmm1 2091238405Sjkim xorps %xmm0,%xmm6 2092238405Sjkim movups 80(%rdi),%xmm0 2093238405Sjkim xorps %xmm1,%xmm7 2094238405Sjkim movups 96(%rdi),%xmm1 2095238405Sjkim xorps %xmm0,%xmm8 2096238405Sjkim movups 112(%rdi),%xmm0 2097238405Sjkim xorps %xmm1,%xmm9 2098238405Sjkim movups %xmm2,(%rsi) 2099238405Sjkim movups %xmm3,16(%rsi) 2100238405Sjkim movups %xmm4,32(%rsi) 2101238405Sjkim movups %xmm5,48(%rsi) 2102238405Sjkim movl %r10d,%eax 2103238405Sjkim movups %xmm6,64(%rsi) 2104238405Sjkim movq %r11,%rcx 2105238405Sjkim movups %xmm7,80(%rsi) 2106238405Sjkim leaq 128(%rdi),%rdi 2107238405Sjkim movups %xmm8,96(%rsi) 2108238405Sjkim leaq 112(%rsi),%rsi 2109238405Sjkim subq $128,%rdx 2110238405Sjkim ja .Lcbc_dec_loop8 2111238405Sjkim 2112238405Sjkim movaps %xmm9,%xmm2 2113238405Sjkim movaps %xmm0,%xmm9 2114238405Sjkim addq $112,%rdx 2115238405Sjkim jle .Lcbc_dec_tail_collected 2116238405Sjkim movups %xmm2,(%rsi) 2117238405Sjkim leal 1(%r10,%r10,1),%eax 2118238405Sjkim leaq 16(%rsi),%rsi 2119238405Sjkim.Lcbc_dec_tail: 2120238405Sjkim movups (%rdi),%xmm2 2121238405Sjkim movaps %xmm2,%xmm8 2122238405Sjkim cmpq $16,%rdx 2123238405Sjkim jbe .Lcbc_dec_one 2124238405Sjkim 2125238405Sjkim movups 16(%rdi),%xmm3 2126238405Sjkim movaps %xmm3,%xmm7 2127238405Sjkim cmpq $32,%rdx 2128238405Sjkim jbe .Lcbc_dec_two 2129238405Sjkim 2130238405Sjkim movups 32(%rdi),%xmm4 2131238405Sjkim movaps %xmm4,%xmm6 2132238405Sjkim cmpq $48,%rdx 2133238405Sjkim jbe .Lcbc_dec_three 2134238405Sjkim 2135238405Sjkim movups 48(%rdi),%xmm5 2136238405Sjkim cmpq $64,%rdx 2137238405Sjkim jbe .Lcbc_dec_four 2138238405Sjkim 2139238405Sjkim movups 64(%rdi),%xmm6 2140238405Sjkim cmpq $80,%rdx 2141238405Sjkim jbe .Lcbc_dec_five 2142238405Sjkim 2143238405Sjkim movups 80(%rdi),%xmm7 2144238405Sjkim cmpq $96,%rdx 2145238405Sjkim jbe .Lcbc_dec_six 2146238405Sjkim 2147238405Sjkim movups 96(%rdi),%xmm8 2148238405Sjkim movaps %xmm9,-24(%rsp) 2149238405Sjkim call _aesni_decrypt8 2150238405Sjkim movups (%rdi),%xmm1 2151238405Sjkim movups 16(%rdi),%xmm0 2152238405Sjkim xorps -24(%rsp),%xmm2 2153238405Sjkim xorps %xmm1,%xmm3 2154238405Sjkim movups 32(%rdi),%xmm1 2155238405Sjkim xorps %xmm0,%xmm4 2156238405Sjkim movups 48(%rdi),%xmm0 2157238405Sjkim xorps %xmm1,%xmm5 2158238405Sjkim movups 64(%rdi),%xmm1 2159238405Sjkim xorps %xmm0,%xmm6 2160238405Sjkim movups 80(%rdi),%xmm0 2161238405Sjkim xorps %xmm1,%xmm7 2162238405Sjkim movups 96(%rdi),%xmm9 2163238405Sjkim xorps %xmm0,%xmm8 2164238405Sjkim movups %xmm2,(%rsi) 2165238405Sjkim movups %xmm3,16(%rsi) 2166238405Sjkim movups %xmm4,32(%rsi) 2167238405Sjkim movups %xmm5,48(%rsi) 2168238405Sjkim movups %xmm6,64(%rsi) 2169238405Sjkim movups %xmm7,80(%rsi) 2170238405Sjkim leaq 96(%rsi),%rsi 2171238405Sjkim movaps %xmm8,%xmm2 2172238405Sjkim subq $112,%rdx 2173238405Sjkim jmp .Lcbc_dec_tail_collected 2174238405Sjkim.align 16 2175238405Sjkim.Lcbc_dec_one: 2176238405Sjkim movups (%rcx),%xmm0 2177238405Sjkim movups 16(%rcx),%xmm1 2178238405Sjkim leaq 32(%rcx),%rcx 2179238405Sjkim xorps %xmm0,%xmm2 2180238405Sjkim.Loop_dec1_16: 2181238405Sjkim.byte 102,15,56,222,209 2182238405Sjkim decl %eax 2183238405Sjkim movups (%rcx),%xmm1 2184238405Sjkim leaq 16(%rcx),%rcx 2185238405Sjkim jnz .Loop_dec1_16 2186238405Sjkim.byte 102,15,56,223,209 2187238405Sjkim xorps %xmm9,%xmm2 2188238405Sjkim movaps %xmm8,%xmm9 2189238405Sjkim subq $16,%rdx 2190238405Sjkim jmp .Lcbc_dec_tail_collected 2191238405Sjkim.align 16 2192238405Sjkim.Lcbc_dec_two: 2193238405Sjkim xorps %xmm4,%xmm4 2194238405Sjkim call _aesni_decrypt3 2195238405Sjkim xorps %xmm9,%xmm2 2196238405Sjkim xorps %xmm8,%xmm3 2197238405Sjkim movups %xmm2,(%rsi) 2198238405Sjkim movaps %xmm7,%xmm9 2199238405Sjkim movaps %xmm3,%xmm2 2200238405Sjkim leaq 16(%rsi),%rsi 2201238405Sjkim subq $32,%rdx 2202238405Sjkim jmp .Lcbc_dec_tail_collected 2203238405Sjkim.align 16 2204238405Sjkim.Lcbc_dec_three: 2205238405Sjkim call _aesni_decrypt3 2206238405Sjkim xorps %xmm9,%xmm2 2207238405Sjkim xorps %xmm8,%xmm3 2208238405Sjkim movups %xmm2,(%rsi) 2209238405Sjkim xorps %xmm7,%xmm4 2210238405Sjkim movups %xmm3,16(%rsi) 2211238405Sjkim movaps %xmm6,%xmm9 2212238405Sjkim movaps %xmm4,%xmm2 2213238405Sjkim leaq 32(%rsi),%rsi 2214238405Sjkim subq $48,%rdx 2215238405Sjkim jmp .Lcbc_dec_tail_collected 2216238405Sjkim.align 16 2217238405Sjkim.Lcbc_dec_four: 2218238405Sjkim call _aesni_decrypt4 2219238405Sjkim xorps %xmm9,%xmm2 2220238405Sjkim movups 48(%rdi),%xmm9 2221238405Sjkim xorps %xmm8,%xmm3 2222238405Sjkim movups %xmm2,(%rsi) 2223238405Sjkim xorps %xmm7,%xmm4 2224238405Sjkim movups %xmm3,16(%rsi) 2225238405Sjkim xorps %xmm6,%xmm5 2226238405Sjkim movups %xmm4,32(%rsi) 2227238405Sjkim movaps %xmm5,%xmm2 2228238405Sjkim leaq 48(%rsi),%rsi 2229238405Sjkim subq $64,%rdx 2230238405Sjkim jmp .Lcbc_dec_tail_collected 2231238405Sjkim.align 16 2232238405Sjkim.Lcbc_dec_five: 2233238405Sjkim xorps %xmm7,%xmm7 2234238405Sjkim call _aesni_decrypt6 2235238405Sjkim movups 16(%rdi),%xmm1 2236238405Sjkim movups 32(%rdi),%xmm0 2237238405Sjkim xorps %xmm9,%xmm2 2238238405Sjkim xorps %xmm8,%xmm3 2239238405Sjkim xorps %xmm1,%xmm4 2240238405Sjkim movups 48(%rdi),%xmm1 2241238405Sjkim xorps %xmm0,%xmm5 2242238405Sjkim movups 64(%rdi),%xmm9 2243238405Sjkim xorps %xmm1,%xmm6 2244238405Sjkim movups %xmm2,(%rsi) 2245238405Sjkim movups %xmm3,16(%rsi) 2246238405Sjkim movups %xmm4,32(%rsi) 2247238405Sjkim movups %xmm5,48(%rsi) 2248238405Sjkim leaq 64(%rsi),%rsi 2249238405Sjkim movaps %xmm6,%xmm2 2250238405Sjkim subq $80,%rdx 2251238405Sjkim jmp .Lcbc_dec_tail_collected 2252238405Sjkim.align 16 2253238405Sjkim.Lcbc_dec_six: 2254238405Sjkim call _aesni_decrypt6 2255238405Sjkim movups 16(%rdi),%xmm1 2256238405Sjkim movups 32(%rdi),%xmm0 2257238405Sjkim xorps %xmm9,%xmm2 2258238405Sjkim xorps %xmm8,%xmm3 2259238405Sjkim xorps %xmm1,%xmm4 2260238405Sjkim movups 48(%rdi),%xmm1 2261238405Sjkim xorps %xmm0,%xmm5 2262238405Sjkim movups 64(%rdi),%xmm0 2263238405Sjkim xorps %xmm1,%xmm6 2264238405Sjkim movups 80(%rdi),%xmm9 2265238405Sjkim xorps %xmm0,%xmm7 2266238405Sjkim movups %xmm2,(%rsi) 2267238405Sjkim movups %xmm3,16(%rsi) 2268238405Sjkim movups %xmm4,32(%rsi) 2269238405Sjkim movups %xmm5,48(%rsi) 2270238405Sjkim movups %xmm6,64(%rsi) 2271238405Sjkim leaq 80(%rsi),%rsi 2272238405Sjkim movaps %xmm7,%xmm2 2273238405Sjkim subq $96,%rdx 2274238405Sjkim jmp .Lcbc_dec_tail_collected 2275238405Sjkim.align 16 2276238405Sjkim.Lcbc_dec_tail_collected: 2277238405Sjkim andq $15,%rdx 2278238405Sjkim movups %xmm9,(%r8) 2279238405Sjkim jnz .Lcbc_dec_tail_partial 2280238405Sjkim movups %xmm2,(%rsi) 2281238405Sjkim jmp .Lcbc_dec_ret 2282238405Sjkim.align 16 2283238405Sjkim.Lcbc_dec_tail_partial: 2284238405Sjkim movaps %xmm2,-24(%rsp) 2285238405Sjkim movq $16,%rcx 2286238405Sjkim movq %rsi,%rdi 2287238405Sjkim subq %rdx,%rcx 2288238405Sjkim leaq -24(%rsp),%rsi 2289238405Sjkim.long 0x9066A4F3 2290238405Sjkim 2291238405Sjkim.Lcbc_dec_ret: 2292238405Sjkim.Lcbc_ret: 2293238405Sjkim .byte 0xf3,0xc3 2294238405Sjkim.size aesni_cbc_encrypt,.-aesni_cbc_encrypt 2295238405Sjkim.globl aesni_set_decrypt_key 2296238405Sjkim.type aesni_set_decrypt_key,@function 2297238405Sjkim.align 16 2298238405Sjkimaesni_set_decrypt_key: 2299238405Sjkim.byte 0x48,0x83,0xEC,0x08 2300238405Sjkim call __aesni_set_encrypt_key 2301238405Sjkim shll $4,%esi 2302238405Sjkim testl %eax,%eax 2303238405Sjkim jnz .Ldec_key_ret 2304238405Sjkim leaq 16(%rdx,%rsi,1),%rdi 2305238405Sjkim 2306238405Sjkim movups (%rdx),%xmm0 2307238405Sjkim movups (%rdi),%xmm1 2308238405Sjkim movups %xmm0,(%rdi) 2309238405Sjkim movups %xmm1,(%rdx) 2310238405Sjkim leaq 16(%rdx),%rdx 2311238405Sjkim leaq -16(%rdi),%rdi 2312238405Sjkim 2313238405Sjkim.Ldec_key_inverse: 2314238405Sjkim movups (%rdx),%xmm0 2315238405Sjkim movups (%rdi),%xmm1 2316238405Sjkim.byte 102,15,56,219,192 2317238405Sjkim.byte 102,15,56,219,201 2318238405Sjkim leaq 16(%rdx),%rdx 2319238405Sjkim leaq -16(%rdi),%rdi 2320238405Sjkim movups %xmm0,16(%rdi) 2321238405Sjkim movups %xmm1,-16(%rdx) 2322238405Sjkim cmpq %rdx,%rdi 2323238405Sjkim ja .Ldec_key_inverse 2324238405Sjkim 2325238405Sjkim movups (%rdx),%xmm0 2326238405Sjkim.byte 102,15,56,219,192 2327238405Sjkim movups %xmm0,(%rdi) 2328238405Sjkim.Ldec_key_ret: 2329238405Sjkim addq $8,%rsp 2330238405Sjkim .byte 0xf3,0xc3 2331238405Sjkim.LSEH_end_set_decrypt_key: 2332238405Sjkim.size aesni_set_decrypt_key,.-aesni_set_decrypt_key 2333238405Sjkim.globl aesni_set_encrypt_key 2334238405Sjkim.type aesni_set_encrypt_key,@function 2335238405Sjkim.align 16 2336238405Sjkimaesni_set_encrypt_key: 2337238405Sjkim__aesni_set_encrypt_key: 2338238405Sjkim.byte 0x48,0x83,0xEC,0x08 2339238405Sjkim movq $-1,%rax 2340238405Sjkim testq %rdi,%rdi 2341238405Sjkim jz .Lenc_key_ret 2342238405Sjkim testq %rdx,%rdx 2343238405Sjkim jz .Lenc_key_ret 2344238405Sjkim 2345238405Sjkim movups (%rdi),%xmm0 2346238405Sjkim xorps %xmm4,%xmm4 2347238405Sjkim leaq 16(%rdx),%rax 2348238405Sjkim cmpl $256,%esi 2349238405Sjkim je .L14rounds 2350238405Sjkim cmpl $192,%esi 2351238405Sjkim je .L12rounds 2352238405Sjkim cmpl $128,%esi 2353238405Sjkim jne .Lbad_keybits 2354238405Sjkim 2355238405Sjkim.L10rounds: 2356238405Sjkim movl $9,%esi 2357238405Sjkim movups %xmm0,(%rdx) 2358238405Sjkim.byte 102,15,58,223,200,1 2359238405Sjkim call .Lkey_expansion_128_cold 2360238405Sjkim.byte 102,15,58,223,200,2 2361238405Sjkim call .Lkey_expansion_128 2362238405Sjkim.byte 102,15,58,223,200,4 2363238405Sjkim call .Lkey_expansion_128 2364238405Sjkim.byte 102,15,58,223,200,8 2365238405Sjkim call .Lkey_expansion_128 2366238405Sjkim.byte 102,15,58,223,200,16 2367238405Sjkim call .Lkey_expansion_128 2368238405Sjkim.byte 102,15,58,223,200,32 2369238405Sjkim call .Lkey_expansion_128 2370238405Sjkim.byte 102,15,58,223,200,64 2371238405Sjkim call .Lkey_expansion_128 2372238405Sjkim.byte 102,15,58,223,200,128 2373238405Sjkim call .Lkey_expansion_128 2374238405Sjkim.byte 102,15,58,223,200,27 2375238405Sjkim call .Lkey_expansion_128 2376238405Sjkim.byte 102,15,58,223,200,54 2377238405Sjkim call .Lkey_expansion_128 2378238405Sjkim movups %xmm0,(%rax) 2379238405Sjkim movl %esi,80(%rax) 2380238405Sjkim xorl %eax,%eax 2381238405Sjkim jmp .Lenc_key_ret 2382238405Sjkim 2383238405Sjkim.align 16 2384238405Sjkim.L12rounds: 2385238405Sjkim movq 16(%rdi),%xmm2 2386238405Sjkim movl $11,%esi 2387238405Sjkim movups %xmm0,(%rdx) 2388238405Sjkim.byte 102,15,58,223,202,1 2389238405Sjkim call .Lkey_expansion_192a_cold 2390238405Sjkim.byte 102,15,58,223,202,2 2391238405Sjkim call .Lkey_expansion_192b 2392238405Sjkim.byte 102,15,58,223,202,4 2393238405Sjkim call .Lkey_expansion_192a 2394238405Sjkim.byte 102,15,58,223,202,8 2395238405Sjkim call .Lkey_expansion_192b 2396238405Sjkim.byte 102,15,58,223,202,16 2397238405Sjkim call .Lkey_expansion_192a 2398238405Sjkim.byte 102,15,58,223,202,32 2399238405Sjkim call .Lkey_expansion_192b 2400238405Sjkim.byte 102,15,58,223,202,64 2401238405Sjkim call .Lkey_expansion_192a 2402238405Sjkim.byte 102,15,58,223,202,128 2403238405Sjkim call .Lkey_expansion_192b 2404238405Sjkim movups %xmm0,(%rax) 2405238405Sjkim movl %esi,48(%rax) 2406238405Sjkim xorq %rax,%rax 2407238405Sjkim jmp .Lenc_key_ret 2408238405Sjkim 2409238405Sjkim.align 16 2410238405Sjkim.L14rounds: 2411238405Sjkim movups 16(%rdi),%xmm2 2412238405Sjkim movl $13,%esi 2413238405Sjkim leaq 16(%rax),%rax 2414238405Sjkim movups %xmm0,(%rdx) 2415238405Sjkim movups %xmm2,16(%rdx) 2416238405Sjkim.byte 102,15,58,223,202,1 2417238405Sjkim call .Lkey_expansion_256a_cold 2418238405Sjkim.byte 102,15,58,223,200,1 2419238405Sjkim call .Lkey_expansion_256b 2420238405Sjkim.byte 102,15,58,223,202,2 2421238405Sjkim call .Lkey_expansion_256a 2422238405Sjkim.byte 102,15,58,223,200,2 2423238405Sjkim call .Lkey_expansion_256b 2424238405Sjkim.byte 102,15,58,223,202,4 2425238405Sjkim call .Lkey_expansion_256a 2426238405Sjkim.byte 102,15,58,223,200,4 2427238405Sjkim call .Lkey_expansion_256b 2428238405Sjkim.byte 102,15,58,223,202,8 2429238405Sjkim call .Lkey_expansion_256a 2430238405Sjkim.byte 102,15,58,223,200,8 2431238405Sjkim call .Lkey_expansion_256b 2432238405Sjkim.byte 102,15,58,223,202,16 2433238405Sjkim call .Lkey_expansion_256a 2434238405Sjkim.byte 102,15,58,223,200,16 2435238405Sjkim call .Lkey_expansion_256b 2436238405Sjkim.byte 102,15,58,223,202,32 2437238405Sjkim call .Lkey_expansion_256a 2438238405Sjkim.byte 102,15,58,223,200,32 2439238405Sjkim call .Lkey_expansion_256b 2440238405Sjkim.byte 102,15,58,223,202,64 2441238405Sjkim call .Lkey_expansion_256a 2442238405Sjkim movups %xmm0,(%rax) 2443238405Sjkim movl %esi,16(%rax) 2444238405Sjkim xorq %rax,%rax 2445238405Sjkim jmp .Lenc_key_ret 2446238405Sjkim 2447238405Sjkim.align 16 2448238405Sjkim.Lbad_keybits: 2449238405Sjkim movq $-2,%rax 2450238405Sjkim.Lenc_key_ret: 2451238405Sjkim addq $8,%rsp 2452238405Sjkim .byte 0xf3,0xc3 2453238405Sjkim.LSEH_end_set_encrypt_key: 2454238405Sjkim 2455238405Sjkim.align 16 2456238405Sjkim.Lkey_expansion_128: 2457238405Sjkim movups %xmm0,(%rax) 2458238405Sjkim leaq 16(%rax),%rax 2459238405Sjkim.Lkey_expansion_128_cold: 2460238405Sjkim shufps $16,%xmm0,%xmm4 2461238405Sjkim xorps %xmm4,%xmm0 2462238405Sjkim shufps $140,%xmm0,%xmm4 2463238405Sjkim xorps %xmm4,%xmm0 2464238405Sjkim shufps $255,%xmm1,%xmm1 2465238405Sjkim xorps %xmm1,%xmm0 2466238405Sjkim .byte 0xf3,0xc3 2467238405Sjkim 2468238405Sjkim.align 16 2469238405Sjkim.Lkey_expansion_192a: 2470238405Sjkim movups %xmm0,(%rax) 2471238405Sjkim leaq 16(%rax),%rax 2472238405Sjkim.Lkey_expansion_192a_cold: 2473238405Sjkim movaps %xmm2,%xmm5 2474238405Sjkim.Lkey_expansion_192b_warm: 2475238405Sjkim shufps $16,%xmm0,%xmm4 2476238405Sjkim movdqa %xmm2,%xmm3 2477238405Sjkim xorps %xmm4,%xmm0 2478238405Sjkim shufps $140,%xmm0,%xmm4 2479238405Sjkim pslldq $4,%xmm3 2480238405Sjkim xorps %xmm4,%xmm0 2481238405Sjkim pshufd $85,%xmm1,%xmm1 2482238405Sjkim pxor %xmm3,%xmm2 2483238405Sjkim pxor %xmm1,%xmm0 2484238405Sjkim pshufd $255,%xmm0,%xmm3 2485238405Sjkim pxor %xmm3,%xmm2 2486238405Sjkim .byte 0xf3,0xc3 2487238405Sjkim 2488238405Sjkim.align 16 2489238405Sjkim.Lkey_expansion_192b: 2490238405Sjkim movaps %xmm0,%xmm3 2491238405Sjkim shufps $68,%xmm0,%xmm5 2492238405Sjkim movups %xmm5,(%rax) 2493238405Sjkim shufps $78,%xmm2,%xmm3 2494238405Sjkim movups %xmm3,16(%rax) 2495238405Sjkim leaq 32(%rax),%rax 2496238405Sjkim jmp .Lkey_expansion_192b_warm 2497238405Sjkim 2498238405Sjkim.align 16 2499238405Sjkim.Lkey_expansion_256a: 2500238405Sjkim movups %xmm2,(%rax) 2501238405Sjkim leaq 16(%rax),%rax 2502238405Sjkim.Lkey_expansion_256a_cold: 2503238405Sjkim shufps $16,%xmm0,%xmm4 2504238405Sjkim xorps %xmm4,%xmm0 2505238405Sjkim shufps $140,%xmm0,%xmm4 2506238405Sjkim xorps %xmm4,%xmm0 2507238405Sjkim shufps $255,%xmm1,%xmm1 2508238405Sjkim xorps %xmm1,%xmm0 2509238405Sjkim .byte 0xf3,0xc3 2510238405Sjkim 2511238405Sjkim.align 16 2512238405Sjkim.Lkey_expansion_256b: 2513238405Sjkim movups %xmm0,(%rax) 2514238405Sjkim leaq 16(%rax),%rax 2515238405Sjkim 2516238405Sjkim shufps $16,%xmm2,%xmm4 2517238405Sjkim xorps %xmm4,%xmm2 2518238405Sjkim shufps $140,%xmm2,%xmm4 2519238405Sjkim xorps %xmm4,%xmm2 2520238405Sjkim shufps $170,%xmm1,%xmm1 2521238405Sjkim xorps %xmm1,%xmm2 2522238405Sjkim .byte 0xf3,0xc3 2523238405Sjkim.size aesni_set_encrypt_key,.-aesni_set_encrypt_key 2524238405Sjkim.size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key 2525238405Sjkim.align 64 2526238405Sjkim.Lbswap_mask: 2527238405Sjkim.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 2528238405Sjkim.Lincrement32: 2529238405Sjkim.long 6,6,6,0 2530238405Sjkim.Lincrement64: 2531238405Sjkim.long 1,0,0,0 2532238405Sjkim.Lxts_magic: 2533238405Sjkim.long 0x87,0,1,0 2534238405Sjkim 2535238405Sjkim.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 2536238405Sjkim.align 64 2537