1238405Sjkim # $FreeBSD$ 2238405Sjkim.file "x86-gf2m.s" 3238405Sjkim.text 4238405Sjkim.type _mul_1x1_mmx,@function 5238405Sjkim.align 16 6238405Sjkim_mul_1x1_mmx: 7238405Sjkim subl $36,%esp 8238405Sjkim movl %eax,%ecx 9238405Sjkim leal (%eax,%eax,1),%edx 10238405Sjkim andl $1073741823,%ecx 11238405Sjkim leal (%edx,%edx,1),%ebp 12238405Sjkim movl $0,(%esp) 13238405Sjkim andl $2147483647,%edx 14238405Sjkim movd %eax,%mm2 15238405Sjkim movd %ebx,%mm3 16238405Sjkim movl %ecx,4(%esp) 17238405Sjkim xorl %edx,%ecx 18238405Sjkim pxor %mm5,%mm5 19238405Sjkim pxor %mm4,%mm4 20238405Sjkim movl %edx,8(%esp) 21238405Sjkim xorl %ebp,%edx 22238405Sjkim movl %ecx,12(%esp) 23238405Sjkim pcmpgtd %mm2,%mm5 24238405Sjkim paddd %mm2,%mm2 25238405Sjkim xorl %edx,%ecx 26238405Sjkim movl %ebp,16(%esp) 27238405Sjkim xorl %edx,%ebp 28238405Sjkim pand %mm3,%mm5 29238405Sjkim pcmpgtd %mm2,%mm4 30238405Sjkim movl %ecx,20(%esp) 31238405Sjkim xorl %ecx,%ebp 32238405Sjkim psllq $31,%mm5 33238405Sjkim pand %mm3,%mm4 34238405Sjkim movl %edx,24(%esp) 35238405Sjkim movl $7,%esi 36238405Sjkim movl %ebp,28(%esp) 37238405Sjkim movl %esi,%ebp 38238405Sjkim andl %ebx,%esi 39238405Sjkim shrl $3,%ebx 40238405Sjkim movl %ebp,%edi 41238405Sjkim psllq $30,%mm4 42238405Sjkim andl %ebx,%edi 43238405Sjkim shrl $3,%ebx 44238405Sjkim movd (%esp,%esi,4),%mm0 45238405Sjkim movl %ebp,%esi 46238405Sjkim andl %ebx,%esi 47238405Sjkim shrl $3,%ebx 48238405Sjkim movd (%esp,%edi,4),%mm2 49238405Sjkim movl %ebp,%edi 50238405Sjkim psllq $3,%mm2 51238405Sjkim andl %ebx,%edi 52238405Sjkim shrl $3,%ebx 53238405Sjkim pxor %mm2,%mm0 54238405Sjkim movd (%esp,%esi,4),%mm1 55238405Sjkim movl %ebp,%esi 56238405Sjkim psllq $6,%mm1 57238405Sjkim andl %ebx,%esi 58238405Sjkim shrl $3,%ebx 59238405Sjkim pxor %mm1,%mm0 60238405Sjkim movd (%esp,%edi,4),%mm2 61238405Sjkim movl %ebp,%edi 62238405Sjkim psllq $9,%mm2 63238405Sjkim andl %ebx,%edi 64238405Sjkim shrl $3,%ebx 65238405Sjkim pxor %mm2,%mm0 66238405Sjkim movd (%esp,%esi,4),%mm1 67238405Sjkim movl %ebp,%esi 68238405Sjkim psllq $12,%mm1 69238405Sjkim andl %ebx,%esi 70238405Sjkim shrl $3,%ebx 71238405Sjkim pxor %mm1,%mm0 72238405Sjkim movd (%esp,%edi,4),%mm2 73238405Sjkim movl %ebp,%edi 74238405Sjkim psllq $15,%mm2 75238405Sjkim andl %ebx,%edi 76238405Sjkim shrl $3,%ebx 77238405Sjkim pxor %mm2,%mm0 78238405Sjkim movd (%esp,%esi,4),%mm1 79238405Sjkim movl %ebp,%esi 80238405Sjkim psllq $18,%mm1 81238405Sjkim andl %ebx,%esi 82238405Sjkim shrl $3,%ebx 83238405Sjkim pxor %mm1,%mm0 84238405Sjkim movd (%esp,%edi,4),%mm2 85238405Sjkim movl %ebp,%edi 86238405Sjkim psllq $21,%mm2 87238405Sjkim andl %ebx,%edi 88238405Sjkim shrl $3,%ebx 89238405Sjkim pxor %mm2,%mm0 90238405Sjkim movd (%esp,%esi,4),%mm1 91238405Sjkim movl %ebp,%esi 92238405Sjkim psllq $24,%mm1 93238405Sjkim andl %ebx,%esi 94238405Sjkim shrl $3,%ebx 95238405Sjkim pxor %mm1,%mm0 96238405Sjkim movd (%esp,%edi,4),%mm2 97238405Sjkim pxor %mm4,%mm0 98238405Sjkim psllq $27,%mm2 99238405Sjkim pxor %mm2,%mm0 100238405Sjkim movd (%esp,%esi,4),%mm1 101238405Sjkim pxor %mm5,%mm0 102238405Sjkim psllq $30,%mm1 103238405Sjkim addl $36,%esp 104238405Sjkim pxor %mm1,%mm0 105238405Sjkim ret 106238405Sjkim.size _mul_1x1_mmx,.-_mul_1x1_mmx 107238405Sjkim.type _mul_1x1_ialu,@function 108238405Sjkim.align 16 109238405Sjkim_mul_1x1_ialu: 110238405Sjkim subl $36,%esp 111238405Sjkim movl %eax,%ecx 112238405Sjkim leal (%eax,%eax,1),%edx 113238405Sjkim leal (,%eax,4),%ebp 114238405Sjkim andl $1073741823,%ecx 115238405Sjkim leal (%eax,%eax,1),%edi 116238405Sjkim sarl $31,%eax 117238405Sjkim movl $0,(%esp) 118238405Sjkim andl $2147483647,%edx 119238405Sjkim movl %ecx,4(%esp) 120238405Sjkim xorl %edx,%ecx 121238405Sjkim movl %edx,8(%esp) 122238405Sjkim xorl %ebp,%edx 123238405Sjkim movl %ecx,12(%esp) 124238405Sjkim xorl %edx,%ecx 125238405Sjkim movl %ebp,16(%esp) 126238405Sjkim xorl %edx,%ebp 127238405Sjkim movl %ecx,20(%esp) 128238405Sjkim xorl %ecx,%ebp 129238405Sjkim sarl $31,%edi 130238405Sjkim andl %ebx,%eax 131238405Sjkim movl %edx,24(%esp) 132238405Sjkim andl %ebx,%edi 133238405Sjkim movl %ebp,28(%esp) 134238405Sjkim movl %eax,%edx 135238405Sjkim shll $31,%eax 136238405Sjkim movl %edi,%ecx 137238405Sjkim shrl $1,%edx 138238405Sjkim movl $7,%esi 139238405Sjkim shll $30,%edi 140238405Sjkim andl %ebx,%esi 141238405Sjkim shrl $2,%ecx 142238405Sjkim xorl %edi,%eax 143238405Sjkim shrl $3,%ebx 144238405Sjkim movl $7,%edi 145238405Sjkim andl %ebx,%edi 146238405Sjkim shrl $3,%ebx 147238405Sjkim xorl %ecx,%edx 148238405Sjkim xorl (%esp,%esi,4),%eax 149238405Sjkim movl $7,%esi 150238405Sjkim andl %ebx,%esi 151238405Sjkim shrl $3,%ebx 152238405Sjkim movl (%esp,%edi,4),%ebp 153238405Sjkim movl $7,%edi 154238405Sjkim movl %ebp,%ecx 155238405Sjkim shll $3,%ebp 156238405Sjkim andl %ebx,%edi 157238405Sjkim shrl $29,%ecx 158238405Sjkim xorl %ebp,%eax 159238405Sjkim shrl $3,%ebx 160238405Sjkim xorl %ecx,%edx 161238405Sjkim movl (%esp,%esi,4),%ecx 162238405Sjkim movl $7,%esi 163238405Sjkim movl %ecx,%ebp 164238405Sjkim shll $6,%ecx 165238405Sjkim andl %ebx,%esi 166238405Sjkim shrl $26,%ebp 167238405Sjkim xorl %ecx,%eax 168238405Sjkim shrl $3,%ebx 169238405Sjkim xorl %ebp,%edx 170238405Sjkim movl (%esp,%edi,4),%ebp 171238405Sjkim movl $7,%edi 172238405Sjkim movl %ebp,%ecx 173238405Sjkim shll $9,%ebp 174238405Sjkim andl %ebx,%edi 175238405Sjkim shrl $23,%ecx 176238405Sjkim xorl %ebp,%eax 177238405Sjkim shrl $3,%ebx 178238405Sjkim xorl %ecx,%edx 179238405Sjkim movl (%esp,%esi,4),%ecx 180238405Sjkim movl $7,%esi 181238405Sjkim movl %ecx,%ebp 182238405Sjkim shll $12,%ecx 183238405Sjkim andl %ebx,%esi 184238405Sjkim shrl $20,%ebp 185238405Sjkim xorl %ecx,%eax 186238405Sjkim shrl $3,%ebx 187238405Sjkim xorl %ebp,%edx 188238405Sjkim movl (%esp,%edi,4),%ebp 189238405Sjkim movl $7,%edi 190238405Sjkim movl %ebp,%ecx 191238405Sjkim shll $15,%ebp 192238405Sjkim andl %ebx,%edi 193238405Sjkim shrl $17,%ecx 194238405Sjkim xorl %ebp,%eax 195238405Sjkim shrl $3,%ebx 196238405Sjkim xorl %ecx,%edx 197238405Sjkim movl (%esp,%esi,4),%ecx 198238405Sjkim movl $7,%esi 199238405Sjkim movl %ecx,%ebp 200238405Sjkim shll $18,%ecx 201238405Sjkim andl %ebx,%esi 202238405Sjkim shrl $14,%ebp 203238405Sjkim xorl %ecx,%eax 204238405Sjkim shrl $3,%ebx 205238405Sjkim xorl %ebp,%edx 206238405Sjkim movl (%esp,%edi,4),%ebp 207238405Sjkim movl $7,%edi 208238405Sjkim movl %ebp,%ecx 209238405Sjkim shll $21,%ebp 210238405Sjkim andl %ebx,%edi 211238405Sjkim shrl $11,%ecx 212238405Sjkim xorl %ebp,%eax 213238405Sjkim shrl $3,%ebx 214238405Sjkim xorl %ecx,%edx 215238405Sjkim movl (%esp,%esi,4),%ecx 216238405Sjkim movl $7,%esi 217238405Sjkim movl %ecx,%ebp 218238405Sjkim shll $24,%ecx 219238405Sjkim andl %ebx,%esi 220238405Sjkim shrl $8,%ebp 221238405Sjkim xorl %ecx,%eax 222238405Sjkim shrl $3,%ebx 223238405Sjkim xorl %ebp,%edx 224238405Sjkim movl (%esp,%edi,4),%ebp 225238405Sjkim movl %ebp,%ecx 226238405Sjkim shll $27,%ebp 227238405Sjkim movl (%esp,%esi,4),%edi 228238405Sjkim shrl $5,%ecx 229238405Sjkim movl %edi,%esi 230238405Sjkim xorl %ebp,%eax 231238405Sjkim shll $30,%edi 232238405Sjkim xorl %ecx,%edx 233238405Sjkim shrl $2,%esi 234238405Sjkim xorl %edi,%eax 235238405Sjkim xorl %esi,%edx 236238405Sjkim addl $36,%esp 237238405Sjkim ret 238238405Sjkim.size _mul_1x1_ialu,.-_mul_1x1_ialu 239238405Sjkim.globl bn_GF2m_mul_2x2 240238405Sjkim.type bn_GF2m_mul_2x2,@function 241238405Sjkim.align 16 242238405Sjkimbn_GF2m_mul_2x2: 243238405Sjkim.L_bn_GF2m_mul_2x2_begin: 244238405Sjkim leal OPENSSL_ia32cap_P,%edx 245238405Sjkim movl (%edx),%eax 246238405Sjkim movl 4(%edx),%edx 247238405Sjkim testl $8388608,%eax 248238405Sjkim jz .L000ialu 249238405Sjkim testl $16777216,%eax 250238405Sjkim jz .L001mmx 251238405Sjkim testl $2,%edx 252238405Sjkim jz .L001mmx 253238405Sjkim movups 8(%esp),%xmm0 254238405Sjkim shufps $177,%xmm0,%xmm0 255238405Sjkim.byte 102,15,58,68,192,1 256238405Sjkim movl 4(%esp),%eax 257238405Sjkim movups %xmm0,(%eax) 258238405Sjkim ret 259238405Sjkim.align 16 260238405Sjkim.L001mmx: 261238405Sjkim pushl %ebp 262238405Sjkim pushl %ebx 263238405Sjkim pushl %esi 264238405Sjkim pushl %edi 265238405Sjkim movl 24(%esp),%eax 266238405Sjkim movl 32(%esp),%ebx 267238405Sjkim call _mul_1x1_mmx 268238405Sjkim movq %mm0,%mm7 269238405Sjkim movl 28(%esp),%eax 270238405Sjkim movl 36(%esp),%ebx 271238405Sjkim call _mul_1x1_mmx 272238405Sjkim movq %mm0,%mm6 273238405Sjkim movl 24(%esp),%eax 274238405Sjkim movl 32(%esp),%ebx 275238405Sjkim xorl 28(%esp),%eax 276238405Sjkim xorl 36(%esp),%ebx 277238405Sjkim call _mul_1x1_mmx 278238405Sjkim pxor %mm7,%mm0 279238405Sjkim movl 20(%esp),%eax 280238405Sjkim pxor %mm6,%mm0 281238405Sjkim movq %mm0,%mm2 282238405Sjkim psllq $32,%mm0 283238405Sjkim popl %edi 284238405Sjkim psrlq $32,%mm2 285238405Sjkim popl %esi 286238405Sjkim pxor %mm6,%mm0 287238405Sjkim popl %ebx 288238405Sjkim pxor %mm7,%mm2 289238405Sjkim movq %mm0,(%eax) 290238405Sjkim popl %ebp 291238405Sjkim movq %mm2,8(%eax) 292238405Sjkim emms 293238405Sjkim ret 294238405Sjkim.align 16 295238405Sjkim.L000ialu: 296238405Sjkim pushl %ebp 297238405Sjkim pushl %ebx 298238405Sjkim pushl %esi 299238405Sjkim pushl %edi 300238405Sjkim subl $20,%esp 301238405Sjkim movl 44(%esp),%eax 302238405Sjkim movl 52(%esp),%ebx 303238405Sjkim call _mul_1x1_ialu 304238405Sjkim movl %eax,8(%esp) 305238405Sjkim movl %edx,12(%esp) 306238405Sjkim movl 48(%esp),%eax 307238405Sjkim movl 56(%esp),%ebx 308238405Sjkim call _mul_1x1_ialu 309238405Sjkim movl %eax,(%esp) 310238405Sjkim movl %edx,4(%esp) 311238405Sjkim movl 44(%esp),%eax 312238405Sjkim movl 52(%esp),%ebx 313238405Sjkim xorl 48(%esp),%eax 314238405Sjkim xorl 56(%esp),%ebx 315238405Sjkim call _mul_1x1_ialu 316238405Sjkim movl 40(%esp),%ebp 317238405Sjkim movl (%esp),%ebx 318238405Sjkim movl 4(%esp),%ecx 319238405Sjkim movl 8(%esp),%edi 320238405Sjkim movl 12(%esp),%esi 321238405Sjkim xorl %edx,%eax 322238405Sjkim xorl %ecx,%edx 323238405Sjkim xorl %ebx,%eax 324238405Sjkim movl %ebx,(%ebp) 325238405Sjkim xorl %edi,%edx 326238405Sjkim movl %esi,12(%ebp) 327238405Sjkim xorl %esi,%eax 328238405Sjkim addl $20,%esp 329238405Sjkim xorl %esi,%edx 330238405Sjkim popl %edi 331238405Sjkim xorl %edx,%eax 332238405Sjkim popl %esi 333238405Sjkim movl %edx,8(%ebp) 334238405Sjkim popl %ebx 335238405Sjkim movl %eax,4(%ebp) 336238405Sjkim popl %ebp 337238405Sjkim ret 338238405Sjkim.size bn_GF2m_mul_2x2,.-.L_bn_GF2m_mul_2x2_begin 339238405Sjkim.byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 340238405Sjkim.byte 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32 341238405Sjkim.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 342238405Sjkim.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 343238405Sjkim.byte 62,0 344238405Sjkim.comm OPENSSL_ia32cap_P,8,4 345