// File: /workspace/github_cpp_makefile_star2_O1/logicx24[P]RayTracer/raytracer.cpp
// Function: Triangle::intersection(Ray&, float)
float intersection(Ray &ray, float eps) {
        vec3 normal = (edge2 ^ edge1).normalize();
        vec3 w0 = ray.pos - vertex1;
        float a = -(normal * w0);
        float b = normal * ray.vec;
        float r = a/b;

        if (fabs(b) < eps) {
            if (a == 0.0f) {
                return r;
            } else {
            	return MAXFLOAT;
            }
        }

        if (r < 0.0f) {
            return MAXFLOAT;
        }

        vec3 intersect = ray.pointAt(r);
        float uu, uv, vv, wu, wv, D;

        uu = edge1 * edge1;
        uv = edge1 * edge2;
        vv = edge2 * edge2;
        vec3 w = intersect - vertex1;
        wu = w * edge1;
        wv = w * edge2;
        D = uv * uv - uu * vv;

        float s, t;

        s = (uv * wv - vv * wu) / D;
        if (s < 0.0f || s > 1.0f) {
            return MAXFLOAT;
        }
        t = (uv * wu - uu * wv) / D;
        if (t < 0.0f || (s + t) > 1.0f) {
            return MAXFLOAT;
        }

        if (r < eps) {
            return MAXFLOAT;
        }
        return r;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x20, %rsp
movaps %xmm0, %xmm5
movq %rsi, %r14
movq %rdi, %rbx
movsd 0x258(%rdi), %xmm0
movsd 0x248(%rdi), %xmm1
movsd 0x260(%rdi), %xmm9
movsd 0x238(%rdi), %xmm2
movsd 0x240(%rdi), %xmm3
movapd %xmm0, %xmm10
mulsd %xmm1, %xmm10
movsd 0x250(%rdi), %xmm11
mulsd %xmm11, %xmm1
mulsd %xmm3, %xmm11
mulsd %xmm9, %xmm3
subsd %xmm3, %xmm10
mulsd %xmm2, %xmm9
subsd %xmm1, %xmm9
mulsd %xmm0, %xmm2
subsd %xmm2, %xmm11
movapd %xmm9, %xmm0
mulsd %xmm9, %xmm0
movapd %xmm10, %xmm1
mulsd %xmm10, %xmm1
addsd %xmm0, %xmm1
movapd %xmm11, %xmm0
mulsd %xmm11, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x784b
sqrtsd %xmm0, %xmm0
jmp 0x787e
movss %xmm5, -0x14(%rbp)
movsd %xmm9, -0x20(%rbp)
movsd %xmm10, -0x30(%rbp)
movsd %xmm11, -0x28(%rbp)
callq 0x31a0
movsd -0x28(%rbp), %xmm11
movsd -0x30(%rbp), %xmm10
movsd -0x20(%rbp), %xmm9
movss -0x14(%rbp), %xmm5
movsd 0xf78a(%rip), %xmm1     # 0x17010
divsd %xmm0, %xmm1
mulsd %xmm1, %xmm10
mulsd %xmm1, %xmm9
mulsd %xmm1, %xmm11
movsd (%r14), %xmm2
movsd 0x8(%r14), %xmm3
movsd 0x1f0(%rbx), %xmm8
movsd 0x1f8(%rbx), %xmm7
movapd %xmm2, %xmm0
subsd %xmm8, %xmm0
movapd %xmm3, %xmm1
subsd %xmm7, %xmm1
movsd 0x10(%r14), %xmm4
movsd 0x200(%rbx), %xmm12
movapd %xmm4, %xmm6
subsd %xmm12, %xmm6
mulsd %xmm9, %xmm1
mulsd %xmm10, %xmm0
addsd %xmm1, %xmm0
mulsd %xmm11, %xmm6
addsd %xmm0, %xmm6
xorps %xmm0, %xmm0
cvtsd2ss %xmm6, %xmm0
movaps 0xf73d(%rip), %xmm1     # 0x17040
xorps %xmm0, %xmm1
movsd 0x18(%r14), %xmm6
mulsd 0x20(%r14), %xmm9
mulsd %xmm6, %xmm10
addsd %xmm9, %xmm10
mulsd 0x28(%r14), %xmm11
addsd %xmm10, %xmm11
xorps %xmm9, %xmm9
cvtsd2ss %xmm11, %xmm9
divss %xmm9, %xmm1
andps 0xf713(%rip), %xmm9     # 0x17050
ucomiss %xmm9, %xmm5
jbe 0x795f
xorpd %xmm2, %xmm2
cmpeqss %xmm2, %xmm0
andps %xmm0, %xmm1
movss 0xf735(%rip), %xmm2     # 0x1708c
andnps %xmm2, %xmm0
orps %xmm1, %xmm0
jmp 0x7971
movss 0xf725(%rip), %xmm0     # 0x1708c
xorps %xmm9, %xmm9
ucomiss %xmm1, %xmm9
jbe 0x797a
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movss %xmm5, -0x14(%rbp)
xorps %xmm9, %xmm9
cvtss2sd %xmm1, %xmm9
mulsd %xmm9, %xmm6
movsd 0x20(%r14), %xmm10
mulsd %xmm9, %xmm10
mulsd 0x28(%r14), %xmm9
addsd %xmm6, %xmm2
addsd %xmm10, %xmm3
addsd %xmm9, %xmm4
movsd 0x238(%rbx), %xmm5
movsd 0x240(%rbx), %xmm10
movapd %xmm10, %xmm6
mulsd %xmm10, %xmm6
movapd %xmm5, %xmm13
mulsd %xmm5, %xmm13
addsd %xmm6, %xmm13
movsd 0x248(%rbx), %xmm11
movsd %xmm12, -0x20(%rbp)
movapd %xmm11, %xmm12
mulsd %xmm11, %xmm12
addsd %xmm13, %xmm12
movsd 0x250(%rbx), %xmm15
movsd 0x258(%rbx), %xmm6
movapd %xmm10, %xmm13
mulsd %xmm6, %xmm13
movapd %xmm5, %xmm9
mulsd %xmm15, %xmm9
addsd %xmm13, %xmm9
movsd 0x260(%rbx), %xmm14
movapd %xmm11, %xmm13
mulsd %xmm14, %xmm13
addsd %xmm9, %xmm13
subsd %xmm8, %xmm2
subsd %xmm7, %xmm3
mulsd %xmm3, %xmm10
mulsd %xmm6, %xmm3
mulsd %xmm6, %xmm6
mulsd %xmm2, %xmm5
mulsd %xmm15, %xmm2
mulsd %xmm15, %xmm15
addsd %xmm6, %xmm15
subsd -0x20(%rbp), %xmm4
mulsd %xmm4, %xmm11
mulsd %xmm14, %xmm4
mulsd %xmm14, %xmm14
addsd %xmm15, %xmm14
addsd %xmm10, %xmm5
addsd %xmm5, %xmm11
xorps %xmm6, %xmm6
cvtsd2ss %xmm12, %xmm6
xorps %xmm5, %xmm5
cvtsd2ss %xmm13, %xmm5
cvtsd2ss %xmm14, %xmm8
cvtsd2ss %xmm11, %xmm7
addsd %xmm3, %xmm2
addsd %xmm2, %xmm4
cvtsd2ss %xmm4, %xmm4
movaps %xmm6, %xmm2
mulss %xmm8, %xmm2
movaps %xmm5, %xmm3
mulss %xmm5, %xmm3
subss %xmm2, %xmm3
mulss %xmm7, %xmm8
movaps %xmm5, %xmm2
mulss %xmm4, %xmm2
subss %xmm8, %xmm2
divss %xmm3, %xmm2
xorps %xmm8, %xmm8
ucomiss %xmm2, %xmm8
ja 0x7971
ucomiss 0xf5ab(%rip), %xmm2     # 0x17090
ja 0x7971
xorps 0xf54e(%rip), %xmm6     # 0x17040
mulss %xmm4, %xmm6
mulss %xmm7, %xmm5
addss %xmm6, %xmm5
divss %xmm3, %xmm5
xorps %xmm3, %xmm3
ucomiss %xmm5, %xmm3
ja 0x7971
addss %xmm5, %xmm2
ucomiss 0xf577(%rip), %xmm2     # 0x17090
ja 0x7971
movaps %xmm1, %xmm0
cmpltss -0x14(%rbp), %xmm0
movss 0xf55c(%rip), %xmm2     # 0x1708c
andps %xmm0, %xmm2
andnps %xmm1, %xmm0
orps %xmm2, %xmm0
jmp 0x7971