// File: /workspace/github_cpp_makefile_star2_O2/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 %r12
pushq %rbx
subq $0x30, %rsp
movq %rsi, %r14
movq %rdi, %rbx
cmpb $0x1, 0x2b0(%rsi)
jne 0x6e79
movq %rdx, %r15
leaq 0x250(%r14), %rsi
leaq 0x238(%r14), %rdx
leaq -0x50(%rbp), %r12
movq %r12, %rdi
callq 0x722a
movq %r12, %rdi
callq 0x7286
movsd (%rax), %xmm7
movsd %xmm7, -0x30(%rbp)
movsd 0x208(%r14), %xmm2
movsd 0x1f0(%r14), %xmm3
movsd 0x1f8(%r14), %xmm0
movsd 0x210(%r14), %xmm10
movapd %xmm10, %xmm9
subsd %xmm0, %xmm9
movsd 0x218(%r14), %xmm12
movsd 0x200(%r14), %xmm6
movapd %xmm12, %xmm13
subsd %xmm6, %xmm13
movsd 0x220(%r14), %xmm14
movsd %xmm14, -0x38(%rbp)
subsd %xmm3, %xmm14
movsd 0x228(%r14), %xmm8
movapd %xmm8, %xmm5
subsd %xmm0, %xmm5
movsd 0x230(%r14), %xmm4
movapd %xmm4, %xmm11
subsd %xmm6, %xmm11
movapd %xmm5, %xmm15
mulsd %xmm13, %xmm15
mulsd %xmm14, %xmm13
mulsd %xmm9, %xmm14
mulsd %xmm11, %xmm9
subsd %xmm15, %xmm9
movapd %xmm2, %xmm1
subsd %xmm3, %xmm1
mulsd %xmm1, %xmm11
subsd %xmm11, %xmm13
movsd 0x8(%rax), %xmm11
mulsd %xmm1, %xmm5
movsd 0x10(%rax), %xmm1
movsd %xmm1, -0x28(%rbp)
subsd %xmm14, %xmm5
mulsd %xmm11, %xmm13
mulsd %xmm7, %xmm9
addsd %xmm13, %xmm9
mulsd %xmm1, %xmm5
addsd %xmm9, %xmm5
movsd (%r15), %xmm14
movsd 0x8(%r15), %xmm13
subsd %xmm13, %xmm10
movsd 0x10(%r15), %xmm15
subsd %xmm15, %xmm12
movsd -0x38(%rbp), %xmm1
subsd %xmm14, %xmm1
subsd %xmm13, %xmm8
subsd %xmm15, %xmm4
movapd %xmm8, %xmm9
mulsd %xmm12, %xmm9
movapd %xmm1, %xmm7
mulsd %xmm10, %xmm7
mulsd %xmm4, %xmm10
subsd %xmm9, %xmm10
subsd %xmm14, %xmm2
movapd %xmm4, %xmm9
mulsd %xmm2, %xmm9
mulsd %xmm1, %xmm12
subsd %xmm9, %xmm12
mulsd %xmm8, %xmm2
subsd %xmm7, %xmm2
mulsd %xmm11, %xmm12
movsd -0x30(%rbp), %xmm9
mulsd %xmm9, %xmm10
addsd %xmm12, %xmm10
movsd -0x28(%rbp), %xmm12
mulsd %xmm12, %xmm2
addsd %xmm10, %xmm2
subsd %xmm14, %xmm3
subsd %xmm13, %xmm0
subsd %xmm15, %xmm6
movapd %xmm0, %xmm7
mulsd %xmm4, %xmm7
mulsd %xmm3, %xmm4
mulsd %xmm8, %xmm3
mulsd %xmm6, %xmm8
subsd %xmm7, %xmm8
mulsd %xmm1, %xmm6
subsd %xmm6, %xmm4
mulsd %xmm1, %xmm0
subsd %xmm3, %xmm0
mulsd %xmm11, %xmm4
cvtsd2ss %xmm5, %xmm3
mulsd %xmm9, %xmm8
cvtsd2ss %xmm2, %xmm2
addsd %xmm4, %xmm8
mulsd %xmm12, %xmm0
addsd %xmm8, %xmm0
cvtsd2ss %xmm0, %xmm0
divss %xmm3, %xmm2
divss %xmm3, %xmm0
movss 0xc2b8(%rip), %xmm1     # 0x1308c
subss %xmm2, %xmm1
subss %xmm0, %xmm1
cvtss2sd %xmm2, %xmm2
movsd 0x268(%r14), %xmm3
mulsd %xmm2, %xmm3
movsd 0x270(%r14), %xmm4
mulsd %xmm2, %xmm4
mulsd 0x278(%r14), %xmm2
cvtss2sd %xmm0, %xmm0
movsd 0x280(%r14), %xmm5
mulsd %xmm0, %xmm5
addsd %xmm3, %xmm5
movsd 0x288(%r14), %xmm3
mulsd %xmm0, %xmm3
mulsd 0x290(%r14), %xmm0
addsd %xmm4, %xmm3
addsd %xmm2, %xmm0
cvtss2sd %xmm1, %xmm1
movsd 0x298(%r14), %xmm2
mulsd %xmm1, %xmm2
addsd %xmm5, %xmm2
movsd 0x2a0(%r14), %xmm4
mulsd %xmm1, %xmm4
addsd %xmm3, %xmm4
mulsd 0x2a8(%r14), %xmm1
addsd %xmm0, %xmm1
movsd %xmm2, (%rbx)
movsd %xmm4, 0x8(%rbx)
movsd %xmm1, 0x10(%rbx)
jmp 0x6e92
leaq 0x250(%r14), %rsi
addq $0x238, %r14            # imm = 0x238
movq %rbx, %rdi
movq %r14, %rdx
callq 0x722a
movq %rbx, %rax
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq