// File: /workspace/github_cpp_makefile_star2_O1/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 0x1ea32
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1ea59
sqrtsd %xmm0, %xmm0
jmp 0x1ea5e
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 0x1ea60
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 0x1ead9
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1eb00
sqrtsd %xmm0, %xmm0
jmp 0x1eb05
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 0x1eb07
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd (%r12,%rax,8), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1eb26
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1eb4d
sqrtsd %xmm0, %xmm0
jmp 0x1eb52
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 0x1eb54
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 0x1eb73
callq 0x85f0
movapd %xmm0, %xmm1
movsd 0x4bd93(%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 0x1ebac
movsd %xmm2, -0x48(%rbp)
callq 0x8c00
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 0x1ebeb
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x1ec13
sqrtsd %xmm0, %xmm0
jmp 0x1ec18
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 0x1ec1a
xorpd %xmm0, %xmm0
xorl %eax, %eax
movsd -0xa0(%rbp,%rax,8), %xmm1
mulsd -0x60(%rbp,%rax,8), %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x1ec3d
xorpd %xmm1, %xmm1
xorl %eax, %eax
movsd -0xa0(%rbp,%rax,8), %xmm2
mulsd -0x80(%rbp,%rax,8), %xmm2
addsd %xmm2, %xmm1
incq %rax
cmpq $0x3, %rax
jne 0x1ec5f
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 0x1ec81
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x1ecb4
movsd (%rbx), %xmm0
xorpd 0x4be20(%rip), %xmm0    # 0x6aad0
movlpd %xmm0, (%rbx)
movsd (%rbx), %xmm0
addsd 0x4bc78(%rip), %xmm0    # 0x6a938
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jbe 0x1ecdc
movsd 0x4bc46(%rip), %xmm2    # 0x6a918
addsd %xmm2, %xmm0
ucomisd %xmm0, %xmm1
ja 0x1ecd2
movsd %xmm0, (%rbx)
ucomisd 0x4bc30(%rip), %xmm0    # 0x6a918
jbe 0x1ed08
movsd 0x4bc4e(%rip), %xmm1    # 0x6a940
movsd 0x4bc1e(%rip), %xmm2    # 0x6a918
addsd %xmm1, %xmm0
ucomisd %xmm2, %xmm0
ja 0x1ecfa
movsd %xmm0, (%rbx)
addq $0x80, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq