// File: /workspace/github_cpp_makefile_star2_O1/logicx24[P]RayTracer/raytracer.cpp
// Function: Triangle::normal(vec3)
vec3 normal(vec3 point) {
        if (needInterpolate) {
            vec3 normal = (edge2 ^ edge1).normalize();
            float a1 = normal * ((vertex2 - vertex1) ^ (vertex3 - vertex1));
            float a2 = normal * ((vertex2 - point) ^ (vertex3 - point));
            float a3 = normal * ((vertex3 - point) ^ (vertex1 - point));
            float alpha = a2 / a1;
            float beta = a3 / a1;
            float gamma = 1.0f - alpha - beta;
            vec3 iNormal = alpha * normal1 + beta * normal2 + gamma * normal3;
            return iNormal;
        } else {
        	return edge2 ^ edge1;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r14
movq %rdi, %rbx
cmpb $0x1, 0x2b0(%rsi)
jne 0x7bfe
movq %rdx, %r15
movsd 0x258(%r14), %xmm0
movsd 0x248(%r14), %xmm1
movsd 0x260(%r14), %xmm15
movsd 0x238(%r14), %xmm2
movsd 0x240(%r14), %xmm3
movapd %xmm0, %xmm5
mulsd %xmm1, %xmm5
movsd 0x250(%r14), %xmm4
mulsd %xmm4, %xmm1
mulsd %xmm3, %xmm4
mulsd %xmm15, %xmm3
subsd %xmm3, %xmm5
mulsd %xmm2, %xmm15
subsd %xmm1, %xmm15
mulsd %xmm0, %xmm2
subsd %xmm2, %xmm4
movapd %xmm15, %xmm0
mulsd %xmm15, %xmm0
movsd %xmm5, -0x20(%rbp)
movapd %xmm5, %xmm1
mulsd %xmm5, %xmm1
addsd %xmm0, %xmm1
movsd %xmm4, -0x28(%rbp)
movapd %xmm4, %xmm0
mulsd %xmm4, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x7c61
sqrtsd %xmm0, %xmm0
jmp 0x7c72
movsd 0x258(%r14), %xmm3
movsd 0x248(%r14), %xmm4
movsd 0x260(%r14), %xmm0
movsd 0x238(%r14), %xmm5
movsd 0x240(%r14), %xmm6
movapd %xmm3, %xmm1
mulsd %xmm4, %xmm1
movsd 0x250(%r14), %xmm2
mulsd %xmm2, %xmm4
mulsd %xmm6, %xmm2
mulsd %xmm0, %xmm6
subsd %xmm6, %xmm1
mulsd %xmm5, %xmm0
subsd %xmm4, %xmm0
mulsd %xmm3, %xmm5
subsd %xmm5, %xmm2
jmp 0x7f1a
movsd %xmm15, -0x30(%rbp)
callq 0x31a0
movsd -0x30(%rbp), %xmm15
movsd 0xf396(%rip), %xmm1     # 0x17010
divsd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
mulsd %xmm1, %xmm15
movsd -0x28(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x1f0(%r14), %xmm1
movsd 0x1f8(%r14), %xmm0
movsd 0x210(%r14), %xmm8
movapd %xmm8, %xmm7
subsd %xmm0, %xmm7
movsd 0x218(%r14), %xmm9
movsd 0x200(%r14), %xmm4
movapd %xmm9, %xmm10
subsd %xmm4, %xmm10
movsd 0x220(%r14), %xmm5
movapd %xmm5, %xmm11
subsd %xmm1, %xmm11
movsd 0x228(%r14), %xmm6
movapd %xmm6, %xmm3
subsd %xmm0, %xmm3
movsd 0x230(%r14), %xmm2
movapd %xmm2, %xmm12
subsd %xmm4, %xmm12
movapd %xmm3, %xmm13
mulsd %xmm10, %xmm13
mulsd %xmm11, %xmm10
mulsd %xmm7, %xmm11
movapd %xmm7, %xmm14
mulsd %xmm12, %xmm14
subsd %xmm13, %xmm14
movsd 0x208(%r14), %xmm7
movapd %xmm7, %xmm13
subsd %xmm1, %xmm13
mulsd %xmm13, %xmm12
subsd %xmm12, %xmm10
mulsd %xmm13, %xmm3
subsd %xmm11, %xmm3
mulsd %xmm15, %xmm10
mulsd -0x20(%rbp), %xmm14
addsd %xmm10, %xmm14
mulsd -0x28(%rbp), %xmm3
addsd %xmm14, %xmm3
movsd (%r15), %xmm11
movsd 0x8(%r15), %xmm10
subsd %xmm10, %xmm8
movsd 0x10(%r15), %xmm12
subsd %xmm12, %xmm9
subsd %xmm11, %xmm5
subsd %xmm10, %xmm6
subsd %xmm12, %xmm2
movapd %xmm6, %xmm13
mulsd %xmm9, %xmm13
movapd %xmm5, %xmm14
mulsd %xmm8, %xmm14
mulsd %xmm2, %xmm8
subsd %xmm13, %xmm8
subsd %xmm11, %xmm7
movapd %xmm2, %xmm13
mulsd %xmm7, %xmm13
mulsd %xmm5, %xmm9
subsd %xmm13, %xmm9
mulsd %xmm6, %xmm7
subsd %xmm14, %xmm7
mulsd %xmm15, %xmm9
movsd -0x20(%rbp), %xmm13
mulsd %xmm13, %xmm8
addsd %xmm9, %xmm8
movsd -0x28(%rbp), %xmm9
mulsd %xmm9, %xmm7
addsd %xmm8, %xmm7
subsd %xmm11, %xmm1
subsd %xmm10, %xmm0
subsd %xmm12, %xmm4
movapd %xmm0, %xmm8
mulsd %xmm2, %xmm8
mulsd %xmm1, %xmm2
mulsd %xmm6, %xmm1
mulsd %xmm4, %xmm6
subsd %xmm8, %xmm6
mulsd %xmm5, %xmm4
subsd %xmm4, %xmm2
mulsd %xmm5, %xmm0
subsd %xmm1, %xmm0
mulsd %xmm15, %xmm2
xorps %xmm1, %xmm1
cvtsd2ss %xmm3, %xmm1
mulsd %xmm13, %xmm6
xorps %xmm3, %xmm3
cvtsd2ss %xmm7, %xmm3
addsd %xmm2, %xmm6
mulsd %xmm9, %xmm0
addsd %xmm6, %xmm0
cvtsd2ss %xmm0, %xmm0
divss %xmm1, %xmm3
divss %xmm1, %xmm0
movss 0xf214(%rip), %xmm1     # 0x17090
subss %xmm3, %xmm1
subss %xmm0, %xmm1
xorps %xmm2, %xmm2
cvtss2sd %xmm3, %xmm2
movsd 0x268(%r14), %xmm3
mulsd %xmm2, %xmm3
movsd 0x270(%r14), %xmm4
mulsd %xmm2, %xmm4
mulsd 0x278(%r14), %xmm2
xorps %xmm5, %xmm5
cvtss2sd %xmm0, %xmm5
movsd 0x280(%r14), %xmm0
mulsd %xmm5, %xmm0
addsd %xmm3, %xmm0
movsd 0x288(%r14), %xmm3
mulsd %xmm5, %xmm3
mulsd 0x290(%r14), %xmm5
addsd %xmm4, %xmm3
addsd %xmm2, %xmm5
xorps %xmm2, %xmm2
cvtss2sd %xmm1, %xmm2
movsd 0x298(%r14), %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x2a0(%r14), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm3, %xmm0
mulsd 0x2a8(%r14), %xmm2
addsd %xmm5, %xmm2
movsd %xmm1, (%rbx)
movsd %xmm0, 0x8(%rbx)
movsd %xmm2, 0x10(%rbx)
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq