// File: /workspace/github_cpp_makefile_star2_O3/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:
movq %rdi, %rax
movsd 0x258(%rsi), %xmm2
movsd 0x248(%rsi), %xmm4
movsd 0x260(%rsi), %xmm1
movsd 0x238(%rsi), %xmm5
movsd 0x240(%rsi), %xmm6
movapd %xmm2, %xmm8
mulsd %xmm4, %xmm8
movsd 0x250(%rsi), %xmm3
mulsd %xmm3, %xmm4
mulsd %xmm6, %xmm3
mulsd %xmm1, %xmm6
subsd %xmm6, %xmm8
mulsd %xmm5, %xmm1
subsd %xmm4, %xmm1
mulsd %xmm2, %xmm5
subsd %xmm5, %xmm3
cmpb $0x1, 0x2b0(%rsi)
jne 0x7de4
pushq %rbp
movq %rsp, %rbp
movapd %xmm1, %xmm2
mulsd %xmm1, %xmm2
movapd %xmm8, %xmm4
mulsd %xmm8, %xmm4
addsd %xmm2, %xmm4
movapd %xmm3, %xmm2
mulsd %xmm3, %xmm2
addsd %xmm4, %xmm2
xorps %xmm4, %xmm4
sqrtsd %xmm2, %xmm4
movsd 0xf4b4(%rip), %xmm0     # 0x17010
divsd %xmm4, %xmm0
mulsd %xmm0, %xmm8
mulsd %xmm0, %xmm1
mulsd %xmm3, %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x1f0(%rsi), %xmm2
movsd 0x1f8(%rsi), %xmm3
movsd 0x210(%rsi), %xmm11
movapd %xmm11, %xmm10
subsd %xmm3, %xmm10
movsd 0x218(%rsi), %xmm12
movsd 0x200(%rsi), %xmm7
movapd %xmm12, %xmm13
subsd %xmm7, %xmm13
movsd 0x220(%rsi), %xmm14
movsd %xmm14, -0x8(%rbp)
subsd %xmm2, %xmm14
movsd %xmm2, -0x18(%rbp)
movsd 0x228(%rsi), %xmm4
movapd %xmm4, %xmm9
subsd %xmm3, %xmm9
movsd 0x230(%rsi), %xmm5
movapd %xmm5, %xmm15
subsd %xmm7, %xmm15
movapd %xmm9, %xmm6
mulsd %xmm13, %xmm6
mulsd %xmm14, %xmm13
mulsd %xmm10, %xmm14
mulsd %xmm15, %xmm10
subsd %xmm6, %xmm10
movsd 0x208(%rsi), %xmm0
movapd %xmm0, %xmm6
subsd %xmm2, %xmm6
mulsd %xmm6, %xmm15
subsd %xmm15, %xmm13
mulsd %xmm6, %xmm9
subsd %xmm14, %xmm9
mulsd %xmm1, %xmm13
mulsd %xmm8, %xmm10
addsd %xmm13, %xmm10
mulsd -0x10(%rbp), %xmm9
addsd %xmm10, %xmm9
movsd (%rdx), %xmm14
movsd 0x8(%rdx), %xmm13
subsd %xmm13, %xmm11
movsd 0x10(%rdx), %xmm15
subsd %xmm15, %xmm12
movsd -0x8(%rbp), %xmm10
subsd %xmm14, %xmm10
subsd %xmm13, %xmm4
subsd %xmm15, %xmm5
movapd %xmm4, %xmm6
mulsd %xmm12, %xmm6
movapd %xmm10, %xmm2
movsd %xmm10, -0x8(%rbp)
mulsd %xmm11, %xmm2
mulsd %xmm5, %xmm11
subsd %xmm6, %xmm11
subsd %xmm14, %xmm0
movapd %xmm5, %xmm6
mulsd %xmm0, %xmm6
mulsd %xmm10, %xmm12
subsd %xmm6, %xmm12
mulsd %xmm4, %xmm0
subsd %xmm2, %xmm0
mulsd %xmm1, %xmm12
mulsd %xmm8, %xmm11
addsd %xmm12, %xmm11
movsd -0x10(%rbp), %xmm10
mulsd %xmm10, %xmm0
addsd %xmm11, %xmm0
movsd -0x18(%rbp), %xmm2
subsd %xmm14, %xmm2
subsd %xmm13, %xmm3
subsd %xmm15, %xmm7
movapd %xmm3, %xmm6
mulsd %xmm5, %xmm6
mulsd %xmm2, %xmm5
mulsd %xmm4, %xmm2
mulsd %xmm7, %xmm4
subsd %xmm6, %xmm4
movsd -0x8(%rbp), %xmm6
mulsd %xmm6, %xmm7
subsd %xmm7, %xmm5
mulsd %xmm6, %xmm3
subsd %xmm2, %xmm3
mulsd %xmm1, %xmm5
cvtsd2ss %xmm9, %xmm1
mulsd %xmm8, %xmm4
cvtsd2ss %xmm0, %xmm0
addsd %xmm5, %xmm4
mulsd %xmm10, %xmm3
addsd %xmm4, %xmm3
xorps %xmm2, %xmm2
cvtsd2ss %xmm3, %xmm2
divss %xmm1, %xmm0
divss %xmm1, %xmm2
movss 0xf33f(%rip), %xmm1     # 0x17090
subss %xmm0, %xmm1
subss %xmm2, %xmm1
cvtss2sd %xmm0, %xmm0
movsd 0x268(%rsi), %xmm3
mulsd %xmm0, %xmm3
movsd 0x270(%rsi), %xmm4
mulsd %xmm0, %xmm4
mulsd 0x278(%rsi), %xmm0
cvtss2sd %xmm2, %xmm2
movsd 0x280(%rsi), %xmm5
mulsd %xmm2, %xmm5
addsd %xmm3, %xmm5
movsd 0x288(%rsi), %xmm6
mulsd %xmm2, %xmm6
mulsd 0x290(%rsi), %xmm2
addsd %xmm4, %xmm6
addsd %xmm0, %xmm2
xorps %xmm3, %xmm3
cvtss2sd %xmm1, %xmm3
movsd 0x298(%rsi), %xmm8
mulsd %xmm3, %xmm8
addsd %xmm5, %xmm8
movsd 0x2a0(%rsi), %xmm1
mulsd %xmm3, %xmm1
addsd %xmm6, %xmm1
mulsd 0x2a8(%rsi), %xmm3
addsd %xmm2, %xmm3
popq %rbp
movsd %xmm8, (%rax)
movsd %xmm1, 0x8(%rax)
movsd %xmm3, 0x10(%rax)
retq