1238405Sjkim # $FreeBSD$ 2238405Sjkim.text 3238405Sjkim 4238405Sjkim.type _mul_1x1,@function 5238405Sjkim.align 16 6238405Sjkim_mul_1x1: 7238405Sjkim subq $128+8,%rsp 8238405Sjkim movq $-1,%r9 9238405Sjkim leaq (%rax,%rax,1),%rsi 10238405Sjkim shrq $3,%r9 11238405Sjkim leaq (,%rax,4),%rdi 12238405Sjkim andq %rax,%r9 13238405Sjkim leaq (,%rax,8),%r12 14238405Sjkim sarq $63,%rax 15238405Sjkim leaq (%r9,%r9,1),%r10 16238405Sjkim sarq $63,%rsi 17238405Sjkim leaq (,%r9,4),%r11 18238405Sjkim andq %rbp,%rax 19238405Sjkim sarq $63,%rdi 20238405Sjkim movq %rax,%rdx 21238405Sjkim shlq $63,%rax 22238405Sjkim andq %rbp,%rsi 23238405Sjkim shrq $1,%rdx 24238405Sjkim movq %rsi,%rcx 25238405Sjkim shlq $62,%rsi 26238405Sjkim andq %rbp,%rdi 27238405Sjkim shrq $2,%rcx 28238405Sjkim xorq %rsi,%rax 29238405Sjkim movq %rdi,%rbx 30238405Sjkim shlq $61,%rdi 31238405Sjkim xorq %rcx,%rdx 32238405Sjkim shrq $3,%rbx 33238405Sjkim xorq %rdi,%rax 34238405Sjkim xorq %rbx,%rdx 35238405Sjkim 36238405Sjkim movq %r9,%r13 37238405Sjkim movq $0,0(%rsp) 38238405Sjkim xorq %r10,%r13 39238405Sjkim movq %r9,8(%rsp) 40238405Sjkim movq %r11,%r14 41238405Sjkim movq %r10,16(%rsp) 42238405Sjkim xorq %r12,%r14 43238405Sjkim movq %r13,24(%rsp) 44238405Sjkim 45238405Sjkim xorq %r11,%r9 46238405Sjkim movq %r11,32(%rsp) 47238405Sjkim xorq %r11,%r10 48238405Sjkim movq %r9,40(%rsp) 49238405Sjkim xorq %r11,%r13 50238405Sjkim movq %r10,48(%rsp) 51238405Sjkim xorq %r14,%r9 52238405Sjkim movq %r13,56(%rsp) 53238405Sjkim xorq %r14,%r10 54238405Sjkim 55238405Sjkim movq %r12,64(%rsp) 56238405Sjkim xorq %r14,%r13 57238405Sjkim movq %r9,72(%rsp) 58238405Sjkim xorq %r11,%r9 59238405Sjkim movq %r10,80(%rsp) 60238405Sjkim xorq %r11,%r10 61238405Sjkim movq %r13,88(%rsp) 62238405Sjkim 63238405Sjkim xorq %r11,%r13 64238405Sjkim movq %r14,96(%rsp) 65238405Sjkim movq %r8,%rsi 66238405Sjkim movq %r9,104(%rsp) 67238405Sjkim andq %rbp,%rsi 68238405Sjkim movq %r10,112(%rsp) 69238405Sjkim shrq $4,%rbp 70238405Sjkim movq %r13,120(%rsp) 71238405Sjkim movq %r8,%rdi 72238405Sjkim andq %rbp,%rdi 73238405Sjkim shrq $4,%rbp 74238405Sjkim 75238405Sjkim movq (%rsp,%rsi,8),%xmm0 76238405Sjkim movq %r8,%rsi 77238405Sjkim andq %rbp,%rsi 78238405Sjkim shrq $4,%rbp 79238405Sjkim movq (%rsp,%rdi,8),%rcx 80238405Sjkim movq %r8,%rdi 81238405Sjkim movq %rcx,%rbx 82238405Sjkim shlq $4,%rcx 83238405Sjkim andq %rbp,%rdi 84238405Sjkim movq (%rsp,%rsi,8),%xmm1 85238405Sjkim shrq $60,%rbx 86238405Sjkim xorq %rcx,%rax 87238405Sjkim pslldq $1,%xmm1 88238405Sjkim movq %r8,%rsi 89238405Sjkim shrq $4,%rbp 90238405Sjkim xorq %rbx,%rdx 91238405Sjkim andq %rbp,%rsi 92238405Sjkim shrq $4,%rbp 93238405Sjkim pxor %xmm1,%xmm0 94238405Sjkim movq (%rsp,%rdi,8),%rcx 95238405Sjkim movq %r8,%rdi 96238405Sjkim movq %rcx,%rbx 97238405Sjkim shlq $12,%rcx 98238405Sjkim andq %rbp,%rdi 99238405Sjkim movq (%rsp,%rsi,8),%xmm1 100238405Sjkim shrq $52,%rbx 101238405Sjkim xorq %rcx,%rax 102238405Sjkim pslldq $2,%xmm1 103238405Sjkim movq %r8,%rsi 104238405Sjkim shrq $4,%rbp 105238405Sjkim xorq %rbx,%rdx 106238405Sjkim andq %rbp,%rsi 107238405Sjkim shrq $4,%rbp 108238405Sjkim pxor %xmm1,%xmm0 109238405Sjkim movq (%rsp,%rdi,8),%rcx 110238405Sjkim movq %r8,%rdi 111238405Sjkim movq %rcx,%rbx 112238405Sjkim shlq $20,%rcx 113238405Sjkim andq %rbp,%rdi 114238405Sjkim movq (%rsp,%rsi,8),%xmm1 115238405Sjkim shrq $44,%rbx 116238405Sjkim xorq %rcx,%rax 117238405Sjkim pslldq $3,%xmm1 118238405Sjkim movq %r8,%rsi 119238405Sjkim shrq $4,%rbp 120238405Sjkim xorq %rbx,%rdx 121238405Sjkim andq %rbp,%rsi 122238405Sjkim shrq $4,%rbp 123238405Sjkim pxor %xmm1,%xmm0 124238405Sjkim movq (%rsp,%rdi,8),%rcx 125238405Sjkim movq %r8,%rdi 126238405Sjkim movq %rcx,%rbx 127238405Sjkim shlq $28,%rcx 128238405Sjkim andq %rbp,%rdi 129238405Sjkim movq (%rsp,%rsi,8),%xmm1 130238405Sjkim shrq $36,%rbx 131238405Sjkim xorq %rcx,%rax 132238405Sjkim pslldq $4,%xmm1 133238405Sjkim movq %r8,%rsi 134238405Sjkim shrq $4,%rbp 135238405Sjkim xorq %rbx,%rdx 136238405Sjkim andq %rbp,%rsi 137238405Sjkim shrq $4,%rbp 138238405Sjkim pxor %xmm1,%xmm0 139238405Sjkim movq (%rsp,%rdi,8),%rcx 140238405Sjkim movq %r8,%rdi 141238405Sjkim movq %rcx,%rbx 142238405Sjkim shlq $36,%rcx 143238405Sjkim andq %rbp,%rdi 144238405Sjkim movq (%rsp,%rsi,8),%xmm1 145238405Sjkim shrq $28,%rbx 146238405Sjkim xorq %rcx,%rax 147238405Sjkim pslldq $5,%xmm1 148238405Sjkim movq %r8,%rsi 149238405Sjkim shrq $4,%rbp 150238405Sjkim xorq %rbx,%rdx 151238405Sjkim andq %rbp,%rsi 152238405Sjkim shrq $4,%rbp 153238405Sjkim pxor %xmm1,%xmm0 154238405Sjkim movq (%rsp,%rdi,8),%rcx 155238405Sjkim movq %r8,%rdi 156238405Sjkim movq %rcx,%rbx 157238405Sjkim shlq $44,%rcx 158238405Sjkim andq %rbp,%rdi 159238405Sjkim movq (%rsp,%rsi,8),%xmm1 160238405Sjkim shrq $20,%rbx 161238405Sjkim xorq %rcx,%rax 162238405Sjkim pslldq $6,%xmm1 163238405Sjkim movq %r8,%rsi 164238405Sjkim shrq $4,%rbp 165238405Sjkim xorq %rbx,%rdx 166238405Sjkim andq %rbp,%rsi 167238405Sjkim shrq $4,%rbp 168238405Sjkim pxor %xmm1,%xmm0 169238405Sjkim movq (%rsp,%rdi,8),%rcx 170238405Sjkim movq %r8,%rdi 171238405Sjkim movq %rcx,%rbx 172238405Sjkim shlq $52,%rcx 173238405Sjkim andq %rbp,%rdi 174238405Sjkim movq (%rsp,%rsi,8),%xmm1 175238405Sjkim shrq $12,%rbx 176238405Sjkim xorq %rcx,%rax 177238405Sjkim pslldq $7,%xmm1 178238405Sjkim movq %r8,%rsi 179238405Sjkim shrq $4,%rbp 180238405Sjkim xorq %rbx,%rdx 181238405Sjkim andq %rbp,%rsi 182238405Sjkim shrq $4,%rbp 183238405Sjkim pxor %xmm1,%xmm0 184238405Sjkim movq (%rsp,%rdi,8),%rcx 185238405Sjkim movq %rcx,%rbx 186238405Sjkim shlq $60,%rcx 187238405Sjkim.byte 102,72,15,126,198 188238405Sjkim shrq $4,%rbx 189238405Sjkim xorq %rcx,%rax 190238405Sjkim psrldq $8,%xmm0 191238405Sjkim xorq %rbx,%rdx 192238405Sjkim.byte 102,72,15,126,199 193238405Sjkim xorq %rsi,%rax 194238405Sjkim xorq %rdi,%rdx 195238405Sjkim 196238405Sjkim addq $128+8,%rsp 197238405Sjkim .byte 0xf3,0xc3 198238405Sjkim.Lend_mul_1x1: 199238405Sjkim.size _mul_1x1,.-_mul_1x1 200238405Sjkim 201238405Sjkim.globl bn_GF2m_mul_2x2 202238405Sjkim.type bn_GF2m_mul_2x2,@function 203238405Sjkim.align 16 204238405Sjkimbn_GF2m_mul_2x2: 205238405Sjkim movq OPENSSL_ia32cap_P(%rip),%rax 206238405Sjkim btq $33,%rax 207238405Sjkim jnc .Lvanilla_mul_2x2 208238405Sjkim 209238405Sjkim.byte 102,72,15,110,198 210238405Sjkim.byte 102,72,15,110,201 211238405Sjkim.byte 102,72,15,110,210 212238405Sjkim.byte 102,73,15,110,216 213238405Sjkim movdqa %xmm0,%xmm4 214238405Sjkim movdqa %xmm1,%xmm5 215238405Sjkim.byte 102,15,58,68,193,0 216238405Sjkim pxor %xmm2,%xmm4 217238405Sjkim pxor %xmm3,%xmm5 218238405Sjkim.byte 102,15,58,68,211,0 219238405Sjkim.byte 102,15,58,68,229,0 220238405Sjkim xorps %xmm0,%xmm4 221238405Sjkim xorps %xmm2,%xmm4 222238405Sjkim movdqa %xmm4,%xmm5 223238405Sjkim pslldq $8,%xmm4 224238405Sjkim psrldq $8,%xmm5 225238405Sjkim pxor %xmm4,%xmm2 226238405Sjkim pxor %xmm5,%xmm0 227238405Sjkim movdqu %xmm2,0(%rdi) 228238405Sjkim movdqu %xmm0,16(%rdi) 229238405Sjkim .byte 0xf3,0xc3 230238405Sjkim 231238405Sjkim.align 16 232238405Sjkim.Lvanilla_mul_2x2: 233238405Sjkim leaq -136(%rsp),%rsp 234238405Sjkim movq %r14,80(%rsp) 235238405Sjkim movq %r13,88(%rsp) 236238405Sjkim movq %r12,96(%rsp) 237238405Sjkim movq %rbp,104(%rsp) 238238405Sjkim movq %rbx,112(%rsp) 239238405Sjkim.Lbody_mul_2x2: 240238405Sjkim movq %rdi,32(%rsp) 241238405Sjkim movq %rsi,40(%rsp) 242238405Sjkim movq %rdx,48(%rsp) 243238405Sjkim movq %rcx,56(%rsp) 244238405Sjkim movq %r8,64(%rsp) 245238405Sjkim 246238405Sjkim movq $15,%r8 247238405Sjkim movq %rsi,%rax 248238405Sjkim movq %rcx,%rbp 249238405Sjkim call _mul_1x1 250238405Sjkim movq %rax,16(%rsp) 251238405Sjkim movq %rdx,24(%rsp) 252238405Sjkim 253238405Sjkim movq 48(%rsp),%rax 254238405Sjkim movq 64(%rsp),%rbp 255238405Sjkim call _mul_1x1 256238405Sjkim movq %rax,0(%rsp) 257238405Sjkim movq %rdx,8(%rsp) 258238405Sjkim 259238405Sjkim movq 40(%rsp),%rax 260238405Sjkim movq 56(%rsp),%rbp 261238405Sjkim xorq 48(%rsp),%rax 262238405Sjkim xorq 64(%rsp),%rbp 263238405Sjkim call _mul_1x1 264238405Sjkim movq 0(%rsp),%rbx 265238405Sjkim movq 8(%rsp),%rcx 266238405Sjkim movq 16(%rsp),%rdi 267238405Sjkim movq 24(%rsp),%rsi 268238405Sjkim movq 32(%rsp),%rbp 269238405Sjkim 270238405Sjkim xorq %rdx,%rax 271238405Sjkim xorq %rcx,%rdx 272238405Sjkim xorq %rbx,%rax 273238405Sjkim movq %rbx,0(%rbp) 274238405Sjkim xorq %rdi,%rdx 275238405Sjkim movq %rsi,24(%rbp) 276238405Sjkim xorq %rsi,%rax 277238405Sjkim xorq %rsi,%rdx 278238405Sjkim xorq %rdx,%rax 279238405Sjkim movq %rdx,16(%rbp) 280238405Sjkim movq %rax,8(%rbp) 281238405Sjkim 282238405Sjkim movq 80(%rsp),%r14 283238405Sjkim movq 88(%rsp),%r13 284238405Sjkim movq 96(%rsp),%r12 285238405Sjkim movq 104(%rsp),%rbp 286238405Sjkim movq 112(%rsp),%rbx 287238405Sjkim leaq 136(%rsp),%rsp 288238405Sjkim .byte 0xf3,0xc3 289238405Sjkim.Lend_mul_2x2: 290238405Sjkim.size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2 291238405Sjkim.byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,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 292238405Sjkim.align 16 293