// File: /workspace/github_c_makefile_star2_O3/olcaytaner[P]Isell/libmath.c
// Function: binom
int binom(int m, int n)
{
 if (n == 0 || m == n)
   return 1;
 else
   return factorial(m) / (factorial(n) * factorial(m - n));
}

// Assembly:
testl %esi, %esi
sete %al
movl %edi, %edx
subl %esi, %edx
sete %cl
orb %al, %cl
movl $0x1, %eax
jne 0x39f7e
movl $0x1, %ecx
cmpl $0x2, %edi
jl 0x39dd5
leal 0x2(%rdi), %eax
andl $-0x4, %eax
leal -0x2(%rdi), %r8d
movd %r8d, %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa 0x6fc95(%rip), %xmm3    # 0xa99c0
movdqa 0x6fc9d(%rip), %xmm1    # 0xa99d0
movl $0x4, %r8d
movdqa 0x6fc9f(%rip), %xmm4    # 0xa99e0
movdqa %xmm1, %xmm2
movdqa %xmm3, %xmm1
pmuludq %xmm2, %xmm1
pshufd $0xe8, %xmm1, %xmm1     # xmm1 = xmm1[0,2,2,3]
pshufd $0xf5, %xmm2, %xmm5     # xmm5 = xmm2[1,1,3,3]
pshufd $0xf5, %xmm3, %xmm6     # xmm6 = xmm3[1,1,3,3]
pmuludq %xmm5, %xmm6
pshufd $0xe8, %xmm6, %xmm5     # xmm5 = xmm6[0,2,2,3]
punpckldq %xmm5, %xmm1    # xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]
paddd %xmm4, %xmm3
movl %r8d, %r9d
addl $-0x4, %r8d
addl %eax, %r9d
addl $-0x4, %r9d
cmpl $0x4, %r9d
jne 0x39d41
negl %r8d
movd %r8d, %xmm3
pshufd $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
por 0x6fc5a(%rip), %xmm3    # 0xa99f0
movdqa 0x6c6b2(%rip), %xmm4    # 0xa6450
pxor %xmm4, %xmm0
pxor %xmm4, %xmm3
pcmpgtd %xmm0, %xmm3
pand %xmm3, %xmm2
pandn %xmm1, %xmm3
por %xmm2, %xmm3
pshufd $0xee, %xmm3, %xmm0     # xmm0 = xmm3[2,3,2,3]
pshufd $0xff, %xmm3, %xmm1     # xmm1 = xmm3[3,3,3,3]
pshufd $0xf5, %xmm3, %xmm2     # xmm2 = xmm3[1,1,3,3]
pmuludq %xmm1, %xmm2
pmuludq %xmm3, %xmm0
pmuludq %xmm2, %xmm0
movd %xmm0, %eax
cmpl $0x2, %esi
jl 0x39ea4
leal 0x2(%rsi), %ecx
andl $-0x4, %ecx
leal -0x2(%rsi), %r8d
movd %r8d, %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa 0x6fbc6(%rip), %xmm3    # 0xa99c0
movdqa 0x6fbce(%rip), %xmm1    # 0xa99d0
movl $0x4, %r8d
movdqa 0x6fbd0(%rip), %xmm4    # 0xa99e0
movdqa %xmm1, %xmm2
movdqa %xmm3, %xmm1
pmuludq %xmm2, %xmm1
pshufd $0xe8, %xmm1, %xmm1     # xmm1 = xmm1[0,2,2,3]
pshufd $0xf5, %xmm2, %xmm5     # xmm5 = xmm2[1,1,3,3]
pshufd $0xf5, %xmm3, %xmm6     # xmm6 = xmm3[1,1,3,3]
pmuludq %xmm5, %xmm6
pshufd $0xe8, %xmm6, %xmm5     # xmm5 = xmm6[0,2,2,3]
punpckldq %xmm5, %xmm1    # xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]
paddd %xmm4, %xmm3
movl %r8d, %r9d
addl $-0x4, %r8d
addl %ecx, %r9d
addl $-0x4, %r9d
cmpl $0x4, %r9d
jne 0x39e10
negl %r8d
movd %r8d, %xmm3
pshufd $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
por 0x6fb8b(%rip), %xmm3    # 0xa99f0
movdqa 0x6c5e3(%rip), %xmm4    # 0xa6450
pxor %xmm4, %xmm0
pxor %xmm4, %xmm3
pcmpgtd %xmm0, %xmm3
pand %xmm3, %xmm2
pandn %xmm1, %xmm3
por %xmm2, %xmm3
pshufd $0xee, %xmm3, %xmm0     # xmm0 = xmm3[2,3,2,3]
pshufd $0xff, %xmm3, %xmm1     # xmm1 = xmm3[3,3,3,3]
pshufd $0xf5, %xmm3, %xmm2     # xmm2 = xmm3[1,1,3,3]
pmuludq %xmm1, %xmm2
pmuludq %xmm3, %xmm0
pmuludq %xmm2, %xmm0
movd %xmm0, %ecx
movl $0x1, %r8d
cmpl $0x2, %edx
jl 0x39f76
notl %esi
leal (%rsi,%rdi), %edx
addl $0x3, %edx
andl $-0x4, %edx
addl %edi, %esi
decl %esi
movd %esi, %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa 0x6faed(%rip), %xmm3    # 0xa99c0
movdqa 0x6faf5(%rip), %xmm1    # 0xa99d0
movl $0x4, %esi
movdqa 0x6faf8(%rip), %xmm4    # 0xa99e0
movdqa %xmm1, %xmm2
movdqa %xmm3, %xmm1
pmuludq %xmm2, %xmm1
pshufd $0xe8, %xmm1, %xmm1     # xmm1 = xmm1[0,2,2,3]
pshufd $0xf5, %xmm2, %xmm5     # xmm5 = xmm2[1,1,3,3]
pshufd $0xf5, %xmm3, %xmm6     # xmm6 = xmm3[1,1,3,3]
pmuludq %xmm5, %xmm6
pshufd $0xe8, %xmm6, %xmm5     # xmm5 = xmm6[0,2,2,3]
punpckldq %xmm5, %xmm1    # xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]
paddd %xmm4, %xmm3
movl %esi, %edi
addl $-0x4, %esi
addl %edx, %edi
addl $-0x4, %edi
cmpl $0x4, %edi
jne 0x39ee8
negl %esi
movd %esi, %xmm3
pshufd $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
por 0x6faba(%rip), %xmm3    # 0xa99f0
movdqa 0x6c512(%rip), %xmm4    # 0xa6450
pxor %xmm4, %xmm0
pxor %xmm4, %xmm3
pcmpgtd %xmm0, %xmm3
pand %xmm3, %xmm2
pandn %xmm1, %xmm3
por %xmm2, %xmm3
pshufd $0xee, %xmm3, %xmm0     # xmm0 = xmm3[2,3,2,3]
pshufd $0xff, %xmm3, %xmm1     # xmm1 = xmm3[3,3,3,3]
pshufd $0xf5, %xmm3, %xmm2     # xmm2 = xmm3[1,1,3,3]
pmuludq %xmm1, %xmm2
pmuludq %xmm3, %xmm0
pmuludq %xmm2, %xmm0
movd %xmm0, %r8d
imull %ecx, %r8d
cltd
idivl %r8d
retq