// File: /workspace/github_c_makefile_star2_O0/georgeweigt[P]sassafras/sassafras.c
// Function: incbeta
double
incbeta(double a, double b, double x)
{
	// begin altered source
	// if (x < 0.0 || x > 1.0) return 1.0/0.0;
	if (x <= 0.0)
		return 0.0;
	if (x >= 1.0)
		return 1.0;
	// end altered source

	/*The continued fraction converges nicely for x < (a+1)/(a+b+2)*/
	if (x > (a+1.0)/(a+b+2.0)) {
		return (1.0-incbeta(b,a,1.0-x)); /*Use the fact that beta is symmetrical.*/
	}

	/*Find the first part before the continued fraction.*/
	const double lbeta_ab = lgamma(a)+lgamma(b)-lgamma(a+b);
	const double front = exp(log(x)*a+log(1.0-x)*b-lbeta_ab) / a;

	/*Use Lentz's algorithm to evaluate the continued fraction.*/
	double f = 1.0, c = 1.0, d = 0.0;

	int i, m;
	for (i = 0; i <= 200; ++i) {
		m = i/2;

		double numerator;
		if (i == 0) {
			numerator = 1.0; /*First numerator is 1.0.*/
		} else if (i % 2 == 0) {
			numerator = (m*(b-m)*x)/((a+2.0*m-1.0)*(a+2.0*m)); /*Even term.*/
		} else {
			numerator = -((a+m)*(a+b+m)*x)/((a+2.0*m)*(a+2.0*m+1)); /*Odd term.*/
		}

		/*Do an iteration of Lentz's algorithm.*/
		d = 1.0 + numerator * d;
		if (fabs(d) < TINY) d = TINY;
		d = 1.0 / d;

		c = 1.0 + numerator / c;
		if (fabs(c) < TINY) c = TINY;

		const double cd = c*d;
		f *= cd;

		/*Check for stop.*/
		if (fabs(1.0-cd) < STOP) {
			return front * (f-1.0);
		}
	}

	return 1.0/0.0; /*Needed more loops, did not converge.*/
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movsd %xmm2, -0x20(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x20(%rbp), %xmm0
jb 0x4611
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x49ab
movsd -0x20(%rbp), %xmm0
movsd 0xabc2(%rip), %xmm1     # 0xf1e0
ucomisd %xmm1, %xmm0
jb 0x4636
movsd 0xabb4(%rip), %xmm0     # 0xf1e0
movsd %xmm0, -0x8(%rbp)
jmp 0x49ab
movsd -0x20(%rbp), %xmm0
movsd 0xab9d(%rip), %xmm1     # 0xf1e0
addsd -0x10(%rbp), %xmm1
movsd -0x10(%rbp), %xmm2
addsd -0x18(%rbp), %xmm2
movsd 0xab8e(%rip), %xmm3     # 0xf1e8
addsd %xmm3, %xmm2
divsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x469d
movsd -0x18(%rbp), %xmm0
movsd -0x10(%rbp), %xmm1
movsd 0xab66(%rip), %xmm2     # 0xf1e0
subsd -0x20(%rbp), %xmm2
callq 0x45e0
movaps %xmm0, %xmm1
movsd 0xab51(%rip), %xmm0     # 0xf1e0
subsd %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x49ab
movsd -0x10(%rbp), %xmm0
callq 0x2150
movsd %xmm0, -0x80(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x2150
movaps %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x10(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x2150
movaps %xmm0, %xmm1
movsd -0x78(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x2100
movsd %xmm0, -0x68(%rbp)
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd 0xaad8(%rip), %xmm0     # 0xf1e0
subsd -0x20(%rbp), %xmm0
callq 0x2100
movsd -0x70(%rbp), %xmm2
movaps %xmm0, %xmm1
movsd -0x68(%rbp), %xmm0
mulsd -0x18(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
subsd -0x28(%rbp), %xmm0
callq 0x2200
divsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd 0xaa98(%rip), %xmm0     # 0xf1e0
movsd %xmm0, -0x38(%rbp)
movsd 0xaa8b(%rip), %xmm0     # 0xf1e0
movsd %xmm0, -0x40(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
movl $0x0, -0x4c(%rbp)
cmpl $0xc8, -0x4c(%rbp)
jg 0x499e
movl -0x4c(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, -0x50(%rbp)
cmpl $0x0, -0x4c(%rbp)
jne 0x479c
movsd 0xaa4e(%rip), %xmm0     # 0xf1e0
movsd %xmm0, -0x58(%rbp)
jmp 0x4887
movl -0x4c(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x4807
cvtsi2sdl -0x50(%rbp), %xmm0
movsd -0x18(%rbp), %xmm1
cvtsi2sdl -0x50(%rbp), %xmm2
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
mulsd -0x20(%rbp), %xmm0
movsd -0x10(%rbp), %xmm2
cvtsi2sdl -0x50(%rbp), %xmm1
addsd %xmm1, %xmm1
addsd %xmm2, %xmm1
movsd 0xa9fe(%rip), %xmm2     # 0xf1e0
subsd %xmm2, %xmm1
movsd -0x10(%rbp), %xmm3
cvtsi2sdl -0x50(%rbp), %xmm2
addsd %xmm2, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
jmp 0x4885
movsd -0x10(%rbp), %xmm0
cvtsi2sdl -0x50(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
addsd -0x18(%rbp), %xmm1
cvtsi2sdl -0x50(%rbp), %xmm2
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
mulsd -0x20(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd -0x10(%rbp), %xmm2
cvtsi2sdl -0x50(%rbp), %xmm1
addsd %xmm1, %xmm1
addsd %xmm2, %xmm1
movsd -0x10(%rbp), %xmm3
cvtsi2sdl -0x50(%rbp), %xmm2
addsd %xmm2, %xmm2
addsd %xmm3, %xmm2
movsd 0xa96c(%rip), %xmm3     # 0xf1e0
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
jmp 0x4887
movsd -0x58(%rbp), %xmm0
movsd -0x48(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd 0xa943(%rip), %xmm1     # 0xf1e0
addsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x48(%rbp), %xmm1
movaps 0xa99e(%rip), %xmm0     # 0xf250
pand %xmm0, %xmm1
movsd 0xa93a(%rip), %xmm0     # 0xf1f8
ucomisd %xmm1, %xmm0
jbe 0x48d1
movsd 0xa92c(%rip), %xmm0     # 0xf1f8
movsd %xmm0, -0x48(%rbp)
movsd 0xa907(%rip), %xmm0     # 0xf1e0
divsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x58(%rbp), %xmm1
divsd -0x40(%rbp), %xmm1
movsd 0xa8eb(%rip), %xmm0     # 0xf1e0
addsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x40(%rbp), %xmm1
movaps 0xa946(%rip), %xmm0     # 0xf250
pand %xmm0, %xmm1
movsd 0xa8e2(%rip), %xmm0     # 0xf1f8
ucomisd %xmm1, %xmm0
jbe 0x4929
movsd 0xa8d4(%rip), %xmm0     # 0xf1f8
movsd %xmm0, -0x40(%rbp)
movsd -0x40(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
mulsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd 0xa891(%rip), %xmm1     # 0xf1e0
subsd -0x60(%rbp), %xmm1
movaps 0xa8f5(%rip), %xmm0     # 0xf250
pand %xmm0, %xmm1
movsd 0xa899(%rip), %xmm0     # 0xf200
ucomisd %xmm1, %xmm0
jbe 0x498e
movsd -0x30(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd 0xa861(%rip), %xmm2     # 0xf1e0
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x49ab
jmp 0x4990
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x4769
movsd 0xa84a(%rip), %xmm0     # 0xf1f0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax)