// File: /workspace/github_cpp_makefile_star2_O3/DoubleString[P]RtConverter/src/Rnxobs/Com.cpp
// Function: bamboo::betau(double*, double*, double*, double*)
void betau(double* xsat, double* xsun, double* beta, double* u) {
	double xsat_unit[3], nop_unit[3];
	double xsun_unit[3], vsat_unit[3], det;
	unit_vector(3, xsat, xsat_unit, &det);
	cross(xsat, xsat + 3, nop_unit);
	unit_vector(3, nop_unit, nop_unit, &det);
	unit_vector(3, xsun, xsun_unit, &det);
	*beta = PI / 2.0 - acos(dot(3, nop_unit, xsun_unit));

	*u = acos(dot(3, xsat_unit, xsun_unit) / cos(*beta));

	unit_vector(3, xsat + 3, vsat_unit, &det);

	if (dot(3, vsat_unit, xsun_unit)
			> dot(3, vsat_unit, xsat_unit) * dot(3, xsat_unit, xsun_unit))
		*u = -(*u);
	*u = *u - PI;

	while (*u < 0)
		*u = *u + 2 * PI;
	while (*u > 2 * PI)
		*u = *u - 2 * PI;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x80, %rsp
movq %rcx, %rbx
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, %r14
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd (%r14,%rax,8), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1e401
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1e428
sqrtsd %xmm0, %xmm0
jmp 0x1e42d
callq 0x84e0
xorl %eax, %eax
movsd (%r14,%rax,8), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, -0x80(%rbp,%rax,8)
incq %rax
cmpq $0x3, %rax
jne 0x1e42f
movsd (%r14), %xmm0
movsd 0x8(%r14), %xmm1
movsd 0x28(%r14), %xmm2
movsd 0x10(%r14), %xmm3
movsd 0x20(%r14), %xmm4
movapd %xmm1, %xmm5
mulsd %xmm2, %xmm5
mulsd %xmm0, %xmm2
mulsd %xmm4, %xmm0
mulsd %xmm3, %xmm4
subsd %xmm4, %xmm5
movsd 0x18(%r14), %xmm4
mulsd %xmm4, %xmm3
subsd %xmm2, %xmm3
mulsd %xmm1, %xmm4
subsd %xmm4, %xmm0
movsd %xmm5, -0x40(%rbp)
movsd %xmm3, -0x38(%rbp)
movsd %xmm0, -0x30(%rbp)
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd -0x40(%rbp,%rax,8), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1e4a8
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1e4cf
sqrtsd %xmm0, %xmm0
jmp 0x1e4d4
callq 0x84e0
xorl %eax, %eax
movsd -0x40(%rbp,%rax,8), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, -0x40(%rbp,%rax,8)
incq %rax
cmpq $0x3, %rax
jne 0x1e4d6
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd (%r12,%rax,8), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1e4f5
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1e51c
sqrtsd %xmm0, %xmm0
jmp 0x1e521
callq 0x84e0
xorl %eax, %eax
movsd (%r12,%rax,8), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, -0x60(%rbp,%rax,8)
incq %rax
cmpq $0x3, %rax
jne 0x1e523
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd -0x40(%rbp,%rax,8), %xmm1
mulsd -0x60(%rbp,%rax,8), %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1e542
callq 0x85f0
movapd %xmm0, %xmm1
movsd 0x4c3c4(%rip), %xmm0    # 0x6a930
subsd %xmm1, %xmm0
movsd %xmm0, (%r15)
xorpd %xmm2, %xmm2
xorl %eax, %eax
movsd -0x80(%rbp,%rax,8), %xmm1
mulsd -0x60(%rbp,%rax,8), %xmm1
addsd %xmm1, %xmm2
incq %rax
cmpq $0x3, %rax
jne 0x1e57b
movsd %xmm2, -0x48(%rbp)
callq 0x8bf0
movsd -0x48(%rbp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x85f0
movsd %xmm0, (%rbx)
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd 0x18(%r14,%rax,8), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1e5ba
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1e5e2
sqrtsd %xmm0, %xmm0
jmp 0x1e5e7
callq 0x84e0
xorl %eax, %eax
movsd 0x18(%r14,%rax,8), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, -0xa0(%rbp,%rax,8)
incq %rax
cmpq $0x3, %rax
jne 0x1e5e9
xorpd %xmm1, %xmm1
xorl %eax, %eax
movsd -0xa0(%rbp,%rax,8), %xmm0
mulsd -0x60(%rbp,%rax,8), %xmm0
addsd %xmm0, %xmm1
incq %rax
cmpq $0x3, %rax
jne 0x1e60c
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd -0xa0(%rbp,%rax,8), %xmm2
mulsd -0x80(%rbp,%rax,8), %xmm2
addsd %xmm2, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1e62e
xorpd %xmm2, %xmm2
xorl %eax, %eax
movsd -0x80(%rbp,%rax,8), %xmm3
mulsd -0x60(%rbp,%rax,8), %xmm3
addsd %xmm3, %xmm2
incq %rax
cmpq $0x3, %rax
jne 0x1e650
mulsd %xmm2, %xmm0
movsd (%rbx), %xmm2
movapd 0x4c457(%rip), %xmm3    # 0x6aad0
xorpd %xmm2, %xmm3
cmpltsd %xmm1, %xmm0
andpd %xmm0, %xmm3
andnpd %xmm2, %xmm0
orpd %xmm3, %xmm0
addsd 0x4c2a2(%rip), %xmm0    # 0x6a938
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jbe 0x1e6b2
movsd 0x4c270(%rip), %xmm2    # 0x6a918
addsd %xmm2, %xmm0
ucomisd %xmm0, %xmm1
ja 0x1e6a8
movsd %xmm0, (%rbx)
ucomisd 0x4c25a(%rip), %xmm0    # 0x6a918
jbe 0x1e6de
movsd 0x4c278(%rip), %xmm1    # 0x6a940
movsd 0x4c248(%rip), %xmm2    # 0x6a918
addsd %xmm1, %xmm0
ucomisd %xmm2, %xmm0
ja 0x1e6d0
movsd %xmm0, (%rbx)
addq $0x80, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq