// File: /workspace/github_cpp_makefile_star2_O2/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 %r15
pushq %r14
pushq %rbx
subq $0x78, %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
cvtss2sd 0x208(%rdi), %xmm5
mulsd %xmm5, %xmm5
subsd %xmm5, %xmm3
mulsd %xmm10, %xmm3
subsd %xmm3, %xmm4
cvtsd2ss %xmm4, %xmm5
movss 0xb899(%rip), %xmm4     # 0x13088
xorpd %xmm3, %xmm3
ucomiss %xmm5, %xmm3
ja 0x792e
movq %rsi, %rbx
xorpd 0xb868(%rip), %xmm9     # 0x13070
mulsd %xmm1, %xmm9
subsd %xmm0, %xmm9
subsd %xmm2, %xmm9
sqrtss %xmm5, %xmm2
ucomiss %xmm3, %xmm5
movaps %xmm2, %xmm0
movss %xmm8, -0x30(%rbp)
movapd %xmm9, -0x60(%rbp)
movsd %xmm10, -0x38(%rbp)
jae 0x786b
movaps %xmm5, %xmm0
movss %xmm5, -0x50(%rbp)
movss %xmm2, -0x1c(%rbp)
callq 0x3410
movss -0x1c(%rbp), %xmm2
movss -0x50(%rbp), %xmm5
movss 0xb82f(%rip), %xmm4     # 0x13088
movsd -0x38(%rbp), %xmm10
movapd -0x60(%rbp), %xmm9
movss -0x30(%rbp), %xmm8
cvtss2sd %xmm0, %xmm0
addsd %xmm9, %xmm0
divsd %xmm10, %xmm0
cvtsd2ss %xmm0, %xmm1
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm5
movaps %xmm1, -0x50(%rbp)
jae 0x78b2
movaps %xmm5, %xmm0
callq 0x3410
movaps -0x50(%rbp), %xmm1
movss 0xb7eb(%rip), %xmm4     # 0x13088
movsd -0x38(%rbp), %xmm10
movapd -0x60(%rbp), %xmm9
movss -0x30(%rbp), %xmm8
movaps %xmm0, %xmm2
cvtss2sd %xmm2, %xmm0
subsd %xmm0, %xmm9
divsd %xmm10, %xmm9
cvtsd2ss %xmm9, %xmm0
ucomiss %xmm1, %xmm8
jbe 0x78d1
ucomiss %xmm0, %xmm8
ja 0x792e
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
movaps %xmm0, -0x30(%rbp)
movaps %xmm1, %xmm0
callq 0x72ee
leaq -0x78(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movaps -0x30(%rbp), %xmm0
callq 0x72ee
movq %rbx, %rdi
movq %r14, %rsi
callq 0x363a
movaps %xmm0, -0x60(%rbp)
movq %rbx, %rdi
movq %r15, %rsi
callq 0x363a
movaps -0x60(%rbp), %xmm4
cmpltss %xmm0, %xmm4
movaps -0x50(%rbp), %xmm0
andps %xmm4, %xmm0
andnps -0x30(%rbp), %xmm4
orps %xmm0, %xmm4
movaps %xmm4, %xmm0
addq $0x78, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq