// File: /workspace/github_cpp_makefile_star2_O1/logicx24[P]RayTracer/raytracer.cpp
// Function: Sphere::intersection(Ray&, float)
float intersection(Ray &ray, float eps) {
		vec3 p_c = ray.pos - center;
        vec3 d = ray.vec;
        float discriminant = pow(d * p_c, 2) - ((d * d) * ((p_c * p_c) - pow(radius, 2)));
        if (discriminant < 0) {
        	return MAXFLOAT;
        }
		float t1 = (-d*(p_c) + sqrt(discriminant)) / (d * d);
		float t2 = (-d*(p_c) - sqrt(discriminant)) / (d * d);
        if (t1 < eps && t2 < eps) {
        	return MAXFLOAT;
        }
        vec3 p1 = ray.pointAt(t1);
        vec3 p2 = ray.pointAt(t2);
        float d1 = distance(ray.pos, p1);
        float d2 = distance(ray.pos, p2);
	    if (d1 < d2) {
        	return t1;
        } else {
        	return t2;
        }
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x48, %rsp
movsd (%rsi), %xmm1
movsd 0x8(%rsi), %xmm5
subsd 0x1f0(%rdi), %xmm1
subsd 0x1f8(%rdi), %xmm5
movaps %xmm0, %xmm8
movsd 0x10(%rsi), %xmm3
subsd 0x200(%rdi), %xmm3
movsd 0x18(%rsi), %xmm9
movsd 0x20(%rsi), %xmm6
movsd 0x28(%rsi), %xmm10
movapd %xmm5, %xmm0
mulsd %xmm6, %xmm0
movapd %xmm9, %xmm4
mulsd %xmm1, %xmm4
addsd %xmm0, %xmm4
movapd %xmm10, %xmm2
mulsd %xmm3, %xmm2
addsd %xmm2, %xmm4
mulsd %xmm4, %xmm4
mulsd %xmm6, %xmm6
movapd %xmm9, %xmm7
mulsd %xmm9, %xmm7
addsd %xmm6, %xmm7
mulsd %xmm10, %xmm10
addsd %xmm7, %xmm10
mulsd %xmm5, %xmm5
movapd %xmm1, %xmm6
mulsd %xmm1, %xmm6
addsd %xmm5, %xmm6
mulsd %xmm3, %xmm3
addsd %xmm6, %xmm3
xorps %xmm5, %xmm5
cvtss2sd 0x208(%rdi), %xmm5
mulsd %xmm5, %xmm5
subsd %xmm5, %xmm3
mulsd %xmm10, %xmm3
subsd %xmm3, %xmm4
xorps %xmm5, %xmm5
cvtsd2ss %xmm4, %xmm5
movss 0xea47(%rip), %xmm4     # 0x1708c
xorpd %xmm3, %xmm3
ucomiss %xmm5, %xmm3
ja 0x8865
movq %rsi, %rbx
xorpd 0xea12(%rip), %xmm9     # 0x17070
mulsd %xmm1, %xmm9
subsd %xmm0, %xmm9
subsd %xmm2, %xmm9
xorps %xmm2, %xmm2
sqrtss %xmm5, %xmm2
ucomiss %xmm3, %xmm5
movaps %xmm2, %xmm0
movss %xmm8, -0x40(%rbp)
movapd %xmm9, -0x30(%rbp)
movsd %xmm10, -0x10(%rbp)
jae 0x86c4
movaps %xmm5, %xmm0
movss %xmm5, -0x50(%rbp)
movss %xmm2, -0x18(%rbp)
callq 0x3470
movss -0x18(%rbp), %xmm2
movss -0x50(%rbp), %xmm5
movsd -0x10(%rbp), %xmm10
movapd -0x30(%rbp), %xmm9
movss -0x40(%rbp), %xmm8
movss 0xe9c8(%rip), %xmm4     # 0x1708c
cvtss2sd %xmm0, %xmm0
addsd %xmm9, %xmm0
divsd %xmm10, %xmm0
xorps %xmm1, %xmm1
cvtsd2ss %xmm0, %xmm1
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm5
movaps %xmm1, -0x50(%rbp)
jae 0x870e
movaps %xmm5, %xmm0
callq 0x3470
movsd -0x10(%rbp), %xmm10
movapd -0x30(%rbp), %xmm9
movss -0x40(%rbp), %xmm8
movss 0xe985(%rip), %xmm4     # 0x1708c
movaps -0x50(%rbp), %xmm1
movaps %xmm0, %xmm2
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
subsd %xmm0, %xmm9
divsd %xmm10, %xmm9
xorps %xmm6, %xmm6
cvtsd2ss %xmm9, %xmm6
ucomiss %xmm1, %xmm8
jbe 0x8737
ucomiss %xmm6, %xmm8
ja 0x8865
cvtss2sd %xmm1, %xmm1
movsd 0x18(%rbx), %xmm8
movapd %xmm8, %xmm3
mulsd %xmm1, %xmm3
movsd 0x20(%rbx), %xmm9
movapd %xmm9, %xmm4
mulsd %xmm1, %xmm4
movsd 0x28(%rbx), %xmm7
mulsd %xmm7, %xmm1
movsd (%rbx), %xmm5
movsd 0x8(%rbx), %xmm2
addsd %xmm5, %xmm3
addsd %xmm2, %xmm4
movsd 0x10(%rbx), %xmm0
addsd %xmm0, %xmm1
movaps %xmm6, -0x40(%rbp)
cvtss2sd %xmm6, %xmm6
mulsd %xmm6, %xmm8
mulsd %xmm6, %xmm9
mulsd %xmm6, %xmm7
addsd %xmm5, %xmm8
addsd %xmm2, %xmm9
addsd %xmm0, %xmm7
subsd %xmm3, %xmm5
mulsd %xmm5, %xmm5
subsd %xmm4, %xmm2
mulsd %xmm2, %xmm2
addsd %xmm5, %xmm2
subsd %xmm1, %xmm0
mulsd %xmm0, %xmm0
addsd %xmm2, %xmm0
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm0
jb 0x87d0
sqrtsd %xmm0, %xmm0
jmp 0x87fb
movsd %xmm7, -0x30(%rbp)
movsd %xmm8, -0x10(%rbp)
movsd %xmm9, -0x18(%rbp)
callq 0x31a0
xorpd %xmm2, %xmm2
movsd -0x18(%rbp), %xmm9
movsd -0x10(%rbp), %xmm8
movsd -0x30(%rbp), %xmm7
xorps %xmm4, %xmm4
cvtsd2ss %xmm0, %xmm4
movsd (%rbx), %xmm0
subsd %xmm8, %xmm0
movsd 0x8(%rbx), %xmm1
subsd %xmm9, %xmm1
mulsd %xmm0, %xmm0
mulsd %xmm1, %xmm1
addsd %xmm0, %xmm1
movsd 0x10(%rbx), %xmm0
subsd %xmm7, %xmm0
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd %xmm2, %xmm0
jb 0x883e
sqrtsd %xmm0, %xmm0
jmp 0x884b
movaps %xmm4, -0x30(%rbp)
callq 0x31a0
movaps -0x30(%rbp), %xmm4
movaps -0x50(%rbp), %xmm1
movaps -0x40(%rbp), %xmm2
cvtsd2ss %xmm0, %xmm0
cmpltss %xmm0, %xmm4
andps %xmm4, %xmm1
andnps %xmm2, %xmm4
orps %xmm1, %xmm4
movaps %xmm4, %xmm0
addq $0x48, %rsp
popq %rbx
popq %rbp
retq
nop