1305153Sjkim/* $FreeBSD$ */ 2305153Sjkim/* Do not modify. This file is auto-generated from aesni-x86_64.pl. */ 3238405Sjkim.text 4290207Sjkim 5238405Sjkim.globl aesni_encrypt 6238405Sjkim.type aesni_encrypt,@function 7238405Sjkim.align 16 8238405Sjkimaesni_encrypt: 9238405Sjkim movups (%rdi),%xmm2 10238405Sjkim movl 240(%rdx),%eax 11238405Sjkim movups (%rdx),%xmm0 12238405Sjkim movups 16(%rdx),%xmm1 13238405Sjkim leaq 32(%rdx),%rdx 14238405Sjkim xorps %xmm0,%xmm2 15238405Sjkim.Loop_enc1_1: 16238405Sjkim.byte 102,15,56,220,209 17238405Sjkim decl %eax 18238405Sjkim movups (%rdx),%xmm1 19238405Sjkim leaq 16(%rdx),%rdx 20290207Sjkim jnz .Loop_enc1_1 21238405Sjkim.byte 102,15,56,221,209 22290207Sjkim pxor %xmm0,%xmm0 23290207Sjkim pxor %xmm1,%xmm1 24238405Sjkim movups %xmm2,(%rsi) 25290207Sjkim pxor %xmm2,%xmm2 26238405Sjkim .byte 0xf3,0xc3 27238405Sjkim.size aesni_encrypt,.-aesni_encrypt 28238405Sjkim 29238405Sjkim.globl aesni_decrypt 30238405Sjkim.type aesni_decrypt,@function 31238405Sjkim.align 16 32238405Sjkimaesni_decrypt: 33238405Sjkim movups (%rdi),%xmm2 34238405Sjkim movl 240(%rdx),%eax 35238405Sjkim movups (%rdx),%xmm0 36238405Sjkim movups 16(%rdx),%xmm1 37238405Sjkim leaq 32(%rdx),%rdx 38238405Sjkim xorps %xmm0,%xmm2 39238405Sjkim.Loop_dec1_2: 40238405Sjkim.byte 102,15,56,222,209 41238405Sjkim decl %eax 42238405Sjkim movups (%rdx),%xmm1 43238405Sjkim leaq 16(%rdx),%rdx 44290207Sjkim jnz .Loop_dec1_2 45238405Sjkim.byte 102,15,56,223,209 46290207Sjkim pxor %xmm0,%xmm0 47290207Sjkim pxor %xmm1,%xmm1 48238405Sjkim movups %xmm2,(%rsi) 49290207Sjkim pxor %xmm2,%xmm2 50238405Sjkim .byte 0xf3,0xc3 51238405Sjkim.size aesni_decrypt, .-aesni_decrypt 52290207Sjkim.type _aesni_encrypt2,@function 53290207Sjkim.align 16 54290207Sjkim_aesni_encrypt2: 55290207Sjkim movups (%rcx),%xmm0 56290207Sjkim shll $4,%eax 57290207Sjkim movups 16(%rcx),%xmm1 58290207Sjkim xorps %xmm0,%xmm2 59290207Sjkim xorps %xmm0,%xmm3 60290207Sjkim movups 32(%rcx),%xmm0 61290207Sjkim leaq 32(%rcx,%rax,1),%rcx 62290207Sjkim negq %rax 63290207Sjkim addq $16,%rax 64290207Sjkim 65290207Sjkim.Lenc_loop2: 66290207Sjkim.byte 102,15,56,220,209 67290207Sjkim.byte 102,15,56,220,217 68290207Sjkim movups (%rcx,%rax,1),%xmm1 69290207Sjkim addq $32,%rax 70290207Sjkim.byte 102,15,56,220,208 71290207Sjkim.byte 102,15,56,220,216 72290207Sjkim movups -16(%rcx,%rax,1),%xmm0 73290207Sjkim jnz .Lenc_loop2 74290207Sjkim 75290207Sjkim.byte 102,15,56,220,209 76290207Sjkim.byte 102,15,56,220,217 77290207Sjkim.byte 102,15,56,221,208 78290207Sjkim.byte 102,15,56,221,216 79290207Sjkim .byte 0xf3,0xc3 80290207Sjkim.size _aesni_encrypt2,.-_aesni_encrypt2 81290207Sjkim.type _aesni_decrypt2,@function 82290207Sjkim.align 16 83290207Sjkim_aesni_decrypt2: 84290207Sjkim movups (%rcx),%xmm0 85290207Sjkim shll $4,%eax 86290207Sjkim movups 16(%rcx),%xmm1 87290207Sjkim xorps %xmm0,%xmm2 88290207Sjkim xorps %xmm0,%xmm3 89290207Sjkim movups 32(%rcx),%xmm0 90290207Sjkim leaq 32(%rcx,%rax,1),%rcx 91290207Sjkim negq %rax 92290207Sjkim addq $16,%rax 93290207Sjkim 94290207Sjkim.Ldec_loop2: 95290207Sjkim.byte 102,15,56,222,209 96290207Sjkim.byte 102,15,56,222,217 97290207Sjkim movups (%rcx,%rax,1),%xmm1 98290207Sjkim addq $32,%rax 99290207Sjkim.byte 102,15,56,222,208 100290207Sjkim.byte 102,15,56,222,216 101290207Sjkim movups -16(%rcx,%rax,1),%xmm0 102290207Sjkim jnz .Ldec_loop2 103290207Sjkim 104290207Sjkim.byte 102,15,56,222,209 105290207Sjkim.byte 102,15,56,222,217 106290207Sjkim.byte 102,15,56,223,208 107290207Sjkim.byte 102,15,56,223,216 108290207Sjkim .byte 0xf3,0xc3 109290207Sjkim.size _aesni_decrypt2,.-_aesni_decrypt2 110238405Sjkim.type _aesni_encrypt3,@function 111238405Sjkim.align 16 112238405Sjkim_aesni_encrypt3: 113238405Sjkim movups (%rcx),%xmm0 114290207Sjkim shll $4,%eax 115238405Sjkim movups 16(%rcx),%xmm1 116238405Sjkim xorps %xmm0,%xmm2 117238405Sjkim xorps %xmm0,%xmm3 118238405Sjkim xorps %xmm0,%xmm4 119290207Sjkim movups 32(%rcx),%xmm0 120290207Sjkim leaq 32(%rcx,%rax,1),%rcx 121290207Sjkim negq %rax 122290207Sjkim addq $16,%rax 123238405Sjkim 124238405Sjkim.Lenc_loop3: 125238405Sjkim.byte 102,15,56,220,209 126238405Sjkim.byte 102,15,56,220,217 127238405Sjkim.byte 102,15,56,220,225 128290207Sjkim movups (%rcx,%rax,1),%xmm1 129290207Sjkim addq $32,%rax 130238405Sjkim.byte 102,15,56,220,208 131238405Sjkim.byte 102,15,56,220,216 132238405Sjkim.byte 102,15,56,220,224 133290207Sjkim movups -16(%rcx,%rax,1),%xmm0 134238405Sjkim jnz .Lenc_loop3 135238405Sjkim 136238405Sjkim.byte 102,15,56,220,209 137238405Sjkim.byte 102,15,56,220,217 138238405Sjkim.byte 102,15,56,220,225 139238405Sjkim.byte 102,15,56,221,208 140238405Sjkim.byte 102,15,56,221,216 141238405Sjkim.byte 102,15,56,221,224 142238405Sjkim .byte 0xf3,0xc3 143238405Sjkim.size _aesni_encrypt3,.-_aesni_encrypt3 144238405Sjkim.type _aesni_decrypt3,@function 145238405Sjkim.align 16 146238405Sjkim_aesni_decrypt3: 147238405Sjkim movups (%rcx),%xmm0 148290207Sjkim shll $4,%eax 149238405Sjkim movups 16(%rcx),%xmm1 150238405Sjkim xorps %xmm0,%xmm2 151238405Sjkim xorps %xmm0,%xmm3 152238405Sjkim xorps %xmm0,%xmm4 153290207Sjkim movups 32(%rcx),%xmm0 154290207Sjkim leaq 32(%rcx,%rax,1),%rcx 155290207Sjkim negq %rax 156290207Sjkim addq $16,%rax 157238405Sjkim 158238405Sjkim.Ldec_loop3: 159238405Sjkim.byte 102,15,56,222,209 160238405Sjkim.byte 102,15,56,222,217 161238405Sjkim.byte 102,15,56,222,225 162290207Sjkim movups (%rcx,%rax,1),%xmm1 163290207Sjkim addq $32,%rax 164238405Sjkim.byte 102,15,56,222,208 165238405Sjkim.byte 102,15,56,222,216 166238405Sjkim.byte 102,15,56,222,224 167290207Sjkim movups -16(%rcx,%rax,1),%xmm0 168238405Sjkim jnz .Ldec_loop3 169238405Sjkim 170238405Sjkim.byte 102,15,56,222,209 171238405Sjkim.byte 102,15,56,222,217 172238405Sjkim.byte 102,15,56,222,225 173238405Sjkim.byte 102,15,56,223,208 174238405Sjkim.byte 102,15,56,223,216 175238405Sjkim.byte 102,15,56,223,224 176238405Sjkim .byte 0xf3,0xc3 177238405Sjkim.size _aesni_decrypt3,.-_aesni_decrypt3 178238405Sjkim.type _aesni_encrypt4,@function 179238405Sjkim.align 16 180238405Sjkim_aesni_encrypt4: 181238405Sjkim movups (%rcx),%xmm0 182290207Sjkim shll $4,%eax 183238405Sjkim movups 16(%rcx),%xmm1 184238405Sjkim xorps %xmm0,%xmm2 185238405Sjkim xorps %xmm0,%xmm3 186238405Sjkim xorps %xmm0,%xmm4 187238405Sjkim xorps %xmm0,%xmm5 188290207Sjkim movups 32(%rcx),%xmm0 189290207Sjkim leaq 32(%rcx,%rax,1),%rcx 190290207Sjkim negq %rax 191290207Sjkim.byte 0x0f,0x1f,0x00 192290207Sjkim addq $16,%rax 193238405Sjkim 194238405Sjkim.Lenc_loop4: 195238405Sjkim.byte 102,15,56,220,209 196238405Sjkim.byte 102,15,56,220,217 197238405Sjkim.byte 102,15,56,220,225 198238405Sjkim.byte 102,15,56,220,233 199290207Sjkim movups (%rcx,%rax,1),%xmm1 200290207Sjkim addq $32,%rax 201238405Sjkim.byte 102,15,56,220,208 202238405Sjkim.byte 102,15,56,220,216 203238405Sjkim.byte 102,15,56,220,224 204238405Sjkim.byte 102,15,56,220,232 205290207Sjkim movups -16(%rcx,%rax,1),%xmm0 206238405Sjkim jnz .Lenc_loop4 207238405Sjkim 208238405Sjkim.byte 102,15,56,220,209 209238405Sjkim.byte 102,15,56,220,217 210238405Sjkim.byte 102,15,56,220,225 211238405Sjkim.byte 102,15,56,220,233 212238405Sjkim.byte 102,15,56,221,208 213238405Sjkim.byte 102,15,56,221,216 214238405Sjkim.byte 102,15,56,221,224 215238405Sjkim.byte 102,15,56,221,232 216238405Sjkim .byte 0xf3,0xc3 217238405Sjkim.size _aesni_encrypt4,.-_aesni_encrypt4 218238405Sjkim.type _aesni_decrypt4,@function 219238405Sjkim.align 16 220238405Sjkim_aesni_decrypt4: 221238405Sjkim movups (%rcx),%xmm0 222290207Sjkim shll $4,%eax 223238405Sjkim movups 16(%rcx),%xmm1 224238405Sjkim xorps %xmm0,%xmm2 225238405Sjkim xorps %xmm0,%xmm3 226238405Sjkim xorps %xmm0,%xmm4 227238405Sjkim xorps %xmm0,%xmm5 228290207Sjkim movups 32(%rcx),%xmm0 229290207Sjkim leaq 32(%rcx,%rax,1),%rcx 230290207Sjkim negq %rax 231290207Sjkim.byte 0x0f,0x1f,0x00 232290207Sjkim addq $16,%rax 233238405Sjkim 234238405Sjkim.Ldec_loop4: 235238405Sjkim.byte 102,15,56,222,209 236238405Sjkim.byte 102,15,56,222,217 237238405Sjkim.byte 102,15,56,222,225 238238405Sjkim.byte 102,15,56,222,233 239290207Sjkim movups (%rcx,%rax,1),%xmm1 240290207Sjkim addq $32,%rax 241238405Sjkim.byte 102,15,56,222,208 242238405Sjkim.byte 102,15,56,222,216 243238405Sjkim.byte 102,15,56,222,224 244238405Sjkim.byte 102,15,56,222,232 245290207Sjkim movups -16(%rcx,%rax,1),%xmm0 246238405Sjkim jnz .Ldec_loop4 247238405Sjkim 248238405Sjkim.byte 102,15,56,222,209 249238405Sjkim.byte 102,15,56,222,217 250238405Sjkim.byte 102,15,56,222,225 251238405Sjkim.byte 102,15,56,222,233 252238405Sjkim.byte 102,15,56,223,208 253238405Sjkim.byte 102,15,56,223,216 254238405Sjkim.byte 102,15,56,223,224 255238405Sjkim.byte 102,15,56,223,232 256238405Sjkim .byte 0xf3,0xc3 257238405Sjkim.size _aesni_decrypt4,.-_aesni_decrypt4 258238405Sjkim.type _aesni_encrypt6,@function 259238405Sjkim.align 16 260238405Sjkim_aesni_encrypt6: 261238405Sjkim movups (%rcx),%xmm0 262290207Sjkim shll $4,%eax 263238405Sjkim movups 16(%rcx),%xmm1 264238405Sjkim xorps %xmm0,%xmm2 265238405Sjkim pxor %xmm0,%xmm3 266290207Sjkim pxor %xmm0,%xmm4 267238405Sjkim.byte 102,15,56,220,209 268290207Sjkim leaq 32(%rcx,%rax,1),%rcx 269290207Sjkim negq %rax 270238405Sjkim.byte 102,15,56,220,217 271238405Sjkim pxor %xmm0,%xmm5 272290207Sjkim pxor %xmm0,%xmm6 273238405Sjkim.byte 102,15,56,220,225 274238405Sjkim pxor %xmm0,%xmm7 275290207Sjkim movups (%rcx,%rax,1),%xmm0 276290207Sjkim addq $16,%rax 277238405Sjkim jmp .Lenc_loop6_enter 278238405Sjkim.align 16 279238405Sjkim.Lenc_loop6: 280238405Sjkim.byte 102,15,56,220,209 281238405Sjkim.byte 102,15,56,220,217 282238405Sjkim.byte 102,15,56,220,225 283290207Sjkim.Lenc_loop6_enter: 284238405Sjkim.byte 102,15,56,220,233 285238405Sjkim.byte 102,15,56,220,241 286238405Sjkim.byte 102,15,56,220,249 287290207Sjkim movups (%rcx,%rax,1),%xmm1 288290207Sjkim addq $32,%rax 289238405Sjkim.byte 102,15,56,220,208 290238405Sjkim.byte 102,15,56,220,216 291238405Sjkim.byte 102,15,56,220,224 292238405Sjkim.byte 102,15,56,220,232 293238405Sjkim.byte 102,15,56,220,240 294238405Sjkim.byte 102,15,56,220,248 295290207Sjkim movups -16(%rcx,%rax,1),%xmm0 296238405Sjkim jnz .Lenc_loop6 297238405Sjkim 298238405Sjkim.byte 102,15,56,220,209 299238405Sjkim.byte 102,15,56,220,217 300238405Sjkim.byte 102,15,56,220,225 301238405Sjkim.byte 102,15,56,220,233 302238405Sjkim.byte 102,15,56,220,241 303238405Sjkim.byte 102,15,56,220,249 304238405Sjkim.byte 102,15,56,221,208 305238405Sjkim.byte 102,15,56,221,216 306238405Sjkim.byte 102,15,56,221,224 307238405Sjkim.byte 102,15,56,221,232 308238405Sjkim.byte 102,15,56,221,240 309238405Sjkim.byte 102,15,56,221,248 310238405Sjkim .byte 0xf3,0xc3 311238405Sjkim.size _aesni_encrypt6,.-_aesni_encrypt6 312238405Sjkim.type _aesni_decrypt6,@function 313238405Sjkim.align 16 314238405Sjkim_aesni_decrypt6: 315238405Sjkim movups (%rcx),%xmm0 316290207Sjkim shll $4,%eax 317238405Sjkim movups 16(%rcx),%xmm1 318238405Sjkim xorps %xmm0,%xmm2 319238405Sjkim pxor %xmm0,%xmm3 320290207Sjkim pxor %xmm0,%xmm4 321238405Sjkim.byte 102,15,56,222,209 322290207Sjkim leaq 32(%rcx,%rax,1),%rcx 323290207Sjkim negq %rax 324238405Sjkim.byte 102,15,56,222,217 325238405Sjkim pxor %xmm0,%xmm5 326290207Sjkim pxor %xmm0,%xmm6 327238405Sjkim.byte 102,15,56,222,225 328238405Sjkim pxor %xmm0,%xmm7 329290207Sjkim movups (%rcx,%rax,1),%xmm0 330290207Sjkim addq $16,%rax 331238405Sjkim jmp .Ldec_loop6_enter 332238405Sjkim.align 16 333238405Sjkim.Ldec_loop6: 334238405Sjkim.byte 102,15,56,222,209 335238405Sjkim.byte 102,15,56,222,217 336238405Sjkim.byte 102,15,56,222,225 337290207Sjkim.Ldec_loop6_enter: 338238405Sjkim.byte 102,15,56,222,233 339238405Sjkim.byte 102,15,56,222,241 340238405Sjkim.byte 102,15,56,222,249 341290207Sjkim movups (%rcx,%rax,1),%xmm1 342290207Sjkim addq $32,%rax 343238405Sjkim.byte 102,15,56,222,208 344238405Sjkim.byte 102,15,56,222,216 345238405Sjkim.byte 102,15,56,222,224 346238405Sjkim.byte 102,15,56,222,232 347238405Sjkim.byte 102,15,56,222,240 348238405Sjkim.byte 102,15,56,222,248 349290207Sjkim movups -16(%rcx,%rax,1),%xmm0 350238405Sjkim jnz .Ldec_loop6 351238405Sjkim 352238405Sjkim.byte 102,15,56,222,209 353238405Sjkim.byte 102,15,56,222,217 354238405Sjkim.byte 102,15,56,222,225 355238405Sjkim.byte 102,15,56,222,233 356238405Sjkim.byte 102,15,56,222,241 357238405Sjkim.byte 102,15,56,222,249 358238405Sjkim.byte 102,15,56,223,208 359238405Sjkim.byte 102,15,56,223,216 360238405Sjkim.byte 102,15,56,223,224 361238405Sjkim.byte 102,15,56,223,232 362238405Sjkim.byte 102,15,56,223,240 363238405Sjkim.byte 102,15,56,223,248 364238405Sjkim .byte 0xf3,0xc3 365238405Sjkim.size _aesni_decrypt6,.-_aesni_decrypt6 366238405Sjkim.type _aesni_encrypt8,@function 367238405Sjkim.align 16 368238405Sjkim_aesni_encrypt8: 369238405Sjkim movups (%rcx),%xmm0 370290207Sjkim shll $4,%eax 371238405Sjkim movups 16(%rcx),%xmm1 372238405Sjkim xorps %xmm0,%xmm2 373238405Sjkim xorps %xmm0,%xmm3 374238405Sjkim pxor %xmm0,%xmm4 375238405Sjkim pxor %xmm0,%xmm5 376238405Sjkim pxor %xmm0,%xmm6 377290207Sjkim leaq 32(%rcx,%rax,1),%rcx 378290207Sjkim negq %rax 379290207Sjkim.byte 102,15,56,220,209 380238405Sjkim pxor %xmm0,%xmm7 381238405Sjkim pxor %xmm0,%xmm8 382290207Sjkim.byte 102,15,56,220,217 383238405Sjkim pxor %xmm0,%xmm9 384290207Sjkim movups (%rcx,%rax,1),%xmm0 385290207Sjkim addq $16,%rax 386290207Sjkim jmp .Lenc_loop8_inner 387238405Sjkim.align 16 388238405Sjkim.Lenc_loop8: 389238405Sjkim.byte 102,15,56,220,209 390238405Sjkim.byte 102,15,56,220,217 391290207Sjkim.Lenc_loop8_inner: 392238405Sjkim.byte 102,15,56,220,225 393238405Sjkim.byte 102,15,56,220,233 394238405Sjkim.byte 102,15,56,220,241 395238405Sjkim.byte 102,15,56,220,249 396238405Sjkim.byte 102,68,15,56,220,193 397238405Sjkim.byte 102,68,15,56,220,201 398238405Sjkim.Lenc_loop8_enter: 399290207Sjkim movups (%rcx,%rax,1),%xmm1 400290207Sjkim addq $32,%rax 401238405Sjkim.byte 102,15,56,220,208 402238405Sjkim.byte 102,15,56,220,216 403238405Sjkim.byte 102,15,56,220,224 404238405Sjkim.byte 102,15,56,220,232 405238405Sjkim.byte 102,15,56,220,240 406238405Sjkim.byte 102,15,56,220,248 407238405Sjkim.byte 102,68,15,56,220,192 408238405Sjkim.byte 102,68,15,56,220,200 409290207Sjkim movups -16(%rcx,%rax,1),%xmm0 410238405Sjkim jnz .Lenc_loop8 411238405Sjkim 412238405Sjkim.byte 102,15,56,220,209 413238405Sjkim.byte 102,15,56,220,217 414238405Sjkim.byte 102,15,56,220,225 415238405Sjkim.byte 102,15,56,220,233 416238405Sjkim.byte 102,15,56,220,241 417238405Sjkim.byte 102,15,56,220,249 418238405Sjkim.byte 102,68,15,56,220,193 419238405Sjkim.byte 102,68,15,56,220,201 420238405Sjkim.byte 102,15,56,221,208 421238405Sjkim.byte 102,15,56,221,216 422238405Sjkim.byte 102,15,56,221,224 423238405Sjkim.byte 102,15,56,221,232 424238405Sjkim.byte 102,15,56,221,240 425238405Sjkim.byte 102,15,56,221,248 426238405Sjkim.byte 102,68,15,56,221,192 427238405Sjkim.byte 102,68,15,56,221,200 428238405Sjkim .byte 0xf3,0xc3 429238405Sjkim.size _aesni_encrypt8,.-_aesni_encrypt8 430238405Sjkim.type _aesni_decrypt8,@function 431238405Sjkim.align 16 432238405Sjkim_aesni_decrypt8: 433238405Sjkim movups (%rcx),%xmm0 434290207Sjkim shll $4,%eax 435238405Sjkim movups 16(%rcx),%xmm1 436238405Sjkim xorps %xmm0,%xmm2 437238405Sjkim xorps %xmm0,%xmm3 438238405Sjkim pxor %xmm0,%xmm4 439238405Sjkim pxor %xmm0,%xmm5 440238405Sjkim pxor %xmm0,%xmm6 441290207Sjkim leaq 32(%rcx,%rax,1),%rcx 442290207Sjkim negq %rax 443290207Sjkim.byte 102,15,56,222,209 444238405Sjkim pxor %xmm0,%xmm7 445238405Sjkim pxor %xmm0,%xmm8 446290207Sjkim.byte 102,15,56,222,217 447238405Sjkim pxor %xmm0,%xmm9 448290207Sjkim movups (%rcx,%rax,1),%xmm0 449290207Sjkim addq $16,%rax 450290207Sjkim jmp .Ldec_loop8_inner 451238405Sjkim.align 16 452238405Sjkim.Ldec_loop8: 453238405Sjkim.byte 102,15,56,222,209 454238405Sjkim.byte 102,15,56,222,217 455290207Sjkim.Ldec_loop8_inner: 456238405Sjkim.byte 102,15,56,222,225 457238405Sjkim.byte 102,15,56,222,233 458238405Sjkim.byte 102,15,56,222,241 459238405Sjkim.byte 102,15,56,222,249 460238405Sjkim.byte 102,68,15,56,222,193 461238405Sjkim.byte 102,68,15,56,222,201 462238405Sjkim.Ldec_loop8_enter: 463290207Sjkim movups (%rcx,%rax,1),%xmm1 464290207Sjkim addq $32,%rax 465238405Sjkim.byte 102,15,56,222,208 466238405Sjkim.byte 102,15,56,222,216 467238405Sjkim.byte 102,15,56,222,224 468238405Sjkim.byte 102,15,56,222,232 469238405Sjkim.byte 102,15,56,222,240 470238405Sjkim.byte 102,15,56,222,248 471238405Sjkim.byte 102,68,15,56,222,192 472238405Sjkim.byte 102,68,15,56,222,200 473290207Sjkim movups -16(%rcx,%rax,1),%xmm0 474238405Sjkim jnz .Ldec_loop8 475238405Sjkim 476238405Sjkim.byte 102,15,56,222,209 477238405Sjkim.byte 102,15,56,222,217 478238405Sjkim.byte 102,15,56,222,225 479238405Sjkim.byte 102,15,56,222,233 480238405Sjkim.byte 102,15,56,222,241 481238405Sjkim.byte 102,15,56,222,249 482238405Sjkim.byte 102,68,15,56,222,193 483238405Sjkim.byte 102,68,15,56,222,201 484238405Sjkim.byte 102,15,56,223,208 485238405Sjkim.byte 102,15,56,223,216 486238405Sjkim.byte 102,15,56,223,224 487238405Sjkim.byte 102,15,56,223,232 488238405Sjkim.byte 102,15,56,223,240 489238405Sjkim.byte 102,15,56,223,248 490238405Sjkim.byte 102,68,15,56,223,192 491238405Sjkim.byte 102,68,15,56,223,200 492238405Sjkim .byte 0xf3,0xc3 493238405Sjkim.size _aesni_decrypt8,.-_aesni_decrypt8 494238405Sjkim.globl aesni_ecb_encrypt 495238405Sjkim.type aesni_ecb_encrypt,@function 496238405Sjkim.align 16 497238405Sjkimaesni_ecb_encrypt: 498238405Sjkim andq $-16,%rdx 499238405Sjkim jz .Lecb_ret 500238405Sjkim 501238405Sjkim movl 240(%rcx),%eax 502238405Sjkim movups (%rcx),%xmm0 503238405Sjkim movq %rcx,%r11 504238405Sjkim movl %eax,%r10d 505238405Sjkim testl %r8d,%r8d 506238405Sjkim jz .Lecb_decrypt 507238405Sjkim 508296279Sjkim cmpq $0x80,%rdx 509238405Sjkim jb .Lecb_enc_tail 510238405Sjkim 511238405Sjkim movdqu (%rdi),%xmm2 512238405Sjkim movdqu 16(%rdi),%xmm3 513238405Sjkim movdqu 32(%rdi),%xmm4 514238405Sjkim movdqu 48(%rdi),%xmm5 515238405Sjkim movdqu 64(%rdi),%xmm6 516238405Sjkim movdqu 80(%rdi),%xmm7 517238405Sjkim movdqu 96(%rdi),%xmm8 518238405Sjkim movdqu 112(%rdi),%xmm9 519238405Sjkim leaq 128(%rdi),%rdi 520296279Sjkim subq $0x80,%rdx 521238405Sjkim jmp .Lecb_enc_loop8_enter 522238405Sjkim.align 16 523238405Sjkim.Lecb_enc_loop8: 524238405Sjkim movups %xmm2,(%rsi) 525238405Sjkim movq %r11,%rcx 526238405Sjkim movdqu (%rdi),%xmm2 527238405Sjkim movl %r10d,%eax 528238405Sjkim movups %xmm3,16(%rsi) 529238405Sjkim movdqu 16(%rdi),%xmm3 530238405Sjkim movups %xmm4,32(%rsi) 531238405Sjkim movdqu 32(%rdi),%xmm4 532238405Sjkim movups %xmm5,48(%rsi) 533238405Sjkim movdqu 48(%rdi),%xmm5 534238405Sjkim movups %xmm6,64(%rsi) 535238405Sjkim movdqu 64(%rdi),%xmm6 536238405Sjkim movups %xmm7,80(%rsi) 537238405Sjkim movdqu 80(%rdi),%xmm7 538238405Sjkim movups %xmm8,96(%rsi) 539238405Sjkim movdqu 96(%rdi),%xmm8 540238405Sjkim movups %xmm9,112(%rsi) 541238405Sjkim leaq 128(%rsi),%rsi 542238405Sjkim movdqu 112(%rdi),%xmm9 543238405Sjkim leaq 128(%rdi),%rdi 544238405Sjkim.Lecb_enc_loop8_enter: 545238405Sjkim 546238405Sjkim call _aesni_encrypt8 547238405Sjkim 548296279Sjkim subq $0x80,%rdx 549238405Sjkim jnc .Lecb_enc_loop8 550238405Sjkim 551238405Sjkim movups %xmm2,(%rsi) 552238405Sjkim movq %r11,%rcx 553238405Sjkim movups %xmm3,16(%rsi) 554238405Sjkim movl %r10d,%eax 555238405Sjkim movups %xmm4,32(%rsi) 556238405Sjkim movups %xmm5,48(%rsi) 557238405Sjkim movups %xmm6,64(%rsi) 558238405Sjkim movups %xmm7,80(%rsi) 559238405Sjkim movups %xmm8,96(%rsi) 560238405Sjkim movups %xmm9,112(%rsi) 561238405Sjkim leaq 128(%rsi),%rsi 562296279Sjkim addq $0x80,%rdx 563238405Sjkim jz .Lecb_ret 564238405Sjkim 565238405Sjkim.Lecb_enc_tail: 566238405Sjkim movups (%rdi),%xmm2 567296279Sjkim cmpq $0x20,%rdx 568238405Sjkim jb .Lecb_enc_one 569238405Sjkim movups 16(%rdi),%xmm3 570238405Sjkim je .Lecb_enc_two 571238405Sjkim movups 32(%rdi),%xmm4 572296279Sjkim cmpq $0x40,%rdx 573238405Sjkim jb .Lecb_enc_three 574238405Sjkim movups 48(%rdi),%xmm5 575238405Sjkim je .Lecb_enc_four 576238405Sjkim movups 64(%rdi),%xmm6 577296279Sjkim cmpq $0x60,%rdx 578238405Sjkim jb .Lecb_enc_five 579238405Sjkim movups 80(%rdi),%xmm7 580238405Sjkim je .Lecb_enc_six 581238405Sjkim movdqu 96(%rdi),%xmm8 582290207Sjkim xorps %xmm9,%xmm9 583238405Sjkim call _aesni_encrypt8 584238405Sjkim movups %xmm2,(%rsi) 585238405Sjkim movups %xmm3,16(%rsi) 586238405Sjkim movups %xmm4,32(%rsi) 587238405Sjkim movups %xmm5,48(%rsi) 588238405Sjkim movups %xmm6,64(%rsi) 589238405Sjkim movups %xmm7,80(%rsi) 590238405Sjkim movups %xmm8,96(%rsi) 591238405Sjkim jmp .Lecb_ret 592238405Sjkim.align 16 593238405Sjkim.Lecb_enc_one: 594238405Sjkim movups (%rcx),%xmm0 595238405Sjkim movups 16(%rcx),%xmm1 596238405Sjkim leaq 32(%rcx),%rcx 597238405Sjkim xorps %xmm0,%xmm2 598238405Sjkim.Loop_enc1_3: 599238405Sjkim.byte 102,15,56,220,209 600238405Sjkim decl %eax 601238405Sjkim movups (%rcx),%xmm1 602238405Sjkim leaq 16(%rcx),%rcx 603290207Sjkim jnz .Loop_enc1_3 604238405Sjkim.byte 102,15,56,221,209 605238405Sjkim movups %xmm2,(%rsi) 606238405Sjkim jmp .Lecb_ret 607238405Sjkim.align 16 608238405Sjkim.Lecb_enc_two: 609290207Sjkim call _aesni_encrypt2 610238405Sjkim movups %xmm2,(%rsi) 611238405Sjkim movups %xmm3,16(%rsi) 612238405Sjkim jmp .Lecb_ret 613238405Sjkim.align 16 614238405Sjkim.Lecb_enc_three: 615238405Sjkim call _aesni_encrypt3 616238405Sjkim movups %xmm2,(%rsi) 617238405Sjkim movups %xmm3,16(%rsi) 618238405Sjkim movups %xmm4,32(%rsi) 619238405Sjkim jmp .Lecb_ret 620238405Sjkim.align 16 621238405Sjkim.Lecb_enc_four: 622238405Sjkim call _aesni_encrypt4 623238405Sjkim movups %xmm2,(%rsi) 624238405Sjkim movups %xmm3,16(%rsi) 625238405Sjkim movups %xmm4,32(%rsi) 626238405Sjkim movups %xmm5,48(%rsi) 627238405Sjkim jmp .Lecb_ret 628238405Sjkim.align 16 629238405Sjkim.Lecb_enc_five: 630238405Sjkim xorps %xmm7,%xmm7 631238405Sjkim call _aesni_encrypt6 632238405Sjkim movups %xmm2,(%rsi) 633238405Sjkim movups %xmm3,16(%rsi) 634238405Sjkim movups %xmm4,32(%rsi) 635238405Sjkim movups %xmm5,48(%rsi) 636238405Sjkim movups %xmm6,64(%rsi) 637238405Sjkim jmp .Lecb_ret 638238405Sjkim.align 16 639238405Sjkim.Lecb_enc_six: 640238405Sjkim call _aesni_encrypt6 641238405Sjkim movups %xmm2,(%rsi) 642238405Sjkim movups %xmm3,16(%rsi) 643238405Sjkim movups %xmm4,32(%rsi) 644238405Sjkim movups %xmm5,48(%rsi) 645238405Sjkim movups %xmm6,64(%rsi) 646238405Sjkim movups %xmm7,80(%rsi) 647238405Sjkim jmp .Lecb_ret 648238405Sjkim 649238405Sjkim.align 16 650238405Sjkim.Lecb_decrypt: 651296279Sjkim cmpq $0x80,%rdx 652238405Sjkim jb .Lecb_dec_tail 653238405Sjkim 654238405Sjkim movdqu (%rdi),%xmm2 655238405Sjkim movdqu 16(%rdi),%xmm3 656238405Sjkim movdqu 32(%rdi),%xmm4 657238405Sjkim movdqu 48(%rdi),%xmm5 658238405Sjkim movdqu 64(%rdi),%xmm6 659238405Sjkim movdqu 80(%rdi),%xmm7 660238405Sjkim movdqu 96(%rdi),%xmm8 661238405Sjkim movdqu 112(%rdi),%xmm9 662238405Sjkim leaq 128(%rdi),%rdi 663296279Sjkim subq $0x80,%rdx 664238405Sjkim jmp .Lecb_dec_loop8_enter 665238405Sjkim.align 16 666238405Sjkim.Lecb_dec_loop8: 667238405Sjkim movups %xmm2,(%rsi) 668238405Sjkim movq %r11,%rcx 669238405Sjkim movdqu (%rdi),%xmm2 670238405Sjkim movl %r10d,%eax 671238405Sjkim movups %xmm3,16(%rsi) 672238405Sjkim movdqu 16(%rdi),%xmm3 673238405Sjkim movups %xmm4,32(%rsi) 674238405Sjkim movdqu 32(%rdi),%xmm4 675238405Sjkim movups %xmm5,48(%rsi) 676238405Sjkim movdqu 48(%rdi),%xmm5 677238405Sjkim movups %xmm6,64(%rsi) 678238405Sjkim movdqu 64(%rdi),%xmm6 679238405Sjkim movups %xmm7,80(%rsi) 680238405Sjkim movdqu 80(%rdi),%xmm7 681238405Sjkim movups %xmm8,96(%rsi) 682238405Sjkim movdqu 96(%rdi),%xmm8 683238405Sjkim movups %xmm9,112(%rsi) 684238405Sjkim leaq 128(%rsi),%rsi 685238405Sjkim movdqu 112(%rdi),%xmm9 686238405Sjkim leaq 128(%rdi),%rdi 687238405Sjkim.Lecb_dec_loop8_enter: 688238405Sjkim 689238405Sjkim call _aesni_decrypt8 690238405Sjkim 691238405Sjkim movups (%r11),%xmm0 692296279Sjkim subq $0x80,%rdx 693238405Sjkim jnc .Lecb_dec_loop8 694238405Sjkim 695238405Sjkim movups %xmm2,(%rsi) 696290207Sjkim pxor %xmm2,%xmm2 697238405Sjkim movq %r11,%rcx 698238405Sjkim movups %xmm3,16(%rsi) 699290207Sjkim pxor %xmm3,%xmm3 700238405Sjkim movl %r10d,%eax 701238405Sjkim movups %xmm4,32(%rsi) 702290207Sjkim pxor %xmm4,%xmm4 703238405Sjkim movups %xmm5,48(%rsi) 704290207Sjkim pxor %xmm5,%xmm5 705238405Sjkim movups %xmm6,64(%rsi) 706290207Sjkim pxor %xmm6,%xmm6 707238405Sjkim movups %xmm7,80(%rsi) 708290207Sjkim pxor %xmm7,%xmm7 709238405Sjkim movups %xmm8,96(%rsi) 710290207Sjkim pxor %xmm8,%xmm8 711238405Sjkim movups %xmm9,112(%rsi) 712290207Sjkim pxor %xmm9,%xmm9 713238405Sjkim leaq 128(%rsi),%rsi 714296279Sjkim addq $0x80,%rdx 715238405Sjkim jz .Lecb_ret 716238405Sjkim 717238405Sjkim.Lecb_dec_tail: 718238405Sjkim movups (%rdi),%xmm2 719296279Sjkim cmpq $0x20,%rdx 720238405Sjkim jb .Lecb_dec_one 721238405Sjkim movups 16(%rdi),%xmm3 722238405Sjkim je .Lecb_dec_two 723238405Sjkim movups 32(%rdi),%xmm4 724296279Sjkim cmpq $0x40,%rdx 725238405Sjkim jb .Lecb_dec_three 726238405Sjkim movups 48(%rdi),%xmm5 727238405Sjkim je .Lecb_dec_four 728238405Sjkim movups 64(%rdi),%xmm6 729296279Sjkim cmpq $0x60,%rdx 730238405Sjkim jb .Lecb_dec_five 731238405Sjkim movups 80(%rdi),%xmm7 732238405Sjkim je .Lecb_dec_six 733238405Sjkim movups 96(%rdi),%xmm8 734238405Sjkim movups (%rcx),%xmm0 735290207Sjkim xorps %xmm9,%xmm9 736238405Sjkim call _aesni_decrypt8 737238405Sjkim movups %xmm2,(%rsi) 738290207Sjkim pxor %xmm2,%xmm2 739238405Sjkim movups %xmm3,16(%rsi) 740290207Sjkim pxor %xmm3,%xmm3 741238405Sjkim movups %xmm4,32(%rsi) 742290207Sjkim pxor %xmm4,%xmm4 743238405Sjkim movups %xmm5,48(%rsi) 744290207Sjkim pxor %xmm5,%xmm5 745238405Sjkim movups %xmm6,64(%rsi) 746290207Sjkim pxor %xmm6,%xmm6 747238405Sjkim movups %xmm7,80(%rsi) 748290207Sjkim pxor %xmm7,%xmm7 749238405Sjkim movups %xmm8,96(%rsi) 750290207Sjkim pxor %xmm8,%xmm8 751290207Sjkim pxor %xmm9,%xmm9 752238405Sjkim jmp .Lecb_ret 753238405Sjkim.align 16 754238405Sjkim.Lecb_dec_one: 755238405Sjkim movups (%rcx),%xmm0 756238405Sjkim movups 16(%rcx),%xmm1 757238405Sjkim leaq 32(%rcx),%rcx 758238405Sjkim xorps %xmm0,%xmm2 759238405Sjkim.Loop_dec1_4: 760238405Sjkim.byte 102,15,56,222,209 761238405Sjkim decl %eax 762238405Sjkim movups (%rcx),%xmm1 763238405Sjkim leaq 16(%rcx),%rcx 764290207Sjkim jnz .Loop_dec1_4 765238405Sjkim.byte 102,15,56,223,209 766238405Sjkim movups %xmm2,(%rsi) 767290207Sjkim pxor %xmm2,%xmm2 768238405Sjkim jmp .Lecb_ret 769238405Sjkim.align 16 770238405Sjkim.Lecb_dec_two: 771290207Sjkim call _aesni_decrypt2 772238405Sjkim movups %xmm2,(%rsi) 773290207Sjkim pxor %xmm2,%xmm2 774238405Sjkim movups %xmm3,16(%rsi) 775290207Sjkim pxor %xmm3,%xmm3 776238405Sjkim jmp .Lecb_ret 777238405Sjkim.align 16 778238405Sjkim.Lecb_dec_three: 779238405Sjkim call _aesni_decrypt3 780238405Sjkim movups %xmm2,(%rsi) 781290207Sjkim pxor %xmm2,%xmm2 782238405Sjkim movups %xmm3,16(%rsi) 783290207Sjkim pxor %xmm3,%xmm3 784238405Sjkim movups %xmm4,32(%rsi) 785290207Sjkim pxor %xmm4,%xmm4 786238405Sjkim jmp .Lecb_ret 787238405Sjkim.align 16 788238405Sjkim.Lecb_dec_four: 789238405Sjkim call _aesni_decrypt4 790238405Sjkim movups %xmm2,(%rsi) 791290207Sjkim pxor %xmm2,%xmm2 792238405Sjkim movups %xmm3,16(%rsi) 793290207Sjkim pxor %xmm3,%xmm3 794238405Sjkim movups %xmm4,32(%rsi) 795290207Sjkim pxor %xmm4,%xmm4 796238405Sjkim movups %xmm5,48(%rsi) 797290207Sjkim pxor %xmm5,%xmm5 798238405Sjkim jmp .Lecb_ret 799238405Sjkim.align 16 800238405Sjkim.Lecb_dec_five: 801238405Sjkim xorps %xmm7,%xmm7 802238405Sjkim call _aesni_decrypt6 803238405Sjkim movups %xmm2,(%rsi) 804290207Sjkim pxor %xmm2,%xmm2 805238405Sjkim movups %xmm3,16(%rsi) 806290207Sjkim pxor %xmm3,%xmm3 807238405Sjkim movups %xmm4,32(%rsi) 808290207Sjkim pxor %xmm4,%xmm4 809238405Sjkim movups %xmm5,48(%rsi) 810290207Sjkim pxor %xmm5,%xmm5 811238405Sjkim movups %xmm6,64(%rsi) 812290207Sjkim pxor %xmm6,%xmm6 813290207Sjkim pxor %xmm7,%xmm7 814238405Sjkim jmp .Lecb_ret 815238405Sjkim.align 16 816238405Sjkim.Lecb_dec_six: 817238405Sjkim call _aesni_decrypt6 818238405Sjkim movups %xmm2,(%rsi) 819290207Sjkim pxor %xmm2,%xmm2 820238405Sjkim movups %xmm3,16(%rsi) 821290207Sjkim pxor %xmm3,%xmm3 822238405Sjkim movups %xmm4,32(%rsi) 823290207Sjkim pxor %xmm4,%xmm4 824238405Sjkim movups %xmm5,48(%rsi) 825290207Sjkim pxor %xmm5,%xmm5 826238405Sjkim movups %xmm6,64(%rsi) 827290207Sjkim pxor %xmm6,%xmm6 828238405Sjkim movups %xmm7,80(%rsi) 829290207Sjkim pxor %xmm7,%xmm7 830238405Sjkim 831238405Sjkim.Lecb_ret: 832290207Sjkim xorps %xmm0,%xmm0 833290207Sjkim pxor %xmm1,%xmm1 834238405Sjkim .byte 0xf3,0xc3 835238405Sjkim.size aesni_ecb_encrypt,.-aesni_ecb_encrypt 836238405Sjkim.globl aesni_ccm64_encrypt_blocks 837238405Sjkim.type aesni_ccm64_encrypt_blocks,@function 838238405Sjkim.align 16 839238405Sjkimaesni_ccm64_encrypt_blocks: 840238405Sjkim movl 240(%rcx),%eax 841290207Sjkim movdqu (%r8),%xmm6 842290207Sjkim movdqa .Lincrement64(%rip),%xmm9 843238405Sjkim movdqa .Lbswap_mask(%rip),%xmm7 844238405Sjkim 845290207Sjkim shll $4,%eax 846290207Sjkim movl $16,%r10d 847238405Sjkim leaq 0(%rcx),%r11 848238405Sjkim movdqu (%r9),%xmm3 849290207Sjkim movdqa %xmm6,%xmm2 850290207Sjkim leaq 32(%rcx,%rax,1),%rcx 851290207Sjkim.byte 102,15,56,0,247 852290207Sjkim subq %rax,%r10 853238405Sjkim jmp .Lccm64_enc_outer 854238405Sjkim.align 16 855238405Sjkim.Lccm64_enc_outer: 856238405Sjkim movups (%r11),%xmm0 857290207Sjkim movq %r10,%rax 858238405Sjkim movups (%rdi),%xmm8 859238405Sjkim 860238405Sjkim xorps %xmm0,%xmm2 861238405Sjkim movups 16(%r11),%xmm1 862238405Sjkim xorps %xmm8,%xmm0 863238405Sjkim xorps %xmm0,%xmm3 864290207Sjkim movups 32(%r11),%xmm0 865238405Sjkim 866238405Sjkim.Lccm64_enc2_loop: 867238405Sjkim.byte 102,15,56,220,209 868238405Sjkim.byte 102,15,56,220,217 869290207Sjkim movups (%rcx,%rax,1),%xmm1 870290207Sjkim addq $32,%rax 871238405Sjkim.byte 102,15,56,220,208 872238405Sjkim.byte 102,15,56,220,216 873290207Sjkim movups -16(%rcx,%rax,1),%xmm0 874238405Sjkim jnz .Lccm64_enc2_loop 875238405Sjkim.byte 102,15,56,220,209 876238405Sjkim.byte 102,15,56,220,217 877290207Sjkim paddq %xmm9,%xmm6 878290207Sjkim decq %rdx 879238405Sjkim.byte 102,15,56,221,208 880238405Sjkim.byte 102,15,56,221,216 881238405Sjkim 882238405Sjkim leaq 16(%rdi),%rdi 883238405Sjkim xorps %xmm2,%xmm8 884290207Sjkim movdqa %xmm6,%xmm2 885238405Sjkim movups %xmm8,(%rsi) 886290207Sjkim.byte 102,15,56,0,215 887238405Sjkim leaq 16(%rsi),%rsi 888238405Sjkim jnz .Lccm64_enc_outer 889238405Sjkim 890290207Sjkim pxor %xmm0,%xmm0 891290207Sjkim pxor %xmm1,%xmm1 892290207Sjkim pxor %xmm2,%xmm2 893238405Sjkim movups %xmm3,(%r9) 894290207Sjkim pxor %xmm3,%xmm3 895290207Sjkim pxor %xmm8,%xmm8 896290207Sjkim pxor %xmm6,%xmm6 897238405Sjkim .byte 0xf3,0xc3 898238405Sjkim.size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks 899238405Sjkim.globl aesni_ccm64_decrypt_blocks 900238405Sjkim.type aesni_ccm64_decrypt_blocks,@function 901238405Sjkim.align 16 902238405Sjkimaesni_ccm64_decrypt_blocks: 903238405Sjkim movl 240(%rcx),%eax 904290207Sjkim movups (%r8),%xmm6 905238405Sjkim movdqu (%r9),%xmm3 906290207Sjkim movdqa .Lincrement64(%rip),%xmm9 907238405Sjkim movdqa .Lbswap_mask(%rip),%xmm7 908238405Sjkim 909290207Sjkim movaps %xmm6,%xmm2 910238405Sjkim movl %eax,%r10d 911238405Sjkim movq %rcx,%r11 912290207Sjkim.byte 102,15,56,0,247 913238405Sjkim movups (%rcx),%xmm0 914238405Sjkim movups 16(%rcx),%xmm1 915238405Sjkim leaq 32(%rcx),%rcx 916238405Sjkim xorps %xmm0,%xmm2 917238405Sjkim.Loop_enc1_5: 918238405Sjkim.byte 102,15,56,220,209 919238405Sjkim decl %eax 920238405Sjkim movups (%rcx),%xmm1 921238405Sjkim leaq 16(%rcx),%rcx 922290207Sjkim jnz .Loop_enc1_5 923238405Sjkim.byte 102,15,56,221,209 924290207Sjkim shll $4,%r10d 925290207Sjkim movl $16,%eax 926238405Sjkim movups (%rdi),%xmm8 927290207Sjkim paddq %xmm9,%xmm6 928238405Sjkim leaq 16(%rdi),%rdi 929290207Sjkim subq %r10,%rax 930290207Sjkim leaq 32(%r11,%r10,1),%rcx 931290207Sjkim movq %rax,%r10 932238405Sjkim jmp .Lccm64_dec_outer 933238405Sjkim.align 16 934238405Sjkim.Lccm64_dec_outer: 935238405Sjkim xorps %xmm2,%xmm8 936290207Sjkim movdqa %xmm6,%xmm2 937238405Sjkim movups %xmm8,(%rsi) 938238405Sjkim leaq 16(%rsi),%rsi 939238405Sjkim.byte 102,15,56,0,215 940238405Sjkim 941238405Sjkim subq $1,%rdx 942238405Sjkim jz .Lccm64_dec_break 943238405Sjkim 944238405Sjkim movups (%r11),%xmm0 945290207Sjkim movq %r10,%rax 946238405Sjkim movups 16(%r11),%xmm1 947238405Sjkim xorps %xmm0,%xmm8 948238405Sjkim xorps %xmm0,%xmm2 949238405Sjkim xorps %xmm8,%xmm3 950290207Sjkim movups 32(%r11),%xmm0 951290207Sjkim jmp .Lccm64_dec2_loop 952290207Sjkim.align 16 953238405Sjkim.Lccm64_dec2_loop: 954238405Sjkim.byte 102,15,56,220,209 955238405Sjkim.byte 102,15,56,220,217 956290207Sjkim movups (%rcx,%rax,1),%xmm1 957290207Sjkim addq $32,%rax 958238405Sjkim.byte 102,15,56,220,208 959238405Sjkim.byte 102,15,56,220,216 960290207Sjkim movups -16(%rcx,%rax,1),%xmm0 961238405Sjkim jnz .Lccm64_dec2_loop 962238405Sjkim movups (%rdi),%xmm8 963290207Sjkim paddq %xmm9,%xmm6 964238405Sjkim.byte 102,15,56,220,209 965238405Sjkim.byte 102,15,56,220,217 966238405Sjkim.byte 102,15,56,221,208 967238405Sjkim.byte 102,15,56,221,216 968290207Sjkim leaq 16(%rdi),%rdi 969238405Sjkim jmp .Lccm64_dec_outer 970238405Sjkim 971238405Sjkim.align 16 972238405Sjkim.Lccm64_dec_break: 973238405Sjkim 974290207Sjkim movl 240(%r11),%eax 975238405Sjkim movups (%r11),%xmm0 976238405Sjkim movups 16(%r11),%xmm1 977238405Sjkim xorps %xmm0,%xmm8 978238405Sjkim leaq 32(%r11),%r11 979238405Sjkim xorps %xmm8,%xmm3 980238405Sjkim.Loop_enc1_6: 981238405Sjkim.byte 102,15,56,220,217 982238405Sjkim decl %eax 983238405Sjkim movups (%r11),%xmm1 984238405Sjkim leaq 16(%r11),%r11 985290207Sjkim jnz .Loop_enc1_6 986238405Sjkim.byte 102,15,56,221,217 987290207Sjkim pxor %xmm0,%xmm0 988290207Sjkim pxor %xmm1,%xmm1 989290207Sjkim pxor %xmm2,%xmm2 990238405Sjkim movups %xmm3,(%r9) 991290207Sjkim pxor %xmm3,%xmm3 992290207Sjkim pxor %xmm8,%xmm8 993290207Sjkim pxor %xmm6,%xmm6 994238405Sjkim .byte 0xf3,0xc3 995238405Sjkim.size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks 996238405Sjkim.globl aesni_ctr32_encrypt_blocks 997238405Sjkim.type aesni_ctr32_encrypt_blocks,@function 998238405Sjkim.align 16 999238405Sjkimaesni_ctr32_encrypt_blocks: 1000238405Sjkim cmpq $1,%rdx 1001290207Sjkim jne .Lctr32_bulk 1002238405Sjkim 1003238405Sjkim 1004290207Sjkim 1005290207Sjkim movups (%r8),%xmm2 1006290207Sjkim movups (%rdi),%xmm3 1007290207Sjkim movl 240(%rcx),%edx 1008290207Sjkim movups (%rcx),%xmm0 1009290207Sjkim movups 16(%rcx),%xmm1 1010290207Sjkim leaq 32(%rcx),%rcx 1011290207Sjkim xorps %xmm0,%xmm2 1012290207Sjkim.Loop_enc1_7: 1013290207Sjkim.byte 102,15,56,220,209 1014290207Sjkim decl %edx 1015290207Sjkim movups (%rcx),%xmm1 1016290207Sjkim leaq 16(%rcx),%rcx 1017290207Sjkim jnz .Loop_enc1_7 1018290207Sjkim.byte 102,15,56,221,209 1019290207Sjkim pxor %xmm0,%xmm0 1020290207Sjkim pxor %xmm1,%xmm1 1021290207Sjkim xorps %xmm3,%xmm2 1022290207Sjkim pxor %xmm3,%xmm3 1023290207Sjkim movups %xmm2,(%rsi) 1024290207Sjkim xorps %xmm2,%xmm2 1025290207Sjkim jmp .Lctr32_epilogue 1026290207Sjkim 1027290207Sjkim.align 16 1028290207Sjkim.Lctr32_bulk: 1029290207Sjkim leaq (%rsp),%rax 1030290207Sjkim pushq %rbp 1031290207Sjkim subq $128,%rsp 1032290207Sjkim andq $-16,%rsp 1033290207Sjkim leaq -8(%rax),%rbp 1034290207Sjkim 1035290207Sjkim 1036290207Sjkim 1037290207Sjkim 1038290207Sjkim movdqu (%r8),%xmm2 1039290207Sjkim movdqu (%rcx),%xmm0 1040290207Sjkim movl 12(%r8),%r8d 1041290207Sjkim pxor %xmm0,%xmm2 1042290207Sjkim movl 12(%rcx),%r11d 1043290207Sjkim movdqa %xmm2,0(%rsp) 1044290207Sjkim bswapl %r8d 1045290207Sjkim movdqa %xmm2,%xmm3 1046290207Sjkim movdqa %xmm2,%xmm4 1047290207Sjkim movdqa %xmm2,%xmm5 1048290207Sjkim movdqa %xmm2,64(%rsp) 1049290207Sjkim movdqa %xmm2,80(%rsp) 1050290207Sjkim movdqa %xmm2,96(%rsp) 1051290207Sjkim movq %rdx,%r10 1052290207Sjkim movdqa %xmm2,112(%rsp) 1053290207Sjkim 1054290207Sjkim leaq 1(%r8),%rax 1055290207Sjkim leaq 2(%r8),%rdx 1056290207Sjkim bswapl %eax 1057290207Sjkim bswapl %edx 1058290207Sjkim xorl %r11d,%eax 1059290207Sjkim xorl %r11d,%edx 1060290207Sjkim.byte 102,15,58,34,216,3 1061290207Sjkim leaq 3(%r8),%rax 1062290207Sjkim movdqa %xmm3,16(%rsp) 1063290207Sjkim.byte 102,15,58,34,226,3 1064290207Sjkim bswapl %eax 1065290207Sjkim movq %r10,%rdx 1066290207Sjkim leaq 4(%r8),%r10 1067290207Sjkim movdqa %xmm4,32(%rsp) 1068290207Sjkim xorl %r11d,%eax 1069290207Sjkim bswapl %r10d 1070290207Sjkim.byte 102,15,58,34,232,3 1071290207Sjkim xorl %r11d,%r10d 1072290207Sjkim movdqa %xmm5,48(%rsp) 1073290207Sjkim leaq 5(%r8),%r9 1074290207Sjkim movl %r10d,64+12(%rsp) 1075290207Sjkim bswapl %r9d 1076290207Sjkim leaq 6(%r8),%r10 1077238405Sjkim movl 240(%rcx),%eax 1078290207Sjkim xorl %r11d,%r9d 1079238405Sjkim bswapl %r10d 1080290207Sjkim movl %r9d,80+12(%rsp) 1081290207Sjkim xorl %r11d,%r10d 1082290207Sjkim leaq 7(%r8),%r9 1083290207Sjkim movl %r10d,96+12(%rsp) 1084290207Sjkim bswapl %r9d 1085290207Sjkim movl OPENSSL_ia32cap_P+4(%rip),%r10d 1086290207Sjkim xorl %r11d,%r9d 1087290207Sjkim andl $71303168,%r10d 1088290207Sjkim movl %r9d,112+12(%rsp) 1089238405Sjkim 1090290207Sjkim movups 16(%rcx),%xmm1 1091290207Sjkim 1092290207Sjkim movdqa 64(%rsp),%xmm6 1093290207Sjkim movdqa 80(%rsp),%xmm7 1094290207Sjkim 1095290207Sjkim cmpq $8,%rdx 1096238405Sjkim jb .Lctr32_tail 1097290207Sjkim 1098238405Sjkim subq $6,%rdx 1099290207Sjkim cmpl $4194304,%r10d 1100290207Sjkim je .Lctr32_6x 1101290207Sjkim 1102290207Sjkim leaq 128(%rcx),%rcx 1103290207Sjkim subq $2,%rdx 1104290207Sjkim jmp .Lctr32_loop8 1105290207Sjkim 1106290207Sjkim.align 16 1107290207Sjkim.Lctr32_6x: 1108290207Sjkim shll $4,%eax 1109290207Sjkim movl $48,%r10d 1110290207Sjkim bswapl %r11d 1111290207Sjkim leaq 32(%rcx,%rax,1),%rcx 1112290207Sjkim subq %rax,%r10 1113238405Sjkim jmp .Lctr32_loop6 1114238405Sjkim 1115238405Sjkim.align 16 1116238405Sjkim.Lctr32_loop6: 1117290207Sjkim addl $6,%r8d 1118290207Sjkim movups -48(%rcx,%r10,1),%xmm0 1119290207Sjkim.byte 102,15,56,220,209 1120290207Sjkim movl %r8d,%eax 1121290207Sjkim xorl %r11d,%eax 1122290207Sjkim.byte 102,15,56,220,217 1123290207Sjkim.byte 0x0f,0x38,0xf1,0x44,0x24,12 1124290207Sjkim leal 1(%r8),%eax 1125290207Sjkim.byte 102,15,56,220,225 1126290207Sjkim xorl %r11d,%eax 1127290207Sjkim.byte 0x0f,0x38,0xf1,0x44,0x24,28 1128290207Sjkim.byte 102,15,56,220,233 1129290207Sjkim leal 2(%r8),%eax 1130290207Sjkim xorl %r11d,%eax 1131290207Sjkim.byte 102,15,56,220,241 1132290207Sjkim.byte 0x0f,0x38,0xf1,0x44,0x24,44 1133290207Sjkim leal 3(%r8),%eax 1134290207Sjkim.byte 102,15,56,220,249 1135290207Sjkim movups -32(%rcx,%r10,1),%xmm1 1136290207Sjkim xorl %r11d,%eax 1137238405Sjkim 1138290207Sjkim.byte 102,15,56,220,208 1139290207Sjkim.byte 0x0f,0x38,0xf1,0x44,0x24,60 1140290207Sjkim leal 4(%r8),%eax 1141290207Sjkim.byte 102,15,56,220,216 1142290207Sjkim xorl %r11d,%eax 1143290207Sjkim.byte 0x0f,0x38,0xf1,0x44,0x24,76 1144290207Sjkim.byte 102,15,56,220,224 1145290207Sjkim leal 5(%r8),%eax 1146290207Sjkim xorl %r11d,%eax 1147290207Sjkim.byte 102,15,56,220,232 1148290207Sjkim.byte 0x0f,0x38,0xf1,0x44,0x24,92 1149290207Sjkim movq %r10,%rax 1150290207Sjkim.byte 102,15,56,220,240 1151290207Sjkim.byte 102,15,56,220,248 1152290207Sjkim movups -16(%rcx,%r10,1),%xmm0 1153238405Sjkim 1154290207Sjkim call .Lenc_loop6 1155238405Sjkim 1156290207Sjkim movdqu (%rdi),%xmm8 1157290207Sjkim movdqu 16(%rdi),%xmm9 1158290207Sjkim movdqu 32(%rdi),%xmm10 1159290207Sjkim movdqu 48(%rdi),%xmm11 1160290207Sjkim movdqu 64(%rdi),%xmm12 1161290207Sjkim movdqu 80(%rdi),%xmm13 1162290207Sjkim leaq 96(%rdi),%rdi 1163290207Sjkim movups -64(%rcx,%r10,1),%xmm1 1164290207Sjkim pxor %xmm2,%xmm8 1165290207Sjkim movaps 0(%rsp),%xmm2 1166290207Sjkim pxor %xmm3,%xmm9 1167290207Sjkim movaps 16(%rsp),%xmm3 1168290207Sjkim pxor %xmm4,%xmm10 1169290207Sjkim movaps 32(%rsp),%xmm4 1170290207Sjkim pxor %xmm5,%xmm11 1171290207Sjkim movaps 48(%rsp),%xmm5 1172290207Sjkim pxor %xmm6,%xmm12 1173290207Sjkim movaps 64(%rsp),%xmm6 1174290207Sjkim pxor %xmm7,%xmm13 1175290207Sjkim movaps 80(%rsp),%xmm7 1176290207Sjkim movdqu %xmm8,(%rsi) 1177290207Sjkim movdqu %xmm9,16(%rsi) 1178290207Sjkim movdqu %xmm10,32(%rsi) 1179290207Sjkim movdqu %xmm11,48(%rsi) 1180290207Sjkim movdqu %xmm12,64(%rsi) 1181290207Sjkim movdqu %xmm13,80(%rsi) 1182290207Sjkim leaq 96(%rsi),%rsi 1183238405Sjkim 1184290207Sjkim subq $6,%rdx 1185290207Sjkim jnc .Lctr32_loop6 1186290207Sjkim 1187290207Sjkim addq $6,%rdx 1188290207Sjkim jz .Lctr32_done 1189290207Sjkim 1190290207Sjkim leal -48(%r10),%eax 1191290207Sjkim leaq -80(%rcx,%r10,1),%rcx 1192290207Sjkim negl %eax 1193290207Sjkim shrl $4,%eax 1194290207Sjkim jmp .Lctr32_tail 1195290207Sjkim 1196290207Sjkim.align 32 1197290207Sjkim.Lctr32_loop8: 1198290207Sjkim addl $8,%r8d 1199290207Sjkim movdqa 96(%rsp),%xmm8 1200238405Sjkim.byte 102,15,56,220,209 1201290207Sjkim movl %r8d,%r9d 1202290207Sjkim movdqa 112(%rsp),%xmm9 1203238405Sjkim.byte 102,15,56,220,217 1204290207Sjkim bswapl %r9d 1205290207Sjkim movups 32-128(%rcx),%xmm0 1206238405Sjkim.byte 102,15,56,220,225 1207290207Sjkim xorl %r11d,%r9d 1208290207Sjkim nop 1209238405Sjkim.byte 102,15,56,220,233 1210290207Sjkim movl %r9d,0+12(%rsp) 1211290207Sjkim leaq 1(%r8),%r9 1212238405Sjkim.byte 102,15,56,220,241 1213238405Sjkim.byte 102,15,56,220,249 1214290207Sjkim.byte 102,68,15,56,220,193 1215290207Sjkim.byte 102,68,15,56,220,201 1216290207Sjkim movups 48-128(%rcx),%xmm1 1217290207Sjkim bswapl %r9d 1218290207Sjkim.byte 102,15,56,220,208 1219290207Sjkim.byte 102,15,56,220,216 1220290207Sjkim xorl %r11d,%r9d 1221290207Sjkim.byte 0x66,0x90 1222290207Sjkim.byte 102,15,56,220,224 1223290207Sjkim.byte 102,15,56,220,232 1224290207Sjkim movl %r9d,16+12(%rsp) 1225290207Sjkim leaq 2(%r8),%r9 1226290207Sjkim.byte 102,15,56,220,240 1227290207Sjkim.byte 102,15,56,220,248 1228290207Sjkim.byte 102,68,15,56,220,192 1229290207Sjkim.byte 102,68,15,56,220,200 1230290207Sjkim movups 64-128(%rcx),%xmm0 1231290207Sjkim bswapl %r9d 1232238405Sjkim.byte 102,15,56,220,209 1233238405Sjkim.byte 102,15,56,220,217 1234290207Sjkim xorl %r11d,%r9d 1235290207Sjkim.byte 0x66,0x90 1236238405Sjkim.byte 102,15,56,220,225 1237238405Sjkim.byte 102,15,56,220,233 1238290207Sjkim movl %r9d,32+12(%rsp) 1239290207Sjkim leaq 3(%r8),%r9 1240238405Sjkim.byte 102,15,56,220,241 1241238405Sjkim.byte 102,15,56,220,249 1242290207Sjkim.byte 102,68,15,56,220,193 1243290207Sjkim.byte 102,68,15,56,220,201 1244290207Sjkim movups 80-128(%rcx),%xmm1 1245290207Sjkim bswapl %r9d 1246238405Sjkim.byte 102,15,56,220,208 1247238405Sjkim.byte 102,15,56,220,216 1248290207Sjkim xorl %r11d,%r9d 1249290207Sjkim.byte 0x66,0x90 1250238405Sjkim.byte 102,15,56,220,224 1251238405Sjkim.byte 102,15,56,220,232 1252290207Sjkim movl %r9d,48+12(%rsp) 1253290207Sjkim leaq 4(%r8),%r9 1254238405Sjkim.byte 102,15,56,220,240 1255238405Sjkim.byte 102,15,56,220,248 1256290207Sjkim.byte 102,68,15,56,220,192 1257290207Sjkim.byte 102,68,15,56,220,200 1258290207Sjkim movups 96-128(%rcx),%xmm0 1259290207Sjkim bswapl %r9d 1260290207Sjkim.byte 102,15,56,220,209 1261290207Sjkim.byte 102,15,56,220,217 1262290207Sjkim xorl %r11d,%r9d 1263290207Sjkim.byte 0x66,0x90 1264290207Sjkim.byte 102,15,56,220,225 1265290207Sjkim.byte 102,15,56,220,233 1266290207Sjkim movl %r9d,64+12(%rsp) 1267290207Sjkim leaq 5(%r8),%r9 1268290207Sjkim.byte 102,15,56,220,241 1269290207Sjkim.byte 102,15,56,220,249 1270290207Sjkim.byte 102,68,15,56,220,193 1271290207Sjkim.byte 102,68,15,56,220,201 1272290207Sjkim movups 112-128(%rcx),%xmm1 1273290207Sjkim bswapl %r9d 1274290207Sjkim.byte 102,15,56,220,208 1275290207Sjkim.byte 102,15,56,220,216 1276290207Sjkim xorl %r11d,%r9d 1277290207Sjkim.byte 0x66,0x90 1278290207Sjkim.byte 102,15,56,220,224 1279290207Sjkim.byte 102,15,56,220,232 1280290207Sjkim movl %r9d,80+12(%rsp) 1281290207Sjkim leaq 6(%r8),%r9 1282290207Sjkim.byte 102,15,56,220,240 1283290207Sjkim.byte 102,15,56,220,248 1284290207Sjkim.byte 102,68,15,56,220,192 1285290207Sjkim.byte 102,68,15,56,220,200 1286290207Sjkim movups 128-128(%rcx),%xmm0 1287290207Sjkim bswapl %r9d 1288290207Sjkim.byte 102,15,56,220,209 1289290207Sjkim.byte 102,15,56,220,217 1290290207Sjkim xorl %r11d,%r9d 1291290207Sjkim.byte 0x66,0x90 1292290207Sjkim.byte 102,15,56,220,225 1293290207Sjkim.byte 102,15,56,220,233 1294290207Sjkim movl %r9d,96+12(%rsp) 1295290207Sjkim leaq 7(%r8),%r9 1296290207Sjkim.byte 102,15,56,220,241 1297290207Sjkim.byte 102,15,56,220,249 1298290207Sjkim.byte 102,68,15,56,220,193 1299290207Sjkim.byte 102,68,15,56,220,201 1300290207Sjkim movups 144-128(%rcx),%xmm1 1301290207Sjkim bswapl %r9d 1302290207Sjkim.byte 102,15,56,220,208 1303290207Sjkim.byte 102,15,56,220,216 1304290207Sjkim.byte 102,15,56,220,224 1305290207Sjkim xorl %r11d,%r9d 1306290207Sjkim movdqu 0(%rdi),%xmm10 1307290207Sjkim.byte 102,15,56,220,232 1308290207Sjkim movl %r9d,112+12(%rsp) 1309290207Sjkim cmpl $11,%eax 1310290207Sjkim.byte 102,15,56,220,240 1311290207Sjkim.byte 102,15,56,220,248 1312290207Sjkim.byte 102,68,15,56,220,192 1313290207Sjkim.byte 102,68,15,56,220,200 1314290207Sjkim movups 160-128(%rcx),%xmm0 1315238405Sjkim 1316290207Sjkim jb .Lctr32_enc_done 1317290207Sjkim 1318238405Sjkim.byte 102,15,56,220,209 1319238405Sjkim.byte 102,15,56,220,217 1320238405Sjkim.byte 102,15,56,220,225 1321238405Sjkim.byte 102,15,56,220,233 1322238405Sjkim.byte 102,15,56,220,241 1323238405Sjkim.byte 102,15,56,220,249 1324290207Sjkim.byte 102,68,15,56,220,193 1325290207Sjkim.byte 102,68,15,56,220,201 1326290207Sjkim movups 176-128(%rcx),%xmm1 1327238405Sjkim 1328290207Sjkim.byte 102,15,56,220,208 1329290207Sjkim.byte 102,15,56,220,216 1330290207Sjkim.byte 102,15,56,220,224 1331290207Sjkim.byte 102,15,56,220,232 1332290207Sjkim.byte 102,15,56,220,240 1333290207Sjkim.byte 102,15,56,220,248 1334290207Sjkim.byte 102,68,15,56,220,192 1335290207Sjkim.byte 102,68,15,56,220,200 1336290207Sjkim movups 192-128(%rcx),%xmm0 1337290207Sjkim je .Lctr32_enc_done 1338238405Sjkim 1339290207Sjkim.byte 102,15,56,220,209 1340290207Sjkim.byte 102,15,56,220,217 1341290207Sjkim.byte 102,15,56,220,225 1342290207Sjkim.byte 102,15,56,220,233 1343290207Sjkim.byte 102,15,56,220,241 1344290207Sjkim.byte 102,15,56,220,249 1345290207Sjkim.byte 102,68,15,56,220,193 1346290207Sjkim.byte 102,68,15,56,220,201 1347290207Sjkim movups 208-128(%rcx),%xmm1 1348238405Sjkim 1349290207Sjkim.byte 102,15,56,220,208 1350290207Sjkim.byte 102,15,56,220,216 1351290207Sjkim.byte 102,15,56,220,224 1352290207Sjkim.byte 102,15,56,220,232 1353290207Sjkim.byte 102,15,56,220,240 1354290207Sjkim.byte 102,15,56,220,248 1355290207Sjkim.byte 102,68,15,56,220,192 1356290207Sjkim.byte 102,68,15,56,220,200 1357290207Sjkim movups 224-128(%rcx),%xmm0 1358290207Sjkim jmp .Lctr32_enc_done 1359290207Sjkim 1360290207Sjkim.align 16 1361290207Sjkim.Lctr32_enc_done: 1362290207Sjkim movdqu 16(%rdi),%xmm11 1363290207Sjkim pxor %xmm0,%xmm10 1364290207Sjkim movdqu 32(%rdi),%xmm12 1365290207Sjkim pxor %xmm0,%xmm11 1366290207Sjkim movdqu 48(%rdi),%xmm13 1367290207Sjkim pxor %xmm0,%xmm12 1368290207Sjkim movdqu 64(%rdi),%xmm14 1369290207Sjkim pxor %xmm0,%xmm13 1370290207Sjkim movdqu 80(%rdi),%xmm15 1371290207Sjkim pxor %xmm0,%xmm14 1372290207Sjkim pxor %xmm0,%xmm15 1373290207Sjkim.byte 102,15,56,220,209 1374290207Sjkim.byte 102,15,56,220,217 1375290207Sjkim.byte 102,15,56,220,225 1376290207Sjkim.byte 102,15,56,220,233 1377290207Sjkim.byte 102,15,56,220,241 1378290207Sjkim.byte 102,15,56,220,249 1379290207Sjkim.byte 102,68,15,56,220,193 1380290207Sjkim.byte 102,68,15,56,220,201 1381290207Sjkim movdqu 96(%rdi),%xmm1 1382290207Sjkim leaq 128(%rdi),%rdi 1383290207Sjkim 1384290207Sjkim.byte 102,65,15,56,221,210 1385290207Sjkim pxor %xmm0,%xmm1 1386290207Sjkim movdqu 112-128(%rdi),%xmm10 1387290207Sjkim.byte 102,65,15,56,221,219 1388290207Sjkim pxor %xmm0,%xmm10 1389290207Sjkim movdqa 0(%rsp),%xmm11 1390290207Sjkim.byte 102,65,15,56,221,228 1391290207Sjkim.byte 102,65,15,56,221,237 1392290207Sjkim movdqa 16(%rsp),%xmm12 1393290207Sjkim movdqa 32(%rsp),%xmm13 1394290207Sjkim.byte 102,65,15,56,221,246 1395290207Sjkim.byte 102,65,15,56,221,255 1396290207Sjkim movdqa 48(%rsp),%xmm14 1397290207Sjkim movdqa 64(%rsp),%xmm15 1398290207Sjkim.byte 102,68,15,56,221,193 1399290207Sjkim movdqa 80(%rsp),%xmm0 1400290207Sjkim movups 16-128(%rcx),%xmm1 1401290207Sjkim.byte 102,69,15,56,221,202 1402290207Sjkim 1403290207Sjkim movups %xmm2,(%rsi) 1404290207Sjkim movdqa %xmm11,%xmm2 1405290207Sjkim movups %xmm3,16(%rsi) 1406290207Sjkim movdqa %xmm12,%xmm3 1407290207Sjkim movups %xmm4,32(%rsi) 1408290207Sjkim movdqa %xmm13,%xmm4 1409290207Sjkim movups %xmm5,48(%rsi) 1410290207Sjkim movdqa %xmm14,%xmm5 1411290207Sjkim movups %xmm6,64(%rsi) 1412290207Sjkim movdqa %xmm15,%xmm6 1413290207Sjkim movups %xmm7,80(%rsi) 1414290207Sjkim movdqa %xmm0,%xmm7 1415290207Sjkim movups %xmm8,96(%rsi) 1416290207Sjkim movups %xmm9,112(%rsi) 1417290207Sjkim leaq 128(%rsi),%rsi 1418290207Sjkim 1419290207Sjkim subq $8,%rdx 1420290207Sjkim jnc .Lctr32_loop8 1421290207Sjkim 1422290207Sjkim addq $8,%rdx 1423238405Sjkim jz .Lctr32_done 1424290207Sjkim leaq -128(%rcx),%rcx 1425238405Sjkim 1426238405Sjkim.Lctr32_tail: 1427238405Sjkim 1428238405Sjkim 1429290207Sjkim leaq 16(%rcx),%rcx 1430238405Sjkim cmpq $4,%rdx 1431290207Sjkim jb .Lctr32_loop3 1432290207Sjkim je .Lctr32_loop4 1433238405Sjkim 1434238405Sjkim 1435290207Sjkim shll $4,%eax 1436290207Sjkim movdqa 96(%rsp),%xmm8 1437290207Sjkim pxor %xmm9,%xmm9 1438238405Sjkim 1439290207Sjkim movups 16(%rcx),%xmm0 1440290207Sjkim.byte 102,15,56,220,209 1441290207Sjkim.byte 102,15,56,220,217 1442290207Sjkim leaq 32-16(%rcx,%rax,1),%rcx 1443290207Sjkim negq %rax 1444290207Sjkim.byte 102,15,56,220,225 1445290207Sjkim addq $16,%rax 1446290207Sjkim movups (%rdi),%xmm10 1447290207Sjkim.byte 102,15,56,220,233 1448290207Sjkim.byte 102,15,56,220,241 1449290207Sjkim movups 16(%rdi),%xmm11 1450290207Sjkim movups 32(%rdi),%xmm12 1451290207Sjkim.byte 102,15,56,220,249 1452290207Sjkim.byte 102,68,15,56,220,193 1453238405Sjkim 1454290207Sjkim call .Lenc_loop8_enter 1455290207Sjkim 1456290207Sjkim movdqu 48(%rdi),%xmm13 1457290207Sjkim pxor %xmm10,%xmm2 1458290207Sjkim movdqu 64(%rdi),%xmm10 1459290207Sjkim pxor %xmm11,%xmm3 1460290207Sjkim movdqu %xmm2,(%rsi) 1461290207Sjkim pxor %xmm12,%xmm4 1462290207Sjkim movdqu %xmm3,16(%rsi) 1463290207Sjkim pxor %xmm13,%xmm5 1464290207Sjkim movdqu %xmm4,32(%rsi) 1465290207Sjkim pxor %xmm10,%xmm6 1466290207Sjkim movdqu %xmm5,48(%rsi) 1467290207Sjkim movdqu %xmm6,64(%rsi) 1468290207Sjkim cmpq $6,%rdx 1469290207Sjkim jb .Lctr32_done 1470290207Sjkim 1471290207Sjkim movups 80(%rdi),%xmm11 1472290207Sjkim xorps %xmm11,%xmm7 1473290207Sjkim movups %xmm7,80(%rsi) 1474290207Sjkim je .Lctr32_done 1475290207Sjkim 1476290207Sjkim movups 96(%rdi),%xmm12 1477290207Sjkim xorps %xmm12,%xmm8 1478290207Sjkim movups %xmm8,96(%rsi) 1479238405Sjkim jmp .Lctr32_done 1480238405Sjkim 1481290207Sjkim.align 32 1482290207Sjkim.Lctr32_loop4: 1483238405Sjkim.byte 102,15,56,220,209 1484290207Sjkim leaq 16(%rcx),%rcx 1485238405Sjkim decl %eax 1486290207Sjkim.byte 102,15,56,220,217 1487290207Sjkim.byte 102,15,56,220,225 1488290207Sjkim.byte 102,15,56,220,233 1489238405Sjkim movups (%rcx),%xmm1 1490290207Sjkim jnz .Lctr32_loop4 1491238405Sjkim.byte 102,15,56,221,209 1492290207Sjkim.byte 102,15,56,221,217 1493290207Sjkim movups (%rdi),%xmm10 1494290207Sjkim movups 16(%rdi),%xmm11 1495290207Sjkim.byte 102,15,56,221,225 1496290207Sjkim.byte 102,15,56,221,233 1497290207Sjkim movups 32(%rdi),%xmm12 1498290207Sjkim movups 48(%rdi),%xmm13 1499238405Sjkim 1500290207Sjkim xorps %xmm10,%xmm2 1501290207Sjkim movups %xmm2,(%rsi) 1502290207Sjkim xorps %xmm11,%xmm3 1503290207Sjkim movups %xmm3,16(%rsi) 1504290207Sjkim pxor %xmm12,%xmm4 1505290207Sjkim movdqu %xmm4,32(%rsi) 1506290207Sjkim pxor %xmm13,%xmm5 1507290207Sjkim movdqu %xmm5,48(%rsi) 1508238405Sjkim jmp .Lctr32_done 1509238405Sjkim 1510290207Sjkim.align 32 1511290207Sjkim.Lctr32_loop3: 1512290207Sjkim.byte 102,15,56,220,209 1513290207Sjkim leaq 16(%rcx),%rcx 1514290207Sjkim decl %eax 1515290207Sjkim.byte 102,15,56,220,217 1516290207Sjkim.byte 102,15,56,220,225 1517290207Sjkim movups (%rcx),%xmm1 1518290207Sjkim jnz .Lctr32_loop3 1519290207Sjkim.byte 102,15,56,221,209 1520290207Sjkim.byte 102,15,56,221,217 1521290207Sjkim.byte 102,15,56,221,225 1522238405Sjkim 1523290207Sjkim movups (%rdi),%xmm10 1524290207Sjkim xorps %xmm10,%xmm2 1525290207Sjkim movups %xmm2,(%rsi) 1526290207Sjkim cmpq $2,%rdx 1527290207Sjkim jb .Lctr32_done 1528238405Sjkim 1529290207Sjkim movups 16(%rdi),%xmm11 1530290207Sjkim xorps %xmm11,%xmm3 1531290207Sjkim movups %xmm3,16(%rsi) 1532290207Sjkim je .Lctr32_done 1533290207Sjkim 1534290207Sjkim movups 32(%rdi),%xmm12 1535290207Sjkim xorps %xmm12,%xmm4 1536290207Sjkim movups %xmm4,32(%rsi) 1537290207Sjkim 1538238405Sjkim.Lctr32_done: 1539290207Sjkim xorps %xmm0,%xmm0 1540290207Sjkim xorl %r11d,%r11d 1541290207Sjkim pxor %xmm1,%xmm1 1542290207Sjkim pxor %xmm2,%xmm2 1543290207Sjkim pxor %xmm3,%xmm3 1544290207Sjkim pxor %xmm4,%xmm4 1545290207Sjkim pxor %xmm5,%xmm5 1546290207Sjkim pxor %xmm6,%xmm6 1547290207Sjkim pxor %xmm7,%xmm7 1548290207Sjkim movaps %xmm0,0(%rsp) 1549290207Sjkim pxor %xmm8,%xmm8 1550290207Sjkim movaps %xmm0,16(%rsp) 1551290207Sjkim pxor %xmm9,%xmm9 1552290207Sjkim movaps %xmm0,32(%rsp) 1553290207Sjkim pxor %xmm10,%xmm10 1554290207Sjkim movaps %xmm0,48(%rsp) 1555290207Sjkim pxor %xmm11,%xmm11 1556290207Sjkim movaps %xmm0,64(%rsp) 1557290207Sjkim pxor %xmm12,%xmm12 1558290207Sjkim movaps %xmm0,80(%rsp) 1559290207Sjkim pxor %xmm13,%xmm13 1560290207Sjkim movaps %xmm0,96(%rsp) 1561290207Sjkim pxor %xmm14,%xmm14 1562290207Sjkim movaps %xmm0,112(%rsp) 1563290207Sjkim pxor %xmm15,%xmm15 1564290207Sjkim leaq (%rbp),%rsp 1565290207Sjkim popq %rbp 1566290207Sjkim.Lctr32_epilogue: 1567238405Sjkim .byte 0xf3,0xc3 1568238405Sjkim.size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks 1569238405Sjkim.globl aesni_xts_encrypt 1570238405Sjkim.type aesni_xts_encrypt,@function 1571238405Sjkim.align 16 1572238405Sjkimaesni_xts_encrypt: 1573290207Sjkim leaq (%rsp),%rax 1574290207Sjkim pushq %rbp 1575290207Sjkim subq $112,%rsp 1576290207Sjkim andq $-16,%rsp 1577290207Sjkim leaq -8(%rax),%rbp 1578290207Sjkim movups (%r9),%xmm2 1579238405Sjkim movl 240(%r8),%eax 1580238405Sjkim movl 240(%rcx),%r10d 1581238405Sjkim movups (%r8),%xmm0 1582238405Sjkim movups 16(%r8),%xmm1 1583238405Sjkim leaq 32(%r8),%r8 1584290207Sjkim xorps %xmm0,%xmm2 1585238405Sjkim.Loop_enc1_8: 1586290207Sjkim.byte 102,15,56,220,209 1587238405Sjkim decl %eax 1588238405Sjkim movups (%r8),%xmm1 1589238405Sjkim leaq 16(%r8),%r8 1590290207Sjkim jnz .Loop_enc1_8 1591290207Sjkim.byte 102,15,56,221,209 1592290207Sjkim movups (%rcx),%xmm0 1593238405Sjkim movq %rcx,%r11 1594238405Sjkim movl %r10d,%eax 1595290207Sjkim shll $4,%r10d 1596238405Sjkim movq %rdx,%r9 1597238405Sjkim andq $-16,%rdx 1598238405Sjkim 1599290207Sjkim movups 16(%rcx,%r10,1),%xmm1 1600290207Sjkim 1601238405Sjkim movdqa .Lxts_magic(%rip),%xmm8 1602290207Sjkim movdqa %xmm2,%xmm15 1603296279Sjkim pshufd $0x5f,%xmm2,%xmm9 1604290207Sjkim pxor %xmm0,%xmm1 1605290207Sjkim movdqa %xmm9,%xmm14 1606290207Sjkim paddd %xmm9,%xmm9 1607238405Sjkim movdqa %xmm15,%xmm10 1608290207Sjkim psrad $31,%xmm14 1609238405Sjkim paddq %xmm15,%xmm15 1610290207Sjkim pand %xmm8,%xmm14 1611290207Sjkim pxor %xmm0,%xmm10 1612290207Sjkim pxor %xmm14,%xmm15 1613290207Sjkim movdqa %xmm9,%xmm14 1614290207Sjkim paddd %xmm9,%xmm9 1615238405Sjkim movdqa %xmm15,%xmm11 1616290207Sjkim psrad $31,%xmm14 1617238405Sjkim paddq %xmm15,%xmm15 1618290207Sjkim pand %xmm8,%xmm14 1619290207Sjkim pxor %xmm0,%xmm11 1620290207Sjkim pxor %xmm14,%xmm15 1621290207Sjkim movdqa %xmm9,%xmm14 1622290207Sjkim paddd %xmm9,%xmm9 1623238405Sjkim movdqa %xmm15,%xmm12 1624290207Sjkim psrad $31,%xmm14 1625238405Sjkim paddq %xmm15,%xmm15 1626290207Sjkim pand %xmm8,%xmm14 1627290207Sjkim pxor %xmm0,%xmm12 1628290207Sjkim pxor %xmm14,%xmm15 1629290207Sjkim movdqa %xmm9,%xmm14 1630290207Sjkim paddd %xmm9,%xmm9 1631238405Sjkim movdqa %xmm15,%xmm13 1632290207Sjkim psrad $31,%xmm14 1633238405Sjkim paddq %xmm15,%xmm15 1634290207Sjkim pand %xmm8,%xmm14 1635290207Sjkim pxor %xmm0,%xmm13 1636290207Sjkim pxor %xmm14,%xmm15 1637290207Sjkim movdqa %xmm15,%xmm14 1638290207Sjkim psrad $31,%xmm9 1639290207Sjkim paddq %xmm15,%xmm15 1640238405Sjkim pand %xmm8,%xmm9 1641290207Sjkim pxor %xmm0,%xmm14 1642238405Sjkim pxor %xmm9,%xmm15 1643290207Sjkim movaps %xmm1,96(%rsp) 1644290207Sjkim 1645238405Sjkim subq $96,%rdx 1646238405Sjkim jc .Lxts_enc_short 1647238405Sjkim 1648290207Sjkim movl $16+96,%eax 1649290207Sjkim leaq 32(%r11,%r10,1),%rcx 1650290207Sjkim subq %r10,%rax 1651290207Sjkim movups 16(%r11),%xmm1 1652290207Sjkim movq %rax,%r10 1653290207Sjkim leaq .Lxts_magic(%rip),%r8 1654238405Sjkim jmp .Lxts_enc_grandloop 1655238405Sjkim 1656290207Sjkim.align 32 1657238405Sjkim.Lxts_enc_grandloop: 1658238405Sjkim movdqu 0(%rdi),%xmm2 1659290207Sjkim movdqa %xmm0,%xmm8 1660238405Sjkim movdqu 16(%rdi),%xmm3 1661290207Sjkim pxor %xmm10,%xmm2 1662238405Sjkim movdqu 32(%rdi),%xmm4 1663290207Sjkim pxor %xmm11,%xmm3 1664290207Sjkim.byte 102,15,56,220,209 1665238405Sjkim movdqu 48(%rdi),%xmm5 1666290207Sjkim pxor %xmm12,%xmm4 1667290207Sjkim.byte 102,15,56,220,217 1668238405Sjkim movdqu 64(%rdi),%xmm6 1669290207Sjkim pxor %xmm13,%xmm5 1670290207Sjkim.byte 102,15,56,220,225 1671238405Sjkim movdqu 80(%rdi),%xmm7 1672290207Sjkim pxor %xmm15,%xmm8 1673290207Sjkim movdqa 96(%rsp),%xmm9 1674290207Sjkim pxor %xmm14,%xmm6 1675290207Sjkim.byte 102,15,56,220,233 1676290207Sjkim movups 32(%r11),%xmm0 1677238405Sjkim leaq 96(%rdi),%rdi 1678290207Sjkim pxor %xmm8,%xmm7 1679238405Sjkim 1680290207Sjkim pxor %xmm9,%xmm10 1681290207Sjkim.byte 102,15,56,220,241 1682290207Sjkim pxor %xmm9,%xmm11 1683290207Sjkim movdqa %xmm10,0(%rsp) 1684290207Sjkim.byte 102,15,56,220,249 1685290207Sjkim movups 48(%r11),%xmm1 1686290207Sjkim pxor %xmm9,%xmm12 1687238405Sjkim 1688290207Sjkim.byte 102,15,56,220,208 1689290207Sjkim pxor %xmm9,%xmm13 1690290207Sjkim movdqa %xmm11,16(%rsp) 1691290207Sjkim.byte 102,15,56,220,216 1692290207Sjkim pxor %xmm9,%xmm14 1693290207Sjkim movdqa %xmm12,32(%rsp) 1694290207Sjkim.byte 102,15,56,220,224 1695290207Sjkim.byte 102,15,56,220,232 1696290207Sjkim pxor %xmm9,%xmm8 1697290207Sjkim movdqa %xmm14,64(%rsp) 1698290207Sjkim.byte 102,15,56,220,240 1699290207Sjkim.byte 102,15,56,220,248 1700290207Sjkim movups 64(%r11),%xmm0 1701290207Sjkim movdqa %xmm8,80(%rsp) 1702296279Sjkim pshufd $0x5f,%xmm15,%xmm9 1703290207Sjkim jmp .Lxts_enc_loop6 1704290207Sjkim.align 32 1705290207Sjkim.Lxts_enc_loop6: 1706238405Sjkim.byte 102,15,56,220,209 1707238405Sjkim.byte 102,15,56,220,217 1708238405Sjkim.byte 102,15,56,220,225 1709238405Sjkim.byte 102,15,56,220,233 1710238405Sjkim.byte 102,15,56,220,241 1711238405Sjkim.byte 102,15,56,220,249 1712290207Sjkim movups -64(%rcx,%rax,1),%xmm1 1713290207Sjkim addq $32,%rax 1714238405Sjkim 1715290207Sjkim.byte 102,15,56,220,208 1716290207Sjkim.byte 102,15,56,220,216 1717290207Sjkim.byte 102,15,56,220,224 1718290207Sjkim.byte 102,15,56,220,232 1719290207Sjkim.byte 102,15,56,220,240 1720290207Sjkim.byte 102,15,56,220,248 1721290207Sjkim movups -80(%rcx,%rax,1),%xmm0 1722290207Sjkim jnz .Lxts_enc_loop6 1723290207Sjkim 1724290207Sjkim movdqa (%r8),%xmm8 1725290207Sjkim movdqa %xmm9,%xmm14 1726290207Sjkim paddd %xmm9,%xmm9 1727238405Sjkim.byte 102,15,56,220,209 1728290207Sjkim paddq %xmm15,%xmm15 1729290207Sjkim psrad $31,%xmm14 1730238405Sjkim.byte 102,15,56,220,217 1731290207Sjkim pand %xmm8,%xmm14 1732290207Sjkim movups (%r11),%xmm10 1733238405Sjkim.byte 102,15,56,220,225 1734238405Sjkim.byte 102,15,56,220,233 1735238405Sjkim.byte 102,15,56,220,241 1736290207Sjkim pxor %xmm14,%xmm15 1737290207Sjkim movaps %xmm10,%xmm11 1738238405Sjkim.byte 102,15,56,220,249 1739290207Sjkim movups -64(%rcx),%xmm1 1740290207Sjkim 1741290207Sjkim movdqa %xmm9,%xmm14 1742238405Sjkim.byte 102,15,56,220,208 1743290207Sjkim paddd %xmm9,%xmm9 1744290207Sjkim pxor %xmm15,%xmm10 1745238405Sjkim.byte 102,15,56,220,216 1746290207Sjkim psrad $31,%xmm14 1747290207Sjkim paddq %xmm15,%xmm15 1748238405Sjkim.byte 102,15,56,220,224 1749238405Sjkim.byte 102,15,56,220,232 1750290207Sjkim pand %xmm8,%xmm14 1751290207Sjkim movaps %xmm11,%xmm12 1752238405Sjkim.byte 102,15,56,220,240 1753290207Sjkim pxor %xmm14,%xmm15 1754290207Sjkim movdqa %xmm9,%xmm14 1755238405Sjkim.byte 102,15,56,220,248 1756290207Sjkim movups -48(%rcx),%xmm0 1757238405Sjkim 1758290207Sjkim paddd %xmm9,%xmm9 1759238405Sjkim.byte 102,15,56,220,209 1760290207Sjkim pxor %xmm15,%xmm11 1761290207Sjkim psrad $31,%xmm14 1762238405Sjkim.byte 102,15,56,220,217 1763290207Sjkim paddq %xmm15,%xmm15 1764290207Sjkim pand %xmm8,%xmm14 1765238405Sjkim.byte 102,15,56,220,225 1766238405Sjkim.byte 102,15,56,220,233 1767290207Sjkim movdqa %xmm13,48(%rsp) 1768290207Sjkim pxor %xmm14,%xmm15 1769238405Sjkim.byte 102,15,56,220,241 1770290207Sjkim movaps %xmm12,%xmm13 1771290207Sjkim movdqa %xmm9,%xmm14 1772238405Sjkim.byte 102,15,56,220,249 1773290207Sjkim movups -32(%rcx),%xmm1 1774238405Sjkim 1775290207Sjkim paddd %xmm9,%xmm9 1776238405Sjkim.byte 102,15,56,220,208 1777290207Sjkim pxor %xmm15,%xmm12 1778290207Sjkim psrad $31,%xmm14 1779238405Sjkim.byte 102,15,56,220,216 1780290207Sjkim paddq %xmm15,%xmm15 1781290207Sjkim pand %xmm8,%xmm14 1782238405Sjkim.byte 102,15,56,220,224 1783238405Sjkim.byte 102,15,56,220,232 1784238405Sjkim.byte 102,15,56,220,240 1785290207Sjkim pxor %xmm14,%xmm15 1786290207Sjkim movaps %xmm13,%xmm14 1787238405Sjkim.byte 102,15,56,220,248 1788238405Sjkim 1789290207Sjkim movdqa %xmm9,%xmm0 1790290207Sjkim paddd %xmm9,%xmm9 1791238405Sjkim.byte 102,15,56,220,209 1792290207Sjkim pxor %xmm15,%xmm13 1793290207Sjkim psrad $31,%xmm0 1794238405Sjkim.byte 102,15,56,220,217 1795290207Sjkim paddq %xmm15,%xmm15 1796290207Sjkim pand %xmm8,%xmm0 1797238405Sjkim.byte 102,15,56,220,225 1798238405Sjkim.byte 102,15,56,220,233 1799290207Sjkim pxor %xmm0,%xmm15 1800290207Sjkim movups (%r11),%xmm0 1801238405Sjkim.byte 102,15,56,220,241 1802238405Sjkim.byte 102,15,56,220,249 1803290207Sjkim movups 16(%r11),%xmm1 1804238405Sjkim 1805290207Sjkim pxor %xmm15,%xmm14 1806290207Sjkim.byte 102,15,56,221,84,36,0 1807290207Sjkim psrad $31,%xmm9 1808238405Sjkim paddq %xmm15,%xmm15 1809290207Sjkim.byte 102,15,56,221,92,36,16 1810290207Sjkim.byte 102,15,56,221,100,36,32 1811238405Sjkim pand %xmm8,%xmm9 1812290207Sjkim movq %r10,%rax 1813290207Sjkim.byte 102,15,56,221,108,36,48 1814290207Sjkim.byte 102,15,56,221,116,36,64 1815290207Sjkim.byte 102,15,56,221,124,36,80 1816238405Sjkim pxor %xmm9,%xmm15 1817238405Sjkim 1818238405Sjkim leaq 96(%rsi),%rsi 1819290207Sjkim movups %xmm2,-96(%rsi) 1820290207Sjkim movups %xmm3,-80(%rsi) 1821290207Sjkim movups %xmm4,-64(%rsi) 1822290207Sjkim movups %xmm5,-48(%rsi) 1823290207Sjkim movups %xmm6,-32(%rsi) 1824290207Sjkim movups %xmm7,-16(%rsi) 1825238405Sjkim subq $96,%rdx 1826238405Sjkim jnc .Lxts_enc_grandloop 1827238405Sjkim 1828290207Sjkim movl $16+96,%eax 1829290207Sjkim subl %r10d,%eax 1830238405Sjkim movq %r11,%rcx 1831290207Sjkim shrl $4,%eax 1832238405Sjkim 1833238405Sjkim.Lxts_enc_short: 1834290207Sjkim 1835290207Sjkim movl %eax,%r10d 1836290207Sjkim pxor %xmm0,%xmm10 1837238405Sjkim addq $96,%rdx 1838238405Sjkim jz .Lxts_enc_done 1839238405Sjkim 1840290207Sjkim pxor %xmm0,%xmm11 1841296279Sjkim cmpq $0x20,%rdx 1842238405Sjkim jb .Lxts_enc_one 1843290207Sjkim pxor %xmm0,%xmm12 1844238405Sjkim je .Lxts_enc_two 1845238405Sjkim 1846290207Sjkim pxor %xmm0,%xmm13 1847296279Sjkim cmpq $0x40,%rdx 1848238405Sjkim jb .Lxts_enc_three 1849290207Sjkim pxor %xmm0,%xmm14 1850238405Sjkim je .Lxts_enc_four 1851238405Sjkim 1852238405Sjkim movdqu (%rdi),%xmm2 1853238405Sjkim movdqu 16(%rdi),%xmm3 1854238405Sjkim movdqu 32(%rdi),%xmm4 1855238405Sjkim pxor %xmm10,%xmm2 1856238405Sjkim movdqu 48(%rdi),%xmm5 1857238405Sjkim pxor %xmm11,%xmm3 1858238405Sjkim movdqu 64(%rdi),%xmm6 1859238405Sjkim leaq 80(%rdi),%rdi 1860238405Sjkim pxor %xmm12,%xmm4 1861238405Sjkim pxor %xmm13,%xmm5 1862238405Sjkim pxor %xmm14,%xmm6 1863290207Sjkim pxor %xmm7,%xmm7 1864238405Sjkim 1865238405Sjkim call _aesni_encrypt6 1866238405Sjkim 1867238405Sjkim xorps %xmm10,%xmm2 1868238405Sjkim movdqa %xmm15,%xmm10 1869238405Sjkim xorps %xmm11,%xmm3 1870238405Sjkim xorps %xmm12,%xmm4 1871238405Sjkim movdqu %xmm2,(%rsi) 1872238405Sjkim xorps %xmm13,%xmm5 1873238405Sjkim movdqu %xmm3,16(%rsi) 1874238405Sjkim xorps %xmm14,%xmm6 1875238405Sjkim movdqu %xmm4,32(%rsi) 1876238405Sjkim movdqu %xmm5,48(%rsi) 1877238405Sjkim movdqu %xmm6,64(%rsi) 1878238405Sjkim leaq 80(%rsi),%rsi 1879238405Sjkim jmp .Lxts_enc_done 1880238405Sjkim 1881238405Sjkim.align 16 1882238405Sjkim.Lxts_enc_one: 1883238405Sjkim movups (%rdi),%xmm2 1884238405Sjkim leaq 16(%rdi),%rdi 1885238405Sjkim xorps %xmm10,%xmm2 1886238405Sjkim movups (%rcx),%xmm0 1887238405Sjkim movups 16(%rcx),%xmm1 1888238405Sjkim leaq 32(%rcx),%rcx 1889238405Sjkim xorps %xmm0,%xmm2 1890238405Sjkim.Loop_enc1_9: 1891238405Sjkim.byte 102,15,56,220,209 1892238405Sjkim decl %eax 1893238405Sjkim movups (%rcx),%xmm1 1894238405Sjkim leaq 16(%rcx),%rcx 1895290207Sjkim jnz .Loop_enc1_9 1896238405Sjkim.byte 102,15,56,221,209 1897238405Sjkim xorps %xmm10,%xmm2 1898238405Sjkim movdqa %xmm11,%xmm10 1899238405Sjkim movups %xmm2,(%rsi) 1900238405Sjkim leaq 16(%rsi),%rsi 1901238405Sjkim jmp .Lxts_enc_done 1902238405Sjkim 1903238405Sjkim.align 16 1904238405Sjkim.Lxts_enc_two: 1905238405Sjkim movups (%rdi),%xmm2 1906238405Sjkim movups 16(%rdi),%xmm3 1907238405Sjkim leaq 32(%rdi),%rdi 1908238405Sjkim xorps %xmm10,%xmm2 1909238405Sjkim xorps %xmm11,%xmm3 1910238405Sjkim 1911290207Sjkim call _aesni_encrypt2 1912238405Sjkim 1913238405Sjkim xorps %xmm10,%xmm2 1914238405Sjkim movdqa %xmm12,%xmm10 1915238405Sjkim xorps %xmm11,%xmm3 1916238405Sjkim movups %xmm2,(%rsi) 1917238405Sjkim movups %xmm3,16(%rsi) 1918238405Sjkim leaq 32(%rsi),%rsi 1919238405Sjkim jmp .Lxts_enc_done 1920238405Sjkim 1921238405Sjkim.align 16 1922238405Sjkim.Lxts_enc_three: 1923238405Sjkim movups (%rdi),%xmm2 1924238405Sjkim movups 16(%rdi),%xmm3 1925238405Sjkim movups 32(%rdi),%xmm4 1926238405Sjkim leaq 48(%rdi),%rdi 1927238405Sjkim xorps %xmm10,%xmm2 1928238405Sjkim xorps %xmm11,%xmm3 1929238405Sjkim xorps %xmm12,%xmm4 1930238405Sjkim 1931238405Sjkim call _aesni_encrypt3 1932238405Sjkim 1933238405Sjkim xorps %xmm10,%xmm2 1934238405Sjkim movdqa %xmm13,%xmm10 1935238405Sjkim xorps %xmm11,%xmm3 1936238405Sjkim xorps %xmm12,%xmm4 1937238405Sjkim movups %xmm2,(%rsi) 1938238405Sjkim movups %xmm3,16(%rsi) 1939238405Sjkim movups %xmm4,32(%rsi) 1940238405Sjkim leaq 48(%rsi),%rsi 1941238405Sjkim jmp .Lxts_enc_done 1942238405Sjkim 1943238405Sjkim.align 16 1944238405Sjkim.Lxts_enc_four: 1945238405Sjkim movups (%rdi),%xmm2 1946238405Sjkim movups 16(%rdi),%xmm3 1947238405Sjkim movups 32(%rdi),%xmm4 1948238405Sjkim xorps %xmm10,%xmm2 1949238405Sjkim movups 48(%rdi),%xmm5 1950238405Sjkim leaq 64(%rdi),%rdi 1951238405Sjkim xorps %xmm11,%xmm3 1952238405Sjkim xorps %xmm12,%xmm4 1953238405Sjkim xorps %xmm13,%xmm5 1954238405Sjkim 1955238405Sjkim call _aesni_encrypt4 1956238405Sjkim 1957290207Sjkim pxor %xmm10,%xmm2 1958290207Sjkim movdqa %xmm14,%xmm10 1959290207Sjkim pxor %xmm11,%xmm3 1960290207Sjkim pxor %xmm12,%xmm4 1961290207Sjkim movdqu %xmm2,(%rsi) 1962290207Sjkim pxor %xmm13,%xmm5 1963290207Sjkim movdqu %xmm3,16(%rsi) 1964290207Sjkim movdqu %xmm4,32(%rsi) 1965290207Sjkim movdqu %xmm5,48(%rsi) 1966238405Sjkim leaq 64(%rsi),%rsi 1967238405Sjkim jmp .Lxts_enc_done 1968238405Sjkim 1969238405Sjkim.align 16 1970238405Sjkim.Lxts_enc_done: 1971238405Sjkim andq $15,%r9 1972238405Sjkim jz .Lxts_enc_ret 1973238405Sjkim movq %r9,%rdx 1974238405Sjkim 1975238405Sjkim.Lxts_enc_steal: 1976238405Sjkim movzbl (%rdi),%eax 1977238405Sjkim movzbl -16(%rsi),%ecx 1978238405Sjkim leaq 1(%rdi),%rdi 1979238405Sjkim movb %al,-16(%rsi) 1980238405Sjkim movb %cl,0(%rsi) 1981238405Sjkim leaq 1(%rsi),%rsi 1982238405Sjkim subq $1,%rdx 1983238405Sjkim jnz .Lxts_enc_steal 1984238405Sjkim 1985238405Sjkim subq %r9,%rsi 1986238405Sjkim movq %r11,%rcx 1987238405Sjkim movl %r10d,%eax 1988238405Sjkim 1989238405Sjkim movups -16(%rsi),%xmm2 1990238405Sjkim xorps %xmm10,%xmm2 1991238405Sjkim movups (%rcx),%xmm0 1992238405Sjkim movups 16(%rcx),%xmm1 1993238405Sjkim leaq 32(%rcx),%rcx 1994238405Sjkim xorps %xmm0,%xmm2 1995238405Sjkim.Loop_enc1_10: 1996238405Sjkim.byte 102,15,56,220,209 1997238405Sjkim decl %eax 1998238405Sjkim movups (%rcx),%xmm1 1999238405Sjkim leaq 16(%rcx),%rcx 2000290207Sjkim jnz .Loop_enc1_10 2001238405Sjkim.byte 102,15,56,221,209 2002238405Sjkim xorps %xmm10,%xmm2 2003238405Sjkim movups %xmm2,-16(%rsi) 2004238405Sjkim 2005238405Sjkim.Lxts_enc_ret: 2006290207Sjkim xorps %xmm0,%xmm0 2007290207Sjkim pxor %xmm1,%xmm1 2008290207Sjkim pxor %xmm2,%xmm2 2009290207Sjkim pxor %xmm3,%xmm3 2010290207Sjkim pxor %xmm4,%xmm4 2011290207Sjkim pxor %xmm5,%xmm5 2012290207Sjkim pxor %xmm6,%xmm6 2013290207Sjkim pxor %xmm7,%xmm7 2014290207Sjkim movaps %xmm0,0(%rsp) 2015290207Sjkim pxor %xmm8,%xmm8 2016290207Sjkim movaps %xmm0,16(%rsp) 2017290207Sjkim pxor %xmm9,%xmm9 2018290207Sjkim movaps %xmm0,32(%rsp) 2019290207Sjkim pxor %xmm10,%xmm10 2020290207Sjkim movaps %xmm0,48(%rsp) 2021290207Sjkim pxor %xmm11,%xmm11 2022290207Sjkim movaps %xmm0,64(%rsp) 2023290207Sjkim pxor %xmm12,%xmm12 2024290207Sjkim movaps %xmm0,80(%rsp) 2025290207Sjkim pxor %xmm13,%xmm13 2026290207Sjkim movaps %xmm0,96(%rsp) 2027290207Sjkim pxor %xmm14,%xmm14 2028290207Sjkim pxor %xmm15,%xmm15 2029290207Sjkim leaq (%rbp),%rsp 2030290207Sjkim popq %rbp 2031238405Sjkim.Lxts_enc_epilogue: 2032238405Sjkim .byte 0xf3,0xc3 2033238405Sjkim.size aesni_xts_encrypt,.-aesni_xts_encrypt 2034238405Sjkim.globl aesni_xts_decrypt 2035238405Sjkim.type aesni_xts_decrypt,@function 2036238405Sjkim.align 16 2037238405Sjkimaesni_xts_decrypt: 2038290207Sjkim leaq (%rsp),%rax 2039290207Sjkim pushq %rbp 2040290207Sjkim subq $112,%rsp 2041290207Sjkim andq $-16,%rsp 2042290207Sjkim leaq -8(%rax),%rbp 2043290207Sjkim movups (%r9),%xmm2 2044238405Sjkim movl 240(%r8),%eax 2045238405Sjkim movl 240(%rcx),%r10d 2046238405Sjkim movups (%r8),%xmm0 2047238405Sjkim movups 16(%r8),%xmm1 2048238405Sjkim leaq 32(%r8),%r8 2049290207Sjkim xorps %xmm0,%xmm2 2050238405Sjkim.Loop_enc1_11: 2051290207Sjkim.byte 102,15,56,220,209 2052238405Sjkim decl %eax 2053238405Sjkim movups (%r8),%xmm1 2054238405Sjkim leaq 16(%r8),%r8 2055290207Sjkim jnz .Loop_enc1_11 2056290207Sjkim.byte 102,15,56,221,209 2057238405Sjkim xorl %eax,%eax 2058238405Sjkim testq $15,%rdx 2059238405Sjkim setnz %al 2060238405Sjkim shlq $4,%rax 2061238405Sjkim subq %rax,%rdx 2062238405Sjkim 2063290207Sjkim movups (%rcx),%xmm0 2064238405Sjkim movq %rcx,%r11 2065238405Sjkim movl %r10d,%eax 2066290207Sjkim shll $4,%r10d 2067238405Sjkim movq %rdx,%r9 2068238405Sjkim andq $-16,%rdx 2069238405Sjkim 2070290207Sjkim movups 16(%rcx,%r10,1),%xmm1 2071290207Sjkim 2072238405Sjkim movdqa .Lxts_magic(%rip),%xmm8 2073290207Sjkim movdqa %xmm2,%xmm15 2074296279Sjkim pshufd $0x5f,%xmm2,%xmm9 2075290207Sjkim pxor %xmm0,%xmm1 2076290207Sjkim movdqa %xmm9,%xmm14 2077290207Sjkim paddd %xmm9,%xmm9 2078238405Sjkim movdqa %xmm15,%xmm10 2079290207Sjkim psrad $31,%xmm14 2080238405Sjkim paddq %xmm15,%xmm15 2081290207Sjkim pand %xmm8,%xmm14 2082290207Sjkim pxor %xmm0,%xmm10 2083290207Sjkim pxor %xmm14,%xmm15 2084290207Sjkim movdqa %xmm9,%xmm14 2085290207Sjkim paddd %xmm9,%xmm9 2086238405Sjkim movdqa %xmm15,%xmm11 2087290207Sjkim psrad $31,%xmm14 2088238405Sjkim paddq %xmm15,%xmm15 2089290207Sjkim pand %xmm8,%xmm14 2090290207Sjkim pxor %xmm0,%xmm11 2091290207Sjkim pxor %xmm14,%xmm15 2092290207Sjkim movdqa %xmm9,%xmm14 2093290207Sjkim paddd %xmm9,%xmm9 2094238405Sjkim movdqa %xmm15,%xmm12 2095290207Sjkim psrad $31,%xmm14 2096238405Sjkim paddq %xmm15,%xmm15 2097290207Sjkim pand %xmm8,%xmm14 2098290207Sjkim pxor %xmm0,%xmm12 2099290207Sjkim pxor %xmm14,%xmm15 2100290207Sjkim movdqa %xmm9,%xmm14 2101290207Sjkim paddd %xmm9,%xmm9 2102238405Sjkim movdqa %xmm15,%xmm13 2103290207Sjkim psrad $31,%xmm14 2104238405Sjkim paddq %xmm15,%xmm15 2105290207Sjkim pand %xmm8,%xmm14 2106290207Sjkim pxor %xmm0,%xmm13 2107290207Sjkim pxor %xmm14,%xmm15 2108290207Sjkim movdqa %xmm15,%xmm14 2109290207Sjkim psrad $31,%xmm9 2110290207Sjkim paddq %xmm15,%xmm15 2111238405Sjkim pand %xmm8,%xmm9 2112290207Sjkim pxor %xmm0,%xmm14 2113238405Sjkim pxor %xmm9,%xmm15 2114290207Sjkim movaps %xmm1,96(%rsp) 2115290207Sjkim 2116238405Sjkim subq $96,%rdx 2117238405Sjkim jc .Lxts_dec_short 2118238405Sjkim 2119290207Sjkim movl $16+96,%eax 2120290207Sjkim leaq 32(%r11,%r10,1),%rcx 2121290207Sjkim subq %r10,%rax 2122290207Sjkim movups 16(%r11),%xmm1 2123290207Sjkim movq %rax,%r10 2124290207Sjkim leaq .Lxts_magic(%rip),%r8 2125238405Sjkim jmp .Lxts_dec_grandloop 2126238405Sjkim 2127290207Sjkim.align 32 2128238405Sjkim.Lxts_dec_grandloop: 2129238405Sjkim movdqu 0(%rdi),%xmm2 2130290207Sjkim movdqa %xmm0,%xmm8 2131238405Sjkim movdqu 16(%rdi),%xmm3 2132290207Sjkim pxor %xmm10,%xmm2 2133238405Sjkim movdqu 32(%rdi),%xmm4 2134290207Sjkim pxor %xmm11,%xmm3 2135290207Sjkim.byte 102,15,56,222,209 2136238405Sjkim movdqu 48(%rdi),%xmm5 2137290207Sjkim pxor %xmm12,%xmm4 2138290207Sjkim.byte 102,15,56,222,217 2139238405Sjkim movdqu 64(%rdi),%xmm6 2140290207Sjkim pxor %xmm13,%xmm5 2141290207Sjkim.byte 102,15,56,222,225 2142238405Sjkim movdqu 80(%rdi),%xmm7 2143290207Sjkim pxor %xmm15,%xmm8 2144290207Sjkim movdqa 96(%rsp),%xmm9 2145290207Sjkim pxor %xmm14,%xmm6 2146290207Sjkim.byte 102,15,56,222,233 2147290207Sjkim movups 32(%r11),%xmm0 2148238405Sjkim leaq 96(%rdi),%rdi 2149290207Sjkim pxor %xmm8,%xmm7 2150238405Sjkim 2151290207Sjkim pxor %xmm9,%xmm10 2152290207Sjkim.byte 102,15,56,222,241 2153290207Sjkim pxor %xmm9,%xmm11 2154290207Sjkim movdqa %xmm10,0(%rsp) 2155290207Sjkim.byte 102,15,56,222,249 2156290207Sjkim movups 48(%r11),%xmm1 2157290207Sjkim pxor %xmm9,%xmm12 2158238405Sjkim 2159290207Sjkim.byte 102,15,56,222,208 2160290207Sjkim pxor %xmm9,%xmm13 2161290207Sjkim movdqa %xmm11,16(%rsp) 2162290207Sjkim.byte 102,15,56,222,216 2163290207Sjkim pxor %xmm9,%xmm14 2164290207Sjkim movdqa %xmm12,32(%rsp) 2165290207Sjkim.byte 102,15,56,222,224 2166290207Sjkim.byte 102,15,56,222,232 2167290207Sjkim pxor %xmm9,%xmm8 2168290207Sjkim movdqa %xmm14,64(%rsp) 2169290207Sjkim.byte 102,15,56,222,240 2170290207Sjkim.byte 102,15,56,222,248 2171290207Sjkim movups 64(%r11),%xmm0 2172290207Sjkim movdqa %xmm8,80(%rsp) 2173296279Sjkim pshufd $0x5f,%xmm15,%xmm9 2174290207Sjkim jmp .Lxts_dec_loop6 2175290207Sjkim.align 32 2176290207Sjkim.Lxts_dec_loop6: 2177238405Sjkim.byte 102,15,56,222,209 2178238405Sjkim.byte 102,15,56,222,217 2179238405Sjkim.byte 102,15,56,222,225 2180238405Sjkim.byte 102,15,56,222,233 2181238405Sjkim.byte 102,15,56,222,241 2182238405Sjkim.byte 102,15,56,222,249 2183290207Sjkim movups -64(%rcx,%rax,1),%xmm1 2184290207Sjkim addq $32,%rax 2185238405Sjkim 2186290207Sjkim.byte 102,15,56,222,208 2187290207Sjkim.byte 102,15,56,222,216 2188290207Sjkim.byte 102,15,56,222,224 2189290207Sjkim.byte 102,15,56,222,232 2190290207Sjkim.byte 102,15,56,222,240 2191290207Sjkim.byte 102,15,56,222,248 2192290207Sjkim movups -80(%rcx,%rax,1),%xmm0 2193290207Sjkim jnz .Lxts_dec_loop6 2194290207Sjkim 2195290207Sjkim movdqa (%r8),%xmm8 2196290207Sjkim movdqa %xmm9,%xmm14 2197290207Sjkim paddd %xmm9,%xmm9 2198238405Sjkim.byte 102,15,56,222,209 2199290207Sjkim paddq %xmm15,%xmm15 2200290207Sjkim psrad $31,%xmm14 2201238405Sjkim.byte 102,15,56,222,217 2202290207Sjkim pand %xmm8,%xmm14 2203290207Sjkim movups (%r11),%xmm10 2204238405Sjkim.byte 102,15,56,222,225 2205238405Sjkim.byte 102,15,56,222,233 2206238405Sjkim.byte 102,15,56,222,241 2207290207Sjkim pxor %xmm14,%xmm15 2208290207Sjkim movaps %xmm10,%xmm11 2209238405Sjkim.byte 102,15,56,222,249 2210290207Sjkim movups -64(%rcx),%xmm1 2211290207Sjkim 2212290207Sjkim movdqa %xmm9,%xmm14 2213238405Sjkim.byte 102,15,56,222,208 2214290207Sjkim paddd %xmm9,%xmm9 2215290207Sjkim pxor %xmm15,%xmm10 2216238405Sjkim.byte 102,15,56,222,216 2217290207Sjkim psrad $31,%xmm14 2218290207Sjkim paddq %xmm15,%xmm15 2219238405Sjkim.byte 102,15,56,222,224 2220238405Sjkim.byte 102,15,56,222,232 2221290207Sjkim pand %xmm8,%xmm14 2222290207Sjkim movaps %xmm11,%xmm12 2223238405Sjkim.byte 102,15,56,222,240 2224290207Sjkim pxor %xmm14,%xmm15 2225290207Sjkim movdqa %xmm9,%xmm14 2226238405Sjkim.byte 102,15,56,222,248 2227290207Sjkim movups -48(%rcx),%xmm0 2228238405Sjkim 2229290207Sjkim paddd %xmm9,%xmm9 2230238405Sjkim.byte 102,15,56,222,209 2231290207Sjkim pxor %xmm15,%xmm11 2232290207Sjkim psrad $31,%xmm14 2233238405Sjkim.byte 102,15,56,222,217 2234290207Sjkim paddq %xmm15,%xmm15 2235290207Sjkim pand %xmm8,%xmm14 2236238405Sjkim.byte 102,15,56,222,225 2237238405Sjkim.byte 102,15,56,222,233 2238290207Sjkim movdqa %xmm13,48(%rsp) 2239290207Sjkim pxor %xmm14,%xmm15 2240238405Sjkim.byte 102,15,56,222,241 2241290207Sjkim movaps %xmm12,%xmm13 2242290207Sjkim movdqa %xmm9,%xmm14 2243238405Sjkim.byte 102,15,56,222,249 2244290207Sjkim movups -32(%rcx),%xmm1 2245238405Sjkim 2246290207Sjkim paddd %xmm9,%xmm9 2247238405Sjkim.byte 102,15,56,222,208 2248290207Sjkim pxor %xmm15,%xmm12 2249290207Sjkim psrad $31,%xmm14 2250238405Sjkim.byte 102,15,56,222,216 2251290207Sjkim paddq %xmm15,%xmm15 2252290207Sjkim pand %xmm8,%xmm14 2253238405Sjkim.byte 102,15,56,222,224 2254238405Sjkim.byte 102,15,56,222,232 2255238405Sjkim.byte 102,15,56,222,240 2256290207Sjkim pxor %xmm14,%xmm15 2257290207Sjkim movaps %xmm13,%xmm14 2258238405Sjkim.byte 102,15,56,222,248 2259238405Sjkim 2260290207Sjkim movdqa %xmm9,%xmm0 2261290207Sjkim paddd %xmm9,%xmm9 2262238405Sjkim.byte 102,15,56,222,209 2263290207Sjkim pxor %xmm15,%xmm13 2264290207Sjkim psrad $31,%xmm0 2265238405Sjkim.byte 102,15,56,222,217 2266290207Sjkim paddq %xmm15,%xmm15 2267290207Sjkim pand %xmm8,%xmm0 2268238405Sjkim.byte 102,15,56,222,225 2269238405Sjkim.byte 102,15,56,222,233 2270290207Sjkim pxor %xmm0,%xmm15 2271290207Sjkim movups (%r11),%xmm0 2272238405Sjkim.byte 102,15,56,222,241 2273238405Sjkim.byte 102,15,56,222,249 2274290207Sjkim movups 16(%r11),%xmm1 2275238405Sjkim 2276290207Sjkim pxor %xmm15,%xmm14 2277290207Sjkim.byte 102,15,56,223,84,36,0 2278290207Sjkim psrad $31,%xmm9 2279238405Sjkim paddq %xmm15,%xmm15 2280290207Sjkim.byte 102,15,56,223,92,36,16 2281290207Sjkim.byte 102,15,56,223,100,36,32 2282238405Sjkim pand %xmm8,%xmm9 2283290207Sjkim movq %r10,%rax 2284290207Sjkim.byte 102,15,56,223,108,36,48 2285290207Sjkim.byte 102,15,56,223,116,36,64 2286290207Sjkim.byte 102,15,56,223,124,36,80 2287238405Sjkim pxor %xmm9,%xmm15 2288238405Sjkim 2289238405Sjkim leaq 96(%rsi),%rsi 2290290207Sjkim movups %xmm2,-96(%rsi) 2291290207Sjkim movups %xmm3,-80(%rsi) 2292290207Sjkim movups %xmm4,-64(%rsi) 2293290207Sjkim movups %xmm5,-48(%rsi) 2294290207Sjkim movups %xmm6,-32(%rsi) 2295290207Sjkim movups %xmm7,-16(%rsi) 2296238405Sjkim subq $96,%rdx 2297238405Sjkim jnc .Lxts_dec_grandloop 2298238405Sjkim 2299290207Sjkim movl $16+96,%eax 2300290207Sjkim subl %r10d,%eax 2301238405Sjkim movq %r11,%rcx 2302290207Sjkim shrl $4,%eax 2303238405Sjkim 2304238405Sjkim.Lxts_dec_short: 2305290207Sjkim 2306290207Sjkim movl %eax,%r10d 2307290207Sjkim pxor %xmm0,%xmm10 2308290207Sjkim pxor %xmm0,%xmm11 2309238405Sjkim addq $96,%rdx 2310238405Sjkim jz .Lxts_dec_done 2311238405Sjkim 2312290207Sjkim pxor %xmm0,%xmm12 2313296279Sjkim cmpq $0x20,%rdx 2314238405Sjkim jb .Lxts_dec_one 2315290207Sjkim pxor %xmm0,%xmm13 2316238405Sjkim je .Lxts_dec_two 2317238405Sjkim 2318290207Sjkim pxor %xmm0,%xmm14 2319296279Sjkim cmpq $0x40,%rdx 2320238405Sjkim jb .Lxts_dec_three 2321238405Sjkim je .Lxts_dec_four 2322238405Sjkim 2323238405Sjkim movdqu (%rdi),%xmm2 2324238405Sjkim movdqu 16(%rdi),%xmm3 2325238405Sjkim movdqu 32(%rdi),%xmm4 2326238405Sjkim pxor %xmm10,%xmm2 2327238405Sjkim movdqu 48(%rdi),%xmm5 2328238405Sjkim pxor %xmm11,%xmm3 2329238405Sjkim movdqu 64(%rdi),%xmm6 2330238405Sjkim leaq 80(%rdi),%rdi 2331238405Sjkim pxor %xmm12,%xmm4 2332238405Sjkim pxor %xmm13,%xmm5 2333238405Sjkim pxor %xmm14,%xmm6 2334238405Sjkim 2335238405Sjkim call _aesni_decrypt6 2336238405Sjkim 2337238405Sjkim xorps %xmm10,%xmm2 2338238405Sjkim xorps %xmm11,%xmm3 2339238405Sjkim xorps %xmm12,%xmm4 2340238405Sjkim movdqu %xmm2,(%rsi) 2341238405Sjkim xorps %xmm13,%xmm5 2342238405Sjkim movdqu %xmm3,16(%rsi) 2343238405Sjkim xorps %xmm14,%xmm6 2344238405Sjkim movdqu %xmm4,32(%rsi) 2345238405Sjkim pxor %xmm14,%xmm14 2346238405Sjkim movdqu %xmm5,48(%rsi) 2347238405Sjkim pcmpgtd %xmm15,%xmm14 2348238405Sjkim movdqu %xmm6,64(%rsi) 2349238405Sjkim leaq 80(%rsi),%rsi 2350296279Sjkim pshufd $0x13,%xmm14,%xmm11 2351238405Sjkim andq $15,%r9 2352238405Sjkim jz .Lxts_dec_ret 2353238405Sjkim 2354238405Sjkim movdqa %xmm15,%xmm10 2355238405Sjkim paddq %xmm15,%xmm15 2356238405Sjkim pand %xmm8,%xmm11 2357238405Sjkim pxor %xmm15,%xmm11 2358238405Sjkim jmp .Lxts_dec_done2 2359238405Sjkim 2360238405Sjkim.align 16 2361238405Sjkim.Lxts_dec_one: 2362238405Sjkim movups (%rdi),%xmm2 2363238405Sjkim leaq 16(%rdi),%rdi 2364238405Sjkim xorps %xmm10,%xmm2 2365238405Sjkim movups (%rcx),%xmm0 2366238405Sjkim movups 16(%rcx),%xmm1 2367238405Sjkim leaq 32(%rcx),%rcx 2368238405Sjkim xorps %xmm0,%xmm2 2369238405Sjkim.Loop_dec1_12: 2370238405Sjkim.byte 102,15,56,222,209 2371238405Sjkim decl %eax 2372238405Sjkim movups (%rcx),%xmm1 2373238405Sjkim leaq 16(%rcx),%rcx 2374290207Sjkim jnz .Loop_dec1_12 2375238405Sjkim.byte 102,15,56,223,209 2376238405Sjkim xorps %xmm10,%xmm2 2377238405Sjkim movdqa %xmm11,%xmm10 2378238405Sjkim movups %xmm2,(%rsi) 2379238405Sjkim movdqa %xmm12,%xmm11 2380238405Sjkim leaq 16(%rsi),%rsi 2381238405Sjkim jmp .Lxts_dec_done 2382238405Sjkim 2383238405Sjkim.align 16 2384238405Sjkim.Lxts_dec_two: 2385238405Sjkim movups (%rdi),%xmm2 2386238405Sjkim movups 16(%rdi),%xmm3 2387238405Sjkim leaq 32(%rdi),%rdi 2388238405Sjkim xorps %xmm10,%xmm2 2389238405Sjkim xorps %xmm11,%xmm3 2390238405Sjkim 2391290207Sjkim call _aesni_decrypt2 2392238405Sjkim 2393238405Sjkim xorps %xmm10,%xmm2 2394238405Sjkim movdqa %xmm12,%xmm10 2395238405Sjkim xorps %xmm11,%xmm3 2396238405Sjkim movdqa %xmm13,%xmm11 2397238405Sjkim movups %xmm2,(%rsi) 2398238405Sjkim movups %xmm3,16(%rsi) 2399238405Sjkim leaq 32(%rsi),%rsi 2400238405Sjkim jmp .Lxts_dec_done 2401238405Sjkim 2402238405Sjkim.align 16 2403238405Sjkim.Lxts_dec_three: 2404238405Sjkim movups (%rdi),%xmm2 2405238405Sjkim movups 16(%rdi),%xmm3 2406238405Sjkim movups 32(%rdi),%xmm4 2407238405Sjkim leaq 48(%rdi),%rdi 2408238405Sjkim xorps %xmm10,%xmm2 2409238405Sjkim xorps %xmm11,%xmm3 2410238405Sjkim xorps %xmm12,%xmm4 2411238405Sjkim 2412238405Sjkim call _aesni_decrypt3 2413238405Sjkim 2414238405Sjkim xorps %xmm10,%xmm2 2415238405Sjkim movdqa %xmm13,%xmm10 2416238405Sjkim xorps %xmm11,%xmm3 2417290207Sjkim movdqa %xmm14,%xmm11 2418238405Sjkim xorps %xmm12,%xmm4 2419238405Sjkim movups %xmm2,(%rsi) 2420238405Sjkim movups %xmm3,16(%rsi) 2421238405Sjkim movups %xmm4,32(%rsi) 2422238405Sjkim leaq 48(%rsi),%rsi 2423238405Sjkim jmp .Lxts_dec_done 2424238405Sjkim 2425238405Sjkim.align 16 2426238405Sjkim.Lxts_dec_four: 2427238405Sjkim movups (%rdi),%xmm2 2428238405Sjkim movups 16(%rdi),%xmm3 2429238405Sjkim movups 32(%rdi),%xmm4 2430238405Sjkim xorps %xmm10,%xmm2 2431238405Sjkim movups 48(%rdi),%xmm5 2432238405Sjkim leaq 64(%rdi),%rdi 2433238405Sjkim xorps %xmm11,%xmm3 2434238405Sjkim xorps %xmm12,%xmm4 2435238405Sjkim xorps %xmm13,%xmm5 2436238405Sjkim 2437238405Sjkim call _aesni_decrypt4 2438238405Sjkim 2439290207Sjkim pxor %xmm10,%xmm2 2440238405Sjkim movdqa %xmm14,%xmm10 2441290207Sjkim pxor %xmm11,%xmm3 2442238405Sjkim movdqa %xmm15,%xmm11 2443290207Sjkim pxor %xmm12,%xmm4 2444290207Sjkim movdqu %xmm2,(%rsi) 2445290207Sjkim pxor %xmm13,%xmm5 2446290207Sjkim movdqu %xmm3,16(%rsi) 2447290207Sjkim movdqu %xmm4,32(%rsi) 2448290207Sjkim movdqu %xmm5,48(%rsi) 2449238405Sjkim leaq 64(%rsi),%rsi 2450238405Sjkim jmp .Lxts_dec_done 2451238405Sjkim 2452238405Sjkim.align 16 2453238405Sjkim.Lxts_dec_done: 2454238405Sjkim andq $15,%r9 2455238405Sjkim jz .Lxts_dec_ret 2456238405Sjkim.Lxts_dec_done2: 2457238405Sjkim movq %r9,%rdx 2458238405Sjkim movq %r11,%rcx 2459238405Sjkim movl %r10d,%eax 2460238405Sjkim 2461238405Sjkim movups (%rdi),%xmm2 2462238405Sjkim xorps %xmm11,%xmm2 2463238405Sjkim movups (%rcx),%xmm0 2464238405Sjkim movups 16(%rcx),%xmm1 2465238405Sjkim leaq 32(%rcx),%rcx 2466238405Sjkim xorps %xmm0,%xmm2 2467238405Sjkim.Loop_dec1_13: 2468238405Sjkim.byte 102,15,56,222,209 2469238405Sjkim decl %eax 2470238405Sjkim movups (%rcx),%xmm1 2471238405Sjkim leaq 16(%rcx),%rcx 2472290207Sjkim jnz .Loop_dec1_13 2473238405Sjkim.byte 102,15,56,223,209 2474238405Sjkim xorps %xmm11,%xmm2 2475238405Sjkim movups %xmm2,(%rsi) 2476238405Sjkim 2477238405Sjkim.Lxts_dec_steal: 2478238405Sjkim movzbl 16(%rdi),%eax 2479238405Sjkim movzbl (%rsi),%ecx 2480238405Sjkim leaq 1(%rdi),%rdi 2481238405Sjkim movb %al,(%rsi) 2482238405Sjkim movb %cl,16(%rsi) 2483238405Sjkim leaq 1(%rsi),%rsi 2484238405Sjkim subq $1,%rdx 2485238405Sjkim jnz .Lxts_dec_steal 2486238405Sjkim 2487238405Sjkim subq %r9,%rsi 2488238405Sjkim movq %r11,%rcx 2489238405Sjkim movl %r10d,%eax 2490238405Sjkim 2491238405Sjkim movups (%rsi),%xmm2 2492238405Sjkim xorps %xmm10,%xmm2 2493238405Sjkim movups (%rcx),%xmm0 2494238405Sjkim movups 16(%rcx),%xmm1 2495238405Sjkim leaq 32(%rcx),%rcx 2496238405Sjkim xorps %xmm0,%xmm2 2497238405Sjkim.Loop_dec1_14: 2498238405Sjkim.byte 102,15,56,222,209 2499238405Sjkim decl %eax 2500238405Sjkim movups (%rcx),%xmm1 2501238405Sjkim leaq 16(%rcx),%rcx 2502290207Sjkim jnz .Loop_dec1_14 2503238405Sjkim.byte 102,15,56,223,209 2504238405Sjkim xorps %xmm10,%xmm2 2505238405Sjkim movups %xmm2,(%rsi) 2506238405Sjkim 2507238405Sjkim.Lxts_dec_ret: 2508290207Sjkim xorps %xmm0,%xmm0 2509290207Sjkim pxor %xmm1,%xmm1 2510290207Sjkim pxor %xmm2,%xmm2 2511290207Sjkim pxor %xmm3,%xmm3 2512290207Sjkim pxor %xmm4,%xmm4 2513290207Sjkim pxor %xmm5,%xmm5 2514290207Sjkim pxor %xmm6,%xmm6 2515290207Sjkim pxor %xmm7,%xmm7 2516290207Sjkim movaps %xmm0,0(%rsp) 2517290207Sjkim pxor %xmm8,%xmm8 2518290207Sjkim movaps %xmm0,16(%rsp) 2519290207Sjkim pxor %xmm9,%xmm9 2520290207Sjkim movaps %xmm0,32(%rsp) 2521290207Sjkim pxor %xmm10,%xmm10 2522290207Sjkim movaps %xmm0,48(%rsp) 2523290207Sjkim pxor %xmm11,%xmm11 2524290207Sjkim movaps %xmm0,64(%rsp) 2525290207Sjkim pxor %xmm12,%xmm12 2526290207Sjkim movaps %xmm0,80(%rsp) 2527290207Sjkim pxor %xmm13,%xmm13 2528290207Sjkim movaps %xmm0,96(%rsp) 2529290207Sjkim pxor %xmm14,%xmm14 2530290207Sjkim pxor %xmm15,%xmm15 2531290207Sjkim leaq (%rbp),%rsp 2532290207Sjkim popq %rbp 2533238405Sjkim.Lxts_dec_epilogue: 2534238405Sjkim .byte 0xf3,0xc3 2535238405Sjkim.size aesni_xts_decrypt,.-aesni_xts_decrypt 2536238405Sjkim.globl aesni_cbc_encrypt 2537238405Sjkim.type aesni_cbc_encrypt,@function 2538238405Sjkim.align 16 2539238405Sjkimaesni_cbc_encrypt: 2540238405Sjkim testq %rdx,%rdx 2541238405Sjkim jz .Lcbc_ret 2542238405Sjkim 2543238405Sjkim movl 240(%rcx),%r10d 2544238405Sjkim movq %rcx,%r11 2545238405Sjkim testl %r9d,%r9d 2546238405Sjkim jz .Lcbc_decrypt 2547238405Sjkim 2548238405Sjkim movups (%r8),%xmm2 2549238405Sjkim movl %r10d,%eax 2550238405Sjkim cmpq $16,%rdx 2551238405Sjkim jb .Lcbc_enc_tail 2552238405Sjkim subq $16,%rdx 2553238405Sjkim jmp .Lcbc_enc_loop 2554238405Sjkim.align 16 2555238405Sjkim.Lcbc_enc_loop: 2556238405Sjkim movups (%rdi),%xmm3 2557238405Sjkim leaq 16(%rdi),%rdi 2558238405Sjkim 2559238405Sjkim movups (%rcx),%xmm0 2560238405Sjkim movups 16(%rcx),%xmm1 2561238405Sjkim xorps %xmm0,%xmm3 2562238405Sjkim leaq 32(%rcx),%rcx 2563238405Sjkim xorps %xmm3,%xmm2 2564238405Sjkim.Loop_enc1_15: 2565238405Sjkim.byte 102,15,56,220,209 2566238405Sjkim decl %eax 2567238405Sjkim movups (%rcx),%xmm1 2568238405Sjkim leaq 16(%rcx),%rcx 2569290207Sjkim jnz .Loop_enc1_15 2570238405Sjkim.byte 102,15,56,221,209 2571238405Sjkim movl %r10d,%eax 2572238405Sjkim movq %r11,%rcx 2573238405Sjkim movups %xmm2,0(%rsi) 2574238405Sjkim leaq 16(%rsi),%rsi 2575238405Sjkim subq $16,%rdx 2576238405Sjkim jnc .Lcbc_enc_loop 2577238405Sjkim addq $16,%rdx 2578238405Sjkim jnz .Lcbc_enc_tail 2579290207Sjkim pxor %xmm0,%xmm0 2580290207Sjkim pxor %xmm1,%xmm1 2581238405Sjkim movups %xmm2,(%r8) 2582290207Sjkim pxor %xmm2,%xmm2 2583290207Sjkim pxor %xmm3,%xmm3 2584238405Sjkim jmp .Lcbc_ret 2585238405Sjkim 2586238405Sjkim.Lcbc_enc_tail: 2587238405Sjkim movq %rdx,%rcx 2588238405Sjkim xchgq %rdi,%rsi 2589290207Sjkim.long 0x9066A4F3 2590238405Sjkim movl $16,%ecx 2591238405Sjkim subq %rdx,%rcx 2592238405Sjkim xorl %eax,%eax 2593290207Sjkim.long 0x9066AAF3 2594238405Sjkim leaq -16(%rdi),%rdi 2595238405Sjkim movl %r10d,%eax 2596238405Sjkim movq %rdi,%rsi 2597238405Sjkim movq %r11,%rcx 2598238405Sjkim xorq %rdx,%rdx 2599290207Sjkim jmp .Lcbc_enc_loop 2600238405Sjkim 2601238405Sjkim.align 16 2602238405Sjkim.Lcbc_decrypt: 2603290207Sjkim cmpq $16,%rdx 2604290207Sjkim jne .Lcbc_decrypt_bulk 2605290207Sjkim 2606290207Sjkim 2607290207Sjkim 2608290207Sjkim movdqu (%rdi),%xmm2 2609290207Sjkim movdqu (%r8),%xmm3 2610290207Sjkim movdqa %xmm2,%xmm4 2611290207Sjkim movups (%rcx),%xmm0 2612290207Sjkim movups 16(%rcx),%xmm1 2613290207Sjkim leaq 32(%rcx),%rcx 2614290207Sjkim xorps %xmm0,%xmm2 2615290207Sjkim.Loop_dec1_16: 2616290207Sjkim.byte 102,15,56,222,209 2617290207Sjkim decl %r10d 2618290207Sjkim movups (%rcx),%xmm1 2619290207Sjkim leaq 16(%rcx),%rcx 2620290207Sjkim jnz .Loop_dec1_16 2621290207Sjkim.byte 102,15,56,223,209 2622290207Sjkim pxor %xmm0,%xmm0 2623290207Sjkim pxor %xmm1,%xmm1 2624290207Sjkim movdqu %xmm4,(%r8) 2625290207Sjkim xorps %xmm3,%xmm2 2626290207Sjkim pxor %xmm3,%xmm3 2627290207Sjkim movups %xmm2,(%rsi) 2628290207Sjkim pxor %xmm2,%xmm2 2629290207Sjkim jmp .Lcbc_ret 2630290207Sjkim.align 16 2631290207Sjkim.Lcbc_decrypt_bulk: 2632290207Sjkim leaq (%rsp),%rax 2633290207Sjkim pushq %rbp 2634290207Sjkim subq $16,%rsp 2635290207Sjkim andq $-16,%rsp 2636290207Sjkim leaq -8(%rax),%rbp 2637290207Sjkim movups (%r8),%xmm10 2638238405Sjkim movl %r10d,%eax 2639296279Sjkim cmpq $0x50,%rdx 2640290207Sjkim jbe .Lcbc_dec_tail 2641290207Sjkim 2642290207Sjkim movups (%rcx),%xmm0 2643290207Sjkim movdqu 0(%rdi),%xmm2 2644290207Sjkim movdqu 16(%rdi),%xmm3 2645290207Sjkim movdqa %xmm2,%xmm11 2646290207Sjkim movdqu 32(%rdi),%xmm4 2647290207Sjkim movdqa %xmm3,%xmm12 2648290207Sjkim movdqu 48(%rdi),%xmm5 2649290207Sjkim movdqa %xmm4,%xmm13 2650290207Sjkim movdqu 64(%rdi),%xmm6 2651290207Sjkim movdqa %xmm5,%xmm14 2652290207Sjkim movdqu 80(%rdi),%xmm7 2653290207Sjkim movdqa %xmm6,%xmm15 2654290207Sjkim movl OPENSSL_ia32cap_P+4(%rip),%r9d 2655296279Sjkim cmpq $0x70,%rdx 2656290207Sjkim jbe .Lcbc_dec_six_or_seven 2657290207Sjkim 2658290207Sjkim andl $71303168,%r9d 2659296279Sjkim subq $0x50,%rdx 2660290207Sjkim cmpl $4194304,%r9d 2661290207Sjkim je .Lcbc_dec_loop6_enter 2662296279Sjkim subq $0x20,%rdx 2663290207Sjkim leaq 112(%rcx),%rcx 2664238405Sjkim jmp .Lcbc_dec_loop8_enter 2665238405Sjkim.align 16 2666238405Sjkim.Lcbc_dec_loop8: 2667238405Sjkim movups %xmm9,(%rsi) 2668238405Sjkim leaq 16(%rsi),%rsi 2669238405Sjkim.Lcbc_dec_loop8_enter: 2670290207Sjkim movdqu 96(%rdi),%xmm8 2671290207Sjkim pxor %xmm0,%xmm2 2672290207Sjkim movdqu 112(%rdi),%xmm9 2673290207Sjkim pxor %xmm0,%xmm3 2674290207Sjkim movups 16-112(%rcx),%xmm1 2675290207Sjkim pxor %xmm0,%xmm4 2676290207Sjkim xorq %r11,%r11 2677296279Sjkim cmpq $0x70,%rdx 2678290207Sjkim pxor %xmm0,%xmm5 2679290207Sjkim pxor %xmm0,%xmm6 2680290207Sjkim pxor %xmm0,%xmm7 2681290207Sjkim pxor %xmm0,%xmm8 2682238405Sjkim 2683238405Sjkim.byte 102,15,56,222,209 2684290207Sjkim pxor %xmm0,%xmm9 2685290207Sjkim movups 32-112(%rcx),%xmm0 2686238405Sjkim.byte 102,15,56,222,217 2687238405Sjkim.byte 102,15,56,222,225 2688238405Sjkim.byte 102,15,56,222,233 2689238405Sjkim.byte 102,15,56,222,241 2690238405Sjkim.byte 102,15,56,222,249 2691238405Sjkim.byte 102,68,15,56,222,193 2692290207Sjkim setnc %r11b 2693290207Sjkim shlq $7,%r11 2694238405Sjkim.byte 102,68,15,56,222,201 2695290207Sjkim addq %rdi,%r11 2696290207Sjkim movups 48-112(%rcx),%xmm1 2697290207Sjkim.byte 102,15,56,222,208 2698290207Sjkim.byte 102,15,56,222,216 2699290207Sjkim.byte 102,15,56,222,224 2700290207Sjkim.byte 102,15,56,222,232 2701290207Sjkim.byte 102,15,56,222,240 2702290207Sjkim.byte 102,15,56,222,248 2703290207Sjkim.byte 102,68,15,56,222,192 2704290207Sjkim.byte 102,68,15,56,222,200 2705290207Sjkim movups 64-112(%rcx),%xmm0 2706290207Sjkim nop 2707290207Sjkim.byte 102,15,56,222,209 2708290207Sjkim.byte 102,15,56,222,217 2709290207Sjkim.byte 102,15,56,222,225 2710290207Sjkim.byte 102,15,56,222,233 2711290207Sjkim.byte 102,15,56,222,241 2712290207Sjkim.byte 102,15,56,222,249 2713290207Sjkim.byte 102,68,15,56,222,193 2714290207Sjkim.byte 102,68,15,56,222,201 2715290207Sjkim movups 80-112(%rcx),%xmm1 2716290207Sjkim nop 2717290207Sjkim.byte 102,15,56,222,208 2718290207Sjkim.byte 102,15,56,222,216 2719290207Sjkim.byte 102,15,56,222,224 2720290207Sjkim.byte 102,15,56,222,232 2721290207Sjkim.byte 102,15,56,222,240 2722290207Sjkim.byte 102,15,56,222,248 2723290207Sjkim.byte 102,68,15,56,222,192 2724290207Sjkim.byte 102,68,15,56,222,200 2725290207Sjkim movups 96-112(%rcx),%xmm0 2726290207Sjkim nop 2727290207Sjkim.byte 102,15,56,222,209 2728290207Sjkim.byte 102,15,56,222,217 2729290207Sjkim.byte 102,15,56,222,225 2730290207Sjkim.byte 102,15,56,222,233 2731290207Sjkim.byte 102,15,56,222,241 2732290207Sjkim.byte 102,15,56,222,249 2733290207Sjkim.byte 102,68,15,56,222,193 2734290207Sjkim.byte 102,68,15,56,222,201 2735290207Sjkim movups 112-112(%rcx),%xmm1 2736290207Sjkim nop 2737290207Sjkim.byte 102,15,56,222,208 2738290207Sjkim.byte 102,15,56,222,216 2739290207Sjkim.byte 102,15,56,222,224 2740290207Sjkim.byte 102,15,56,222,232 2741290207Sjkim.byte 102,15,56,222,240 2742290207Sjkim.byte 102,15,56,222,248 2743290207Sjkim.byte 102,68,15,56,222,192 2744290207Sjkim.byte 102,68,15,56,222,200 2745290207Sjkim movups 128-112(%rcx),%xmm0 2746290207Sjkim nop 2747290207Sjkim.byte 102,15,56,222,209 2748290207Sjkim.byte 102,15,56,222,217 2749290207Sjkim.byte 102,15,56,222,225 2750290207Sjkim.byte 102,15,56,222,233 2751290207Sjkim.byte 102,15,56,222,241 2752290207Sjkim.byte 102,15,56,222,249 2753290207Sjkim.byte 102,68,15,56,222,193 2754290207Sjkim.byte 102,68,15,56,222,201 2755290207Sjkim movups 144-112(%rcx),%xmm1 2756290207Sjkim cmpl $11,%eax 2757290207Sjkim.byte 102,15,56,222,208 2758290207Sjkim.byte 102,15,56,222,216 2759290207Sjkim.byte 102,15,56,222,224 2760290207Sjkim.byte 102,15,56,222,232 2761290207Sjkim.byte 102,15,56,222,240 2762290207Sjkim.byte 102,15,56,222,248 2763290207Sjkim.byte 102,68,15,56,222,192 2764290207Sjkim.byte 102,68,15,56,222,200 2765290207Sjkim movups 160-112(%rcx),%xmm0 2766290207Sjkim jb .Lcbc_dec_done 2767290207Sjkim.byte 102,15,56,222,209 2768290207Sjkim.byte 102,15,56,222,217 2769290207Sjkim.byte 102,15,56,222,225 2770290207Sjkim.byte 102,15,56,222,233 2771290207Sjkim.byte 102,15,56,222,241 2772290207Sjkim.byte 102,15,56,222,249 2773290207Sjkim.byte 102,68,15,56,222,193 2774290207Sjkim.byte 102,68,15,56,222,201 2775290207Sjkim movups 176-112(%rcx),%xmm1 2776290207Sjkim nop 2777290207Sjkim.byte 102,15,56,222,208 2778290207Sjkim.byte 102,15,56,222,216 2779290207Sjkim.byte 102,15,56,222,224 2780290207Sjkim.byte 102,15,56,222,232 2781290207Sjkim.byte 102,15,56,222,240 2782290207Sjkim.byte 102,15,56,222,248 2783290207Sjkim.byte 102,68,15,56,222,192 2784290207Sjkim.byte 102,68,15,56,222,200 2785290207Sjkim movups 192-112(%rcx),%xmm0 2786290207Sjkim je .Lcbc_dec_done 2787290207Sjkim.byte 102,15,56,222,209 2788290207Sjkim.byte 102,15,56,222,217 2789290207Sjkim.byte 102,15,56,222,225 2790290207Sjkim.byte 102,15,56,222,233 2791290207Sjkim.byte 102,15,56,222,241 2792290207Sjkim.byte 102,15,56,222,249 2793290207Sjkim.byte 102,68,15,56,222,193 2794290207Sjkim.byte 102,68,15,56,222,201 2795290207Sjkim movups 208-112(%rcx),%xmm1 2796290207Sjkim nop 2797290207Sjkim.byte 102,15,56,222,208 2798290207Sjkim.byte 102,15,56,222,216 2799290207Sjkim.byte 102,15,56,222,224 2800290207Sjkim.byte 102,15,56,222,232 2801290207Sjkim.byte 102,15,56,222,240 2802290207Sjkim.byte 102,15,56,222,248 2803290207Sjkim.byte 102,68,15,56,222,192 2804290207Sjkim.byte 102,68,15,56,222,200 2805290207Sjkim movups 224-112(%rcx),%xmm0 2806290207Sjkim jmp .Lcbc_dec_done 2807290207Sjkim.align 16 2808290207Sjkim.Lcbc_dec_done: 2809290207Sjkim.byte 102,15,56,222,209 2810290207Sjkim.byte 102,15,56,222,217 2811290207Sjkim pxor %xmm0,%xmm10 2812290207Sjkim pxor %xmm0,%xmm11 2813290207Sjkim.byte 102,15,56,222,225 2814290207Sjkim.byte 102,15,56,222,233 2815290207Sjkim pxor %xmm0,%xmm12 2816290207Sjkim pxor %xmm0,%xmm13 2817290207Sjkim.byte 102,15,56,222,241 2818290207Sjkim.byte 102,15,56,222,249 2819290207Sjkim pxor %xmm0,%xmm14 2820290207Sjkim pxor %xmm0,%xmm15 2821290207Sjkim.byte 102,68,15,56,222,193 2822290207Sjkim.byte 102,68,15,56,222,201 2823290207Sjkim movdqu 80(%rdi),%xmm1 2824238405Sjkim 2825290207Sjkim.byte 102,65,15,56,223,210 2826290207Sjkim movdqu 96(%rdi),%xmm10 2827290207Sjkim pxor %xmm0,%xmm1 2828290207Sjkim.byte 102,65,15,56,223,219 2829290207Sjkim pxor %xmm0,%xmm10 2830290207Sjkim movdqu 112(%rdi),%xmm0 2831290207Sjkim.byte 102,65,15,56,223,228 2832290207Sjkim leaq 128(%rdi),%rdi 2833290207Sjkim movdqu 0(%r11),%xmm11 2834290207Sjkim.byte 102,65,15,56,223,237 2835290207Sjkim.byte 102,65,15,56,223,246 2836290207Sjkim movdqu 16(%r11),%xmm12 2837290207Sjkim movdqu 32(%r11),%xmm13 2838290207Sjkim.byte 102,65,15,56,223,255 2839290207Sjkim.byte 102,68,15,56,223,193 2840290207Sjkim movdqu 48(%r11),%xmm14 2841290207Sjkim movdqu 64(%r11),%xmm15 2842290207Sjkim.byte 102,69,15,56,223,202 2843290207Sjkim movdqa %xmm0,%xmm10 2844290207Sjkim movdqu 80(%r11),%xmm1 2845290207Sjkim movups -112(%rcx),%xmm0 2846238405Sjkim 2847238405Sjkim movups %xmm2,(%rsi) 2848290207Sjkim movdqa %xmm11,%xmm2 2849238405Sjkim movups %xmm3,16(%rsi) 2850290207Sjkim movdqa %xmm12,%xmm3 2851238405Sjkim movups %xmm4,32(%rsi) 2852290207Sjkim movdqa %xmm13,%xmm4 2853238405Sjkim movups %xmm5,48(%rsi) 2854290207Sjkim movdqa %xmm14,%xmm5 2855238405Sjkim movups %xmm6,64(%rsi) 2856290207Sjkim movdqa %xmm15,%xmm6 2857238405Sjkim movups %xmm7,80(%rsi) 2858290207Sjkim movdqa %xmm1,%xmm7 2859238405Sjkim movups %xmm8,96(%rsi) 2860238405Sjkim leaq 112(%rsi),%rsi 2861290207Sjkim 2862296279Sjkim subq $0x80,%rdx 2863238405Sjkim ja .Lcbc_dec_loop8 2864238405Sjkim 2865238405Sjkim movaps %xmm9,%xmm2 2866290207Sjkim leaq -112(%rcx),%rcx 2867296279Sjkim addq $0x70,%rdx 2868290207Sjkim jle .Lcbc_dec_clear_tail_collected 2869290207Sjkim movups %xmm9,(%rsi) 2870238405Sjkim leaq 16(%rsi),%rsi 2871296279Sjkim cmpq $0x50,%rdx 2872290207Sjkim jbe .Lcbc_dec_tail 2873290207Sjkim 2874290207Sjkim movaps %xmm11,%xmm2 2875290207Sjkim.Lcbc_dec_six_or_seven: 2876296279Sjkim cmpq $0x60,%rdx 2877290207Sjkim ja .Lcbc_dec_seven 2878290207Sjkim 2879290207Sjkim movaps %xmm7,%xmm8 2880290207Sjkim call _aesni_decrypt6 2881290207Sjkim pxor %xmm10,%xmm2 2882290207Sjkim movaps %xmm8,%xmm10 2883290207Sjkim pxor %xmm11,%xmm3 2884290207Sjkim movdqu %xmm2,(%rsi) 2885290207Sjkim pxor %xmm12,%xmm4 2886290207Sjkim movdqu %xmm3,16(%rsi) 2887290207Sjkim pxor %xmm3,%xmm3 2888290207Sjkim pxor %xmm13,%xmm5 2889290207Sjkim movdqu %xmm4,32(%rsi) 2890290207Sjkim pxor %xmm4,%xmm4 2891290207Sjkim pxor %xmm14,%xmm6 2892290207Sjkim movdqu %xmm5,48(%rsi) 2893290207Sjkim pxor %xmm5,%xmm5 2894290207Sjkim pxor %xmm15,%xmm7 2895290207Sjkim movdqu %xmm6,64(%rsi) 2896290207Sjkim pxor %xmm6,%xmm6 2897290207Sjkim leaq 80(%rsi),%rsi 2898290207Sjkim movdqa %xmm7,%xmm2 2899290207Sjkim pxor %xmm7,%xmm7 2900290207Sjkim jmp .Lcbc_dec_tail_collected 2901290207Sjkim 2902290207Sjkim.align 16 2903290207Sjkim.Lcbc_dec_seven: 2904290207Sjkim movups 96(%rdi),%xmm8 2905290207Sjkim xorps %xmm9,%xmm9 2906290207Sjkim call _aesni_decrypt8 2907290207Sjkim movups 80(%rdi),%xmm9 2908290207Sjkim pxor %xmm10,%xmm2 2909290207Sjkim movups 96(%rdi),%xmm10 2910290207Sjkim pxor %xmm11,%xmm3 2911290207Sjkim movdqu %xmm2,(%rsi) 2912290207Sjkim pxor %xmm12,%xmm4 2913290207Sjkim movdqu %xmm3,16(%rsi) 2914290207Sjkim pxor %xmm3,%xmm3 2915290207Sjkim pxor %xmm13,%xmm5 2916290207Sjkim movdqu %xmm4,32(%rsi) 2917290207Sjkim pxor %xmm4,%xmm4 2918290207Sjkim pxor %xmm14,%xmm6 2919290207Sjkim movdqu %xmm5,48(%rsi) 2920290207Sjkim pxor %xmm5,%xmm5 2921290207Sjkim pxor %xmm15,%xmm7 2922290207Sjkim movdqu %xmm6,64(%rsi) 2923290207Sjkim pxor %xmm6,%xmm6 2924290207Sjkim pxor %xmm9,%xmm8 2925290207Sjkim movdqu %xmm7,80(%rsi) 2926290207Sjkim pxor %xmm7,%xmm7 2927290207Sjkim leaq 96(%rsi),%rsi 2928290207Sjkim movdqa %xmm8,%xmm2 2929290207Sjkim pxor %xmm8,%xmm8 2930290207Sjkim pxor %xmm9,%xmm9 2931290207Sjkim jmp .Lcbc_dec_tail_collected 2932290207Sjkim 2933290207Sjkim.align 16 2934290207Sjkim.Lcbc_dec_loop6: 2935290207Sjkim movups %xmm7,(%rsi) 2936290207Sjkim leaq 16(%rsi),%rsi 2937290207Sjkim movdqu 0(%rdi),%xmm2 2938290207Sjkim movdqu 16(%rdi),%xmm3 2939290207Sjkim movdqa %xmm2,%xmm11 2940290207Sjkim movdqu 32(%rdi),%xmm4 2941290207Sjkim movdqa %xmm3,%xmm12 2942290207Sjkim movdqu 48(%rdi),%xmm5 2943290207Sjkim movdqa %xmm4,%xmm13 2944290207Sjkim movdqu 64(%rdi),%xmm6 2945290207Sjkim movdqa %xmm5,%xmm14 2946290207Sjkim movdqu 80(%rdi),%xmm7 2947290207Sjkim movdqa %xmm6,%xmm15 2948290207Sjkim.Lcbc_dec_loop6_enter: 2949290207Sjkim leaq 96(%rdi),%rdi 2950290207Sjkim movdqa %xmm7,%xmm8 2951290207Sjkim 2952290207Sjkim call _aesni_decrypt6 2953290207Sjkim 2954290207Sjkim pxor %xmm10,%xmm2 2955290207Sjkim movdqa %xmm8,%xmm10 2956290207Sjkim pxor %xmm11,%xmm3 2957290207Sjkim movdqu %xmm2,(%rsi) 2958290207Sjkim pxor %xmm12,%xmm4 2959290207Sjkim movdqu %xmm3,16(%rsi) 2960290207Sjkim pxor %xmm13,%xmm5 2961290207Sjkim movdqu %xmm4,32(%rsi) 2962290207Sjkim pxor %xmm14,%xmm6 2963290207Sjkim movq %r11,%rcx 2964290207Sjkim movdqu %xmm5,48(%rsi) 2965290207Sjkim pxor %xmm15,%xmm7 2966290207Sjkim movl %r10d,%eax 2967290207Sjkim movdqu %xmm6,64(%rsi) 2968290207Sjkim leaq 80(%rsi),%rsi 2969296279Sjkim subq $0x60,%rdx 2970290207Sjkim ja .Lcbc_dec_loop6 2971290207Sjkim 2972290207Sjkim movdqa %xmm7,%xmm2 2973296279Sjkim addq $0x50,%rdx 2974290207Sjkim jle .Lcbc_dec_clear_tail_collected 2975290207Sjkim movups %xmm7,(%rsi) 2976290207Sjkim leaq 16(%rsi),%rsi 2977290207Sjkim 2978238405Sjkim.Lcbc_dec_tail: 2979238405Sjkim movups (%rdi),%xmm2 2980296279Sjkim subq $0x10,%rdx 2981238405Sjkim jbe .Lcbc_dec_one 2982238405Sjkim 2983238405Sjkim movups 16(%rdi),%xmm3 2984290207Sjkim movaps %xmm2,%xmm11 2985296279Sjkim subq $0x10,%rdx 2986238405Sjkim jbe .Lcbc_dec_two 2987238405Sjkim 2988238405Sjkim movups 32(%rdi),%xmm4 2989290207Sjkim movaps %xmm3,%xmm12 2990296279Sjkim subq $0x10,%rdx 2991238405Sjkim jbe .Lcbc_dec_three 2992238405Sjkim 2993238405Sjkim movups 48(%rdi),%xmm5 2994290207Sjkim movaps %xmm4,%xmm13 2995296279Sjkim subq $0x10,%rdx 2996238405Sjkim jbe .Lcbc_dec_four 2997238405Sjkim 2998238405Sjkim movups 64(%rdi),%xmm6 2999290207Sjkim movaps %xmm5,%xmm14 3000290207Sjkim movaps %xmm6,%xmm15 3001290207Sjkim xorps %xmm7,%xmm7 3002290207Sjkim call _aesni_decrypt6 3003290207Sjkim pxor %xmm10,%xmm2 3004290207Sjkim movaps %xmm15,%xmm10 3005290207Sjkim pxor %xmm11,%xmm3 3006290207Sjkim movdqu %xmm2,(%rsi) 3007290207Sjkim pxor %xmm12,%xmm4 3008290207Sjkim movdqu %xmm3,16(%rsi) 3009290207Sjkim pxor %xmm3,%xmm3 3010290207Sjkim pxor %xmm13,%xmm5 3011290207Sjkim movdqu %xmm4,32(%rsi) 3012290207Sjkim pxor %xmm4,%xmm4 3013290207Sjkim pxor %xmm14,%xmm6 3014290207Sjkim movdqu %xmm5,48(%rsi) 3015290207Sjkim pxor %xmm5,%xmm5 3016290207Sjkim leaq 64(%rsi),%rsi 3017290207Sjkim movdqa %xmm6,%xmm2 3018290207Sjkim pxor %xmm6,%xmm6 3019290207Sjkim pxor %xmm7,%xmm7 3020296279Sjkim subq $0x10,%rdx 3021290207Sjkim jmp .Lcbc_dec_tail_collected 3022238405Sjkim 3023238405Sjkim.align 16 3024238405Sjkim.Lcbc_dec_one: 3025290207Sjkim movaps %xmm2,%xmm11 3026238405Sjkim movups (%rcx),%xmm0 3027238405Sjkim movups 16(%rcx),%xmm1 3028238405Sjkim leaq 32(%rcx),%rcx 3029238405Sjkim xorps %xmm0,%xmm2 3030290207Sjkim.Loop_dec1_17: 3031238405Sjkim.byte 102,15,56,222,209 3032238405Sjkim decl %eax 3033238405Sjkim movups (%rcx),%xmm1 3034238405Sjkim leaq 16(%rcx),%rcx 3035290207Sjkim jnz .Loop_dec1_17 3036238405Sjkim.byte 102,15,56,223,209 3037290207Sjkim xorps %xmm10,%xmm2 3038290207Sjkim movaps %xmm11,%xmm10 3039238405Sjkim jmp .Lcbc_dec_tail_collected 3040238405Sjkim.align 16 3041238405Sjkim.Lcbc_dec_two: 3042290207Sjkim movaps %xmm3,%xmm12 3043290207Sjkim call _aesni_decrypt2 3044290207Sjkim pxor %xmm10,%xmm2 3045290207Sjkim movaps %xmm12,%xmm10 3046290207Sjkim pxor %xmm11,%xmm3 3047290207Sjkim movdqu %xmm2,(%rsi) 3048290207Sjkim movdqa %xmm3,%xmm2 3049290207Sjkim pxor %xmm3,%xmm3 3050238405Sjkim leaq 16(%rsi),%rsi 3051238405Sjkim jmp .Lcbc_dec_tail_collected 3052238405Sjkim.align 16 3053238405Sjkim.Lcbc_dec_three: 3054290207Sjkim movaps %xmm4,%xmm13 3055238405Sjkim call _aesni_decrypt3 3056290207Sjkim pxor %xmm10,%xmm2 3057290207Sjkim movaps %xmm13,%xmm10 3058290207Sjkim pxor %xmm11,%xmm3 3059290207Sjkim movdqu %xmm2,(%rsi) 3060290207Sjkim pxor %xmm12,%xmm4 3061290207Sjkim movdqu %xmm3,16(%rsi) 3062290207Sjkim pxor %xmm3,%xmm3 3063290207Sjkim movdqa %xmm4,%xmm2 3064290207Sjkim pxor %xmm4,%xmm4 3065238405Sjkim leaq 32(%rsi),%rsi 3066238405Sjkim jmp .Lcbc_dec_tail_collected 3067238405Sjkim.align 16 3068238405Sjkim.Lcbc_dec_four: 3069290207Sjkim movaps %xmm5,%xmm14 3070238405Sjkim call _aesni_decrypt4 3071290207Sjkim pxor %xmm10,%xmm2 3072290207Sjkim movaps %xmm14,%xmm10 3073290207Sjkim pxor %xmm11,%xmm3 3074290207Sjkim movdqu %xmm2,(%rsi) 3075290207Sjkim pxor %xmm12,%xmm4 3076290207Sjkim movdqu %xmm3,16(%rsi) 3077290207Sjkim pxor %xmm3,%xmm3 3078290207Sjkim pxor %xmm13,%xmm5 3079290207Sjkim movdqu %xmm4,32(%rsi) 3080290207Sjkim pxor %xmm4,%xmm4 3081290207Sjkim movdqa %xmm5,%xmm2 3082290207Sjkim pxor %xmm5,%xmm5 3083238405Sjkim leaq 48(%rsi),%rsi 3084238405Sjkim jmp .Lcbc_dec_tail_collected 3085290207Sjkim 3086238405Sjkim.align 16 3087290207Sjkim.Lcbc_dec_clear_tail_collected: 3088290207Sjkim pxor %xmm3,%xmm3 3089290207Sjkim pxor %xmm4,%xmm4 3090290207Sjkim pxor %xmm5,%xmm5 3091290207Sjkim pxor %xmm6,%xmm6 3092290207Sjkim pxor %xmm7,%xmm7 3093290207Sjkim pxor %xmm8,%xmm8 3094290207Sjkim pxor %xmm9,%xmm9 3095238405Sjkim.Lcbc_dec_tail_collected: 3096290207Sjkim movups %xmm10,(%r8) 3097238405Sjkim andq $15,%rdx 3098238405Sjkim jnz .Lcbc_dec_tail_partial 3099238405Sjkim movups %xmm2,(%rsi) 3100290207Sjkim pxor %xmm2,%xmm2 3101238405Sjkim jmp .Lcbc_dec_ret 3102238405Sjkim.align 16 3103238405Sjkim.Lcbc_dec_tail_partial: 3104290207Sjkim movaps %xmm2,(%rsp) 3105290207Sjkim pxor %xmm2,%xmm2 3106238405Sjkim movq $16,%rcx 3107238405Sjkim movq %rsi,%rdi 3108238405Sjkim subq %rdx,%rcx 3109290207Sjkim leaq (%rsp),%rsi 3110290207Sjkim.long 0x9066A4F3 3111290207Sjkim movdqa %xmm2,(%rsp) 3112238405Sjkim 3113238405Sjkim.Lcbc_dec_ret: 3114290207Sjkim xorps %xmm0,%xmm0 3115290207Sjkim pxor %xmm1,%xmm1 3116290207Sjkim leaq (%rbp),%rsp 3117290207Sjkim popq %rbp 3118238405Sjkim.Lcbc_ret: 3119238405Sjkim .byte 0xf3,0xc3 3120238405Sjkim.size aesni_cbc_encrypt,.-aesni_cbc_encrypt 3121238405Sjkim.globl aesni_set_decrypt_key 3122238405Sjkim.type aesni_set_decrypt_key,@function 3123238405Sjkim.align 16 3124238405Sjkimaesni_set_decrypt_key: 3125290207Sjkim.byte 0x48,0x83,0xEC,0x08 3126238405Sjkim call __aesni_set_encrypt_key 3127238405Sjkim shll $4,%esi 3128238405Sjkim testl %eax,%eax 3129238405Sjkim jnz .Ldec_key_ret 3130238405Sjkim leaq 16(%rdx,%rsi,1),%rdi 3131238405Sjkim 3132238405Sjkim movups (%rdx),%xmm0 3133238405Sjkim movups (%rdi),%xmm1 3134238405Sjkim movups %xmm0,(%rdi) 3135238405Sjkim movups %xmm1,(%rdx) 3136238405Sjkim leaq 16(%rdx),%rdx 3137238405Sjkim leaq -16(%rdi),%rdi 3138238405Sjkim 3139238405Sjkim.Ldec_key_inverse: 3140238405Sjkim movups (%rdx),%xmm0 3141238405Sjkim movups (%rdi),%xmm1 3142238405Sjkim.byte 102,15,56,219,192 3143238405Sjkim.byte 102,15,56,219,201 3144238405Sjkim leaq 16(%rdx),%rdx 3145238405Sjkim leaq -16(%rdi),%rdi 3146238405Sjkim movups %xmm0,16(%rdi) 3147238405Sjkim movups %xmm1,-16(%rdx) 3148238405Sjkim cmpq %rdx,%rdi 3149238405Sjkim ja .Ldec_key_inverse 3150238405Sjkim 3151238405Sjkim movups (%rdx),%xmm0 3152238405Sjkim.byte 102,15,56,219,192 3153290207Sjkim pxor %xmm1,%xmm1 3154238405Sjkim movups %xmm0,(%rdi) 3155290207Sjkim pxor %xmm0,%xmm0 3156238405Sjkim.Ldec_key_ret: 3157238405Sjkim addq $8,%rsp 3158238405Sjkim .byte 0xf3,0xc3 3159238405Sjkim.LSEH_end_set_decrypt_key: 3160238405Sjkim.size aesni_set_decrypt_key,.-aesni_set_decrypt_key 3161238405Sjkim.globl aesni_set_encrypt_key 3162238405Sjkim.type aesni_set_encrypt_key,@function 3163238405Sjkim.align 16 3164238405Sjkimaesni_set_encrypt_key: 3165238405Sjkim__aesni_set_encrypt_key: 3166290207Sjkim.byte 0x48,0x83,0xEC,0x08 3167238405Sjkim movq $-1,%rax 3168238405Sjkim testq %rdi,%rdi 3169238405Sjkim jz .Lenc_key_ret 3170238405Sjkim testq %rdx,%rdx 3171238405Sjkim jz .Lenc_key_ret 3172238405Sjkim 3173290207Sjkim movl $268437504,%r10d 3174238405Sjkim movups (%rdi),%xmm0 3175238405Sjkim xorps %xmm4,%xmm4 3176290207Sjkim andl OPENSSL_ia32cap_P+4(%rip),%r10d 3177238405Sjkim leaq 16(%rdx),%rax 3178238405Sjkim cmpl $256,%esi 3179238405Sjkim je .L14rounds 3180238405Sjkim cmpl $192,%esi 3181238405Sjkim je .L12rounds 3182238405Sjkim cmpl $128,%esi 3183238405Sjkim jne .Lbad_keybits 3184238405Sjkim 3185238405Sjkim.L10rounds: 3186238405Sjkim movl $9,%esi 3187290207Sjkim cmpl $268435456,%r10d 3188290207Sjkim je .L10rounds_alt 3189290207Sjkim 3190238405Sjkim movups %xmm0,(%rdx) 3191238405Sjkim.byte 102,15,58,223,200,1 3192238405Sjkim call .Lkey_expansion_128_cold 3193238405Sjkim.byte 102,15,58,223,200,2 3194238405Sjkim call .Lkey_expansion_128 3195238405Sjkim.byte 102,15,58,223,200,4 3196238405Sjkim call .Lkey_expansion_128 3197238405Sjkim.byte 102,15,58,223,200,8 3198238405Sjkim call .Lkey_expansion_128 3199238405Sjkim.byte 102,15,58,223,200,16 3200238405Sjkim call .Lkey_expansion_128 3201238405Sjkim.byte 102,15,58,223,200,32 3202238405Sjkim call .Lkey_expansion_128 3203238405Sjkim.byte 102,15,58,223,200,64 3204238405Sjkim call .Lkey_expansion_128 3205238405Sjkim.byte 102,15,58,223,200,128 3206238405Sjkim call .Lkey_expansion_128 3207238405Sjkim.byte 102,15,58,223,200,27 3208238405Sjkim call .Lkey_expansion_128 3209238405Sjkim.byte 102,15,58,223,200,54 3210238405Sjkim call .Lkey_expansion_128 3211238405Sjkim movups %xmm0,(%rax) 3212238405Sjkim movl %esi,80(%rax) 3213238405Sjkim xorl %eax,%eax 3214238405Sjkim jmp .Lenc_key_ret 3215238405Sjkim 3216238405Sjkim.align 16 3217290207Sjkim.L10rounds_alt: 3218290207Sjkim movdqa .Lkey_rotate(%rip),%xmm5 3219290207Sjkim movl $8,%r10d 3220290207Sjkim movdqa .Lkey_rcon1(%rip),%xmm4 3221290207Sjkim movdqa %xmm0,%xmm2 3222290207Sjkim movdqu %xmm0,(%rdx) 3223290207Sjkim jmp .Loop_key128 3224290207Sjkim 3225290207Sjkim.align 16 3226290207Sjkim.Loop_key128: 3227290207Sjkim.byte 102,15,56,0,197 3228290207Sjkim.byte 102,15,56,221,196 3229290207Sjkim pslld $1,%xmm4 3230290207Sjkim leaq 16(%rax),%rax 3231290207Sjkim 3232290207Sjkim movdqa %xmm2,%xmm3 3233290207Sjkim pslldq $4,%xmm2 3234290207Sjkim pxor %xmm2,%xmm3 3235290207Sjkim pslldq $4,%xmm2 3236290207Sjkim pxor %xmm2,%xmm3 3237290207Sjkim pslldq $4,%xmm2 3238290207Sjkim pxor %xmm3,%xmm2 3239290207Sjkim 3240290207Sjkim pxor %xmm2,%xmm0 3241290207Sjkim movdqu %xmm0,-16(%rax) 3242290207Sjkim movdqa %xmm0,%xmm2 3243290207Sjkim 3244290207Sjkim decl %r10d 3245290207Sjkim jnz .Loop_key128 3246290207Sjkim 3247290207Sjkim movdqa .Lkey_rcon1b(%rip),%xmm4 3248290207Sjkim 3249290207Sjkim.byte 102,15,56,0,197 3250290207Sjkim.byte 102,15,56,221,196 3251290207Sjkim pslld $1,%xmm4 3252290207Sjkim 3253290207Sjkim movdqa %xmm2,%xmm3 3254290207Sjkim pslldq $4,%xmm2 3255290207Sjkim pxor %xmm2,%xmm3 3256290207Sjkim pslldq $4,%xmm2 3257290207Sjkim pxor %xmm2,%xmm3 3258290207Sjkim pslldq $4,%xmm2 3259290207Sjkim pxor %xmm3,%xmm2 3260290207Sjkim 3261290207Sjkim pxor %xmm2,%xmm0 3262290207Sjkim movdqu %xmm0,(%rax) 3263290207Sjkim 3264290207Sjkim movdqa %xmm0,%xmm2 3265290207Sjkim.byte 102,15,56,0,197 3266290207Sjkim.byte 102,15,56,221,196 3267290207Sjkim 3268290207Sjkim movdqa %xmm2,%xmm3 3269290207Sjkim pslldq $4,%xmm2 3270290207Sjkim pxor %xmm2,%xmm3 3271290207Sjkim pslldq $4,%xmm2 3272290207Sjkim pxor %xmm2,%xmm3 3273290207Sjkim pslldq $4,%xmm2 3274290207Sjkim pxor %xmm3,%xmm2 3275290207Sjkim 3276290207Sjkim pxor %xmm2,%xmm0 3277290207Sjkim movdqu %xmm0,16(%rax) 3278290207Sjkim 3279290207Sjkim movl %esi,96(%rax) 3280290207Sjkim xorl %eax,%eax 3281290207Sjkim jmp .Lenc_key_ret 3282290207Sjkim 3283290207Sjkim.align 16 3284238405Sjkim.L12rounds: 3285238405Sjkim movq 16(%rdi),%xmm2 3286238405Sjkim movl $11,%esi 3287290207Sjkim cmpl $268435456,%r10d 3288290207Sjkim je .L12rounds_alt 3289290207Sjkim 3290238405Sjkim movups %xmm0,(%rdx) 3291238405Sjkim.byte 102,15,58,223,202,1 3292238405Sjkim call .Lkey_expansion_192a_cold 3293238405Sjkim.byte 102,15,58,223,202,2 3294238405Sjkim call .Lkey_expansion_192b 3295238405Sjkim.byte 102,15,58,223,202,4 3296238405Sjkim call .Lkey_expansion_192a 3297238405Sjkim.byte 102,15,58,223,202,8 3298238405Sjkim call .Lkey_expansion_192b 3299238405Sjkim.byte 102,15,58,223,202,16 3300238405Sjkim call .Lkey_expansion_192a 3301238405Sjkim.byte 102,15,58,223,202,32 3302238405Sjkim call .Lkey_expansion_192b 3303238405Sjkim.byte 102,15,58,223,202,64 3304238405Sjkim call .Lkey_expansion_192a 3305238405Sjkim.byte 102,15,58,223,202,128 3306238405Sjkim call .Lkey_expansion_192b 3307238405Sjkim movups %xmm0,(%rax) 3308238405Sjkim movl %esi,48(%rax) 3309238405Sjkim xorq %rax,%rax 3310238405Sjkim jmp .Lenc_key_ret 3311238405Sjkim 3312238405Sjkim.align 16 3313290207Sjkim.L12rounds_alt: 3314290207Sjkim movdqa .Lkey_rotate192(%rip),%xmm5 3315290207Sjkim movdqa .Lkey_rcon1(%rip),%xmm4 3316290207Sjkim movl $8,%r10d 3317290207Sjkim movdqu %xmm0,(%rdx) 3318290207Sjkim jmp .Loop_key192 3319290207Sjkim 3320290207Sjkim.align 16 3321290207Sjkim.Loop_key192: 3322290207Sjkim movq %xmm2,0(%rax) 3323290207Sjkim movdqa %xmm2,%xmm1 3324290207Sjkim.byte 102,15,56,0,213 3325290207Sjkim.byte 102,15,56,221,212 3326290207Sjkim pslld $1,%xmm4 3327290207Sjkim leaq 24(%rax),%rax 3328290207Sjkim 3329290207Sjkim movdqa %xmm0,%xmm3 3330290207Sjkim pslldq $4,%xmm0 3331290207Sjkim pxor %xmm0,%xmm3 3332290207Sjkim pslldq $4,%xmm0 3333290207Sjkim pxor %xmm0,%xmm3 3334290207Sjkim pslldq $4,%xmm0 3335290207Sjkim pxor %xmm3,%xmm0 3336290207Sjkim 3337296279Sjkim pshufd $0xff,%xmm0,%xmm3 3338290207Sjkim pxor %xmm1,%xmm3 3339290207Sjkim pslldq $4,%xmm1 3340290207Sjkim pxor %xmm1,%xmm3 3341290207Sjkim 3342290207Sjkim pxor %xmm2,%xmm0 3343290207Sjkim pxor %xmm3,%xmm2 3344290207Sjkim movdqu %xmm0,-16(%rax) 3345290207Sjkim 3346290207Sjkim decl %r10d 3347290207Sjkim jnz .Loop_key192 3348290207Sjkim 3349290207Sjkim movl %esi,32(%rax) 3350290207Sjkim xorl %eax,%eax 3351290207Sjkim jmp .Lenc_key_ret 3352290207Sjkim 3353290207Sjkim.align 16 3354238405Sjkim.L14rounds: 3355238405Sjkim movups 16(%rdi),%xmm2 3356238405Sjkim movl $13,%esi 3357238405Sjkim leaq 16(%rax),%rax 3358290207Sjkim cmpl $268435456,%r10d 3359290207Sjkim je .L14rounds_alt 3360290207Sjkim 3361238405Sjkim movups %xmm0,(%rdx) 3362238405Sjkim movups %xmm2,16(%rdx) 3363238405Sjkim.byte 102,15,58,223,202,1 3364238405Sjkim call .Lkey_expansion_256a_cold 3365238405Sjkim.byte 102,15,58,223,200,1 3366238405Sjkim call .Lkey_expansion_256b 3367238405Sjkim.byte 102,15,58,223,202,2 3368238405Sjkim call .Lkey_expansion_256a 3369238405Sjkim.byte 102,15,58,223,200,2 3370238405Sjkim call .Lkey_expansion_256b 3371238405Sjkim.byte 102,15,58,223,202,4 3372238405Sjkim call .Lkey_expansion_256a 3373238405Sjkim.byte 102,15,58,223,200,4 3374238405Sjkim call .Lkey_expansion_256b 3375238405Sjkim.byte 102,15,58,223,202,8 3376238405Sjkim call .Lkey_expansion_256a 3377238405Sjkim.byte 102,15,58,223,200,8 3378238405Sjkim call .Lkey_expansion_256b 3379238405Sjkim.byte 102,15,58,223,202,16 3380238405Sjkim call .Lkey_expansion_256a 3381238405Sjkim.byte 102,15,58,223,200,16 3382238405Sjkim call .Lkey_expansion_256b 3383238405Sjkim.byte 102,15,58,223,202,32 3384238405Sjkim call .Lkey_expansion_256a 3385238405Sjkim.byte 102,15,58,223,200,32 3386238405Sjkim call .Lkey_expansion_256b 3387238405Sjkim.byte 102,15,58,223,202,64 3388238405Sjkim call .Lkey_expansion_256a 3389238405Sjkim movups %xmm0,(%rax) 3390238405Sjkim movl %esi,16(%rax) 3391238405Sjkim xorq %rax,%rax 3392238405Sjkim jmp .Lenc_key_ret 3393238405Sjkim 3394238405Sjkim.align 16 3395290207Sjkim.L14rounds_alt: 3396290207Sjkim movdqa .Lkey_rotate(%rip),%xmm5 3397290207Sjkim movdqa .Lkey_rcon1(%rip),%xmm4 3398290207Sjkim movl $7,%r10d 3399290207Sjkim movdqu %xmm0,0(%rdx) 3400290207Sjkim movdqa %xmm2,%xmm1 3401290207Sjkim movdqu %xmm2,16(%rdx) 3402290207Sjkim jmp .Loop_key256 3403290207Sjkim 3404290207Sjkim.align 16 3405290207Sjkim.Loop_key256: 3406290207Sjkim.byte 102,15,56,0,213 3407290207Sjkim.byte 102,15,56,221,212 3408290207Sjkim 3409290207Sjkim movdqa %xmm0,%xmm3 3410290207Sjkim pslldq $4,%xmm0 3411290207Sjkim pxor %xmm0,%xmm3 3412290207Sjkim pslldq $4,%xmm0 3413290207Sjkim pxor %xmm0,%xmm3 3414290207Sjkim pslldq $4,%xmm0 3415290207Sjkim pxor %xmm3,%xmm0 3416290207Sjkim pslld $1,%xmm4 3417290207Sjkim 3418290207Sjkim pxor %xmm2,%xmm0 3419290207Sjkim movdqu %xmm0,(%rax) 3420290207Sjkim 3421290207Sjkim decl %r10d 3422290207Sjkim jz .Ldone_key256 3423290207Sjkim 3424296279Sjkim pshufd $0xff,%xmm0,%xmm2 3425290207Sjkim pxor %xmm3,%xmm3 3426290207Sjkim.byte 102,15,56,221,211 3427290207Sjkim 3428290207Sjkim movdqa %xmm1,%xmm3 3429290207Sjkim pslldq $4,%xmm1 3430290207Sjkim pxor %xmm1,%xmm3 3431290207Sjkim pslldq $4,%xmm1 3432290207Sjkim pxor %xmm1,%xmm3 3433290207Sjkim pslldq $4,%xmm1 3434290207Sjkim pxor %xmm3,%xmm1 3435290207Sjkim 3436290207Sjkim pxor %xmm1,%xmm2 3437290207Sjkim movdqu %xmm2,16(%rax) 3438290207Sjkim leaq 32(%rax),%rax 3439290207Sjkim movdqa %xmm2,%xmm1 3440290207Sjkim 3441290207Sjkim jmp .Loop_key256 3442290207Sjkim 3443290207Sjkim.Ldone_key256: 3444290207Sjkim movl %esi,16(%rax) 3445290207Sjkim xorl %eax,%eax 3446290207Sjkim jmp .Lenc_key_ret 3447290207Sjkim 3448290207Sjkim.align 16 3449238405Sjkim.Lbad_keybits: 3450238405Sjkim movq $-2,%rax 3451238405Sjkim.Lenc_key_ret: 3452290207Sjkim pxor %xmm0,%xmm0 3453290207Sjkim pxor %xmm1,%xmm1 3454290207Sjkim pxor %xmm2,%xmm2 3455290207Sjkim pxor %xmm3,%xmm3 3456290207Sjkim pxor %xmm4,%xmm4 3457290207Sjkim pxor %xmm5,%xmm5 3458238405Sjkim addq $8,%rsp 3459238405Sjkim .byte 0xf3,0xc3 3460238405Sjkim.LSEH_end_set_encrypt_key: 3461238405Sjkim 3462238405Sjkim.align 16 3463238405Sjkim.Lkey_expansion_128: 3464238405Sjkim movups %xmm0,(%rax) 3465238405Sjkim leaq 16(%rax),%rax 3466238405Sjkim.Lkey_expansion_128_cold: 3467298998Sjkim shufps $16,%xmm0,%xmm4 3468238405Sjkim xorps %xmm4,%xmm0 3469298998Sjkim shufps $140,%xmm0,%xmm4 3470238405Sjkim xorps %xmm4,%xmm0 3471298998Sjkim shufps $255,%xmm1,%xmm1 3472238405Sjkim xorps %xmm1,%xmm0 3473238405Sjkim .byte 0xf3,0xc3 3474238405Sjkim 3475238405Sjkim.align 16 3476238405Sjkim.Lkey_expansion_192a: 3477238405Sjkim movups %xmm0,(%rax) 3478238405Sjkim leaq 16(%rax),%rax 3479238405Sjkim.Lkey_expansion_192a_cold: 3480238405Sjkim movaps %xmm2,%xmm5 3481238405Sjkim.Lkey_expansion_192b_warm: 3482298998Sjkim shufps $16,%xmm0,%xmm4 3483238405Sjkim movdqa %xmm2,%xmm3 3484238405Sjkim xorps %xmm4,%xmm0 3485298998Sjkim shufps $140,%xmm0,%xmm4 3486238405Sjkim pslldq $4,%xmm3 3487238405Sjkim xorps %xmm4,%xmm0 3488298998Sjkim pshufd $85,%xmm1,%xmm1 3489238405Sjkim pxor %xmm3,%xmm2 3490238405Sjkim pxor %xmm1,%xmm0 3491298998Sjkim pshufd $255,%xmm0,%xmm3 3492238405Sjkim pxor %xmm3,%xmm2 3493238405Sjkim .byte 0xf3,0xc3 3494238405Sjkim 3495238405Sjkim.align 16 3496238405Sjkim.Lkey_expansion_192b: 3497238405Sjkim movaps %xmm0,%xmm3 3498298998Sjkim shufps $68,%xmm0,%xmm5 3499238405Sjkim movups %xmm5,(%rax) 3500298998Sjkim shufps $78,%xmm2,%xmm3 3501238405Sjkim movups %xmm3,16(%rax) 3502238405Sjkim leaq 32(%rax),%rax 3503238405Sjkim jmp .Lkey_expansion_192b_warm 3504238405Sjkim 3505238405Sjkim.align 16 3506238405Sjkim.Lkey_expansion_256a: 3507238405Sjkim movups %xmm2,(%rax) 3508238405Sjkim leaq 16(%rax),%rax 3509238405Sjkim.Lkey_expansion_256a_cold: 3510298998Sjkim shufps $16,%xmm0,%xmm4 3511238405Sjkim xorps %xmm4,%xmm0 3512298998Sjkim shufps $140,%xmm0,%xmm4 3513238405Sjkim xorps %xmm4,%xmm0 3514298998Sjkim shufps $255,%xmm1,%xmm1 3515238405Sjkim xorps %xmm1,%xmm0 3516238405Sjkim .byte 0xf3,0xc3 3517238405Sjkim 3518238405Sjkim.align 16 3519238405Sjkim.Lkey_expansion_256b: 3520238405Sjkim movups %xmm0,(%rax) 3521238405Sjkim leaq 16(%rax),%rax 3522238405Sjkim 3523298998Sjkim shufps $16,%xmm2,%xmm4 3524238405Sjkim xorps %xmm4,%xmm2 3525298998Sjkim shufps $140,%xmm2,%xmm4 3526238405Sjkim xorps %xmm4,%xmm2 3527298998Sjkim shufps $170,%xmm1,%xmm1 3528238405Sjkim xorps %xmm1,%xmm2 3529238405Sjkim .byte 0xf3,0xc3 3530238405Sjkim.size aesni_set_encrypt_key,.-aesni_set_encrypt_key 3531238405Sjkim.size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key 3532238405Sjkim.align 64 3533238405Sjkim.Lbswap_mask: 3534238405Sjkim.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 3535238405Sjkim.Lincrement32: 3536238405Sjkim.long 6,6,6,0 3537238405Sjkim.Lincrement64: 3538238405Sjkim.long 1,0,0,0 3539238405Sjkim.Lxts_magic: 3540238405Sjkim.long 0x87,0,1,0 3541290207Sjkim.Lincrement1: 3542290207Sjkim.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 3543290207Sjkim.Lkey_rotate: 3544290207Sjkim.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d 3545290207Sjkim.Lkey_rotate192: 3546290207Sjkim.long 0x04070605,0x04070605,0x04070605,0x04070605 3547290207Sjkim.Lkey_rcon1: 3548290207Sjkim.long 1,1,1,1 3549290207Sjkim.Lkey_rcon1b: 3550290207Sjkim.long 0x1b,0x1b,0x1b,0x1b 3551238405Sjkim 3552238405Sjkim.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 3553238405Sjkim.align 64 3554