// File: /workspace/github_cpp_makefile_star2_O1/ingowald[P]closestSurfacePointQueries/src/distanceQueries.cpp
// Function: bvhlib::GeneralTriangleMesh<float, int, false>::testPrimAndUpdateIfCloser(bvhlib::QueryResult&, ospcommon::vec_t<float, 3, 1> const&, unsigned long)
void GeneralTriangleMesh<coord_t,index_t,has_strides>
  ::testPrimAndUpdateIfCloser(QueryResult &result,
                              const vec3fa &queryPoint,
                              const size_t primID)
  {
    const Triangle tri = getTriangle(primID);

    const vec3fa e0 = tri.v1-tri.v0;
    const vec3fa e1 = tri.v2-tri.v1;
    const vec3fa e2 = tri.v0-tri.v2;
    const vec3fa N  = cross(e2,e0);

    const vec3fa Na = cross(N,e1);
    const vec3fa Nb = cross(N,e2);
    const vec3fa Nc = cross(N,e0);
    
    const float a = dot(queryPoint-tri.v1,Na);
    const float b = dot(queryPoint-tri.v2,Nb);
    const float c = dot(queryPoint-tri.v0,Nc);
      
    vec3fa closestPoint;
    float closestDist;
    if (std::min(std::min(a,b),c) >= 0.f)
      closestPoint = projectToPlane(closestDist,queryPoint,N,tri.v0);
    else {
      closestDist = std::numeric_limits<float>::infinity();
      if (a <= 0.f) 
        checkEdge(closestPoint,closestDist,queryPoint,tri.v1,e1);
      if (b <= 0.f) 
        checkEdge(closestPoint,closestDist,queryPoint,tri.v2,e2);
      if (c <= 0.f) 
        checkEdge(closestPoint,closestDist,queryPoint,tri.v0,e0);
    }
      
    if (closestDist >= result.distance) return;
      
    result.distance = closestDist;
    result.point    = closestPoint;
    result.primID   = primID;
  }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x70, %rsp
movq %rcx, %rbx
movq %rdx, %r15
movq %rsi, %r14
movq 0x68(%rdi), %rax
movslq (%rax,%rcx,4), %rax
movq 0x70(%rdi), %rcx
movslq (%rcx,%rbx,4), %rcx
movq 0x78(%rdi), %rdx
movslq (%rdx,%rbx,4), %rdx
movq 0x48(%rdi), %rsi
movq 0x50(%rdi), %r8
movss (%rsi,%rax,4), %xmm1
movss (%r8,%rax,4), %xmm14
movss %xmm14, 0x20(%rsp)
movq 0x58(%rdi), %rdi
movss (%rdi,%rax,4), %xmm2
movss (%rsi,%rcx,4), %xmm3
movss (%r8,%rcx,4), %xmm9
movss (%rdi,%rcx,4), %xmm10
movss %xmm10, 0xc(%rsp)
movss (%rsi,%rdx,4), %xmm4
movss %xmm4, 0x2c(%rsp)
movss (%r8,%rdx,4), %xmm6
movss (%rdi,%rdx,4), %xmm5
movaps %xmm3, %xmm11
movaps %xmm3, %xmm8
subss %xmm1, %xmm11
movaps %xmm1, %xmm7
movss %xmm1, 0x24(%rsp)
movaps %xmm9, %xmm3
movss %xmm9, 0x14(%rsp)
subss %xmm14, %xmm3
movss %xmm2, 0x1c(%rsp)
subss %xmm2, %xmm10
movaps %xmm14, %xmm1
subss %xmm6, %xmm1
movss %xmm6, 0x28(%rsp)
subss %xmm5, %xmm2
movss %xmm5, 0x34(%rsp)
movaps %xmm3, %xmm0
mulss %xmm2, %xmm0
movaps %xmm1, %xmm14
mulss %xmm10, %xmm14
subss %xmm0, %xmm14
subss %xmm4, %xmm7
movaps %xmm10, %xmm0
mulss %xmm7, %xmm0
movaps %xmm2, %xmm13
mulss %xmm11, %xmm13
subss %xmm0, %xmm13
movaps %xmm11, %xmm0
mulss %xmm1, %xmm0
movaps %xmm7, %xmm12
mulss %xmm3, %xmm12
subss %xmm0, %xmm12
subss %xmm9, %xmm6
subss 0xc(%rsp), %xmm5
movaps %xmm6, %xmm0
mulss %xmm12, %xmm0
movaps %xmm13, %xmm4
mulss %xmm5, %xmm4
subss %xmm0, %xmm4
movss 0x2c(%rsp), %xmm9
subss %xmm8, %xmm9
movss %xmm5, 0x64(%rsp)
movaps %xmm5, %xmm0
mulss %xmm14, %xmm0
movaps %xmm12, %xmm5
mulss %xmm9, %xmm5
subss %xmm0, %xmm5
movss %xmm9, 0x60(%rsp)
movaps %xmm9, %xmm0
mulss %xmm13, %xmm0
movaps %xmm14, %xmm9
movss %xmm6, 0x68(%rsp)
mulss %xmm6, %xmm9
subss %xmm0, %xmm9
movaps %xmm1, %xmm0
mulss %xmm12, %xmm0
movaps %xmm13, %xmm15
mulss %xmm2, %xmm15
subss %xmm0, %xmm15
movss %xmm2, 0x44(%rsp)
movaps %xmm2, %xmm0
mulss %xmm14, %xmm0
movaps %xmm12, %xmm2
mulss %xmm7, %xmm2
subss %xmm0, %xmm2
movss %xmm7, 0x40(%rsp)
mulss %xmm13, %xmm7
movaps %xmm14, %xmm0
movss %xmm1, 0x48(%rsp)
mulss %xmm1, %xmm0
subss %xmm7, %xmm0
movaps %xmm3, %xmm7
mulss %xmm12, %xmm7
movaps %xmm13, %xmm1
mulss %xmm10, %xmm1
subss %xmm7, %xmm1
movss %xmm10, 0x30(%rsp)
mulss %xmm14, %xmm10
movaps %xmm12, %xmm7
mulss %xmm11, %xmm7
subss %xmm10, %xmm7
movss %xmm11, 0x3c(%rsp)
movaps %xmm11, %xmm10
movss %xmm13, 0x50(%rsp)
mulss %xmm13, %xmm10
movss %xmm14, 0x54(%rsp)
movss %xmm3, 0x38(%rsp)
mulss %xmm3, %xmm14
subss %xmm10, %xmm14
movss (%r15), %xmm11
movaps %xmm11, %xmm10
movss %xmm8, 0x18(%rsp)
subss %xmm8, %xmm10
movss 0x4(%r15), %xmm8
movaps %xmm8, %xmm13
subss 0x14(%rsp), %xmm13
movss %xmm13, 0x58(%rsp)
mulss %xmm13, %xmm5
movss %xmm10, 0x5c(%rsp)
mulss %xmm10, %xmm4
addss %xmm5, %xmm4
movss 0x8(%r15), %xmm10
movaps %xmm10, %xmm3
movss 0xc(%rsp), %xmm5
subss %xmm5, %xmm3
mulss %xmm3, %xmm9
addss %xmm4, %xmm9
movaps %xmm11, %xmm13
movss 0x2c(%rsp), %xmm5
subss %xmm5, %xmm13
mulss %xmm15, %xmm13
movaps %xmm8, %xmm15
subss 0x28(%rsp), %xmm15
mulss %xmm2, %xmm15
addss %xmm13, %xmm15
movaps %xmm10, %xmm5
subss 0x34(%rsp), %xmm5
mulss %xmm0, %xmm5
addss %xmm15, %xmm5
movss %xmm11, 0x4c(%rsp)
movaps %xmm11, %xmm2
subss 0x24(%rsp), %xmm2
movss %xmm8, 0x10(%rsp)
movaps %xmm8, %xmm13
subss 0x20(%rsp), %xmm13
mulss %xmm13, %xmm7
mulss %xmm2, %xmm1
addss %xmm7, %xmm1
movaps %xmm10, %xmm0
subss 0x1c(%rsp), %xmm0
mulss %xmm0, %xmm14
addss %xmm1, %xmm14
movaps %xmm5, %xmm7
minss %xmm9, %xmm7
movss %xmm14, 0x6c(%rsp)
minss %xmm7, %xmm14
xorps %xmm7, %xmm7
ucomiss %xmm7, %xmm14
jae 0x5b1f
movaps %xmm5, %xmm15
ucomiss %xmm9, %xmm7
jae 0x5baa
movss 0x4b65(%rip), %xmm12    # 0xa650
movss 0x3c(%rsp), %xmm10
movss 0x38(%rsp), %xmm11
movss 0x30(%rsp), %xmm4
movss 0x28(%rsp), %xmm9
movss 0x48(%rsp), %xmm13
movss 0x44(%rsp), %xmm14
movss 0x40(%rsp), %xmm3
jmp 0x5dc1
movss 0x50(%rsp), %xmm3
mulss %xmm3, %xmm3
movss 0x54(%rsp), %xmm8
mulss %xmm8, %xmm8
addss %xmm3, %xmm8
movaps %xmm12, %xmm3
mulss %xmm12, %xmm3
addss %xmm8, %xmm3
ucomiss %xmm7, %xmm3
jne 0x5c03
jp 0x5c03
movss 0x24(%rsp), %xmm7
movaps %xmm7, %xmm1
subss 0x4c(%rsp), %xmm1
movss 0x20(%rsp), %xmm6
movaps %xmm6, %xmm2
subss 0x10(%rsp), %xmm2
movss 0x1c(%rsp), %xmm0
subss %xmm10, %xmm0
mulss %xmm2, %xmm2
mulss %xmm1, %xmm1
addss %xmm2, %xmm1
mulss %xmm0, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x5c9b
sqrtss %xmm0, %xmm12
jmp 0x60ed
movss 0x68(%rsp), %xmm2
movaps %xmm2, %xmm0
mulss %xmm2, %xmm0
movss 0x60(%rsp), %xmm6
movaps %xmm6, %xmm1
mulss %xmm6, %xmm1
addss %xmm0, %xmm1
movss 0x64(%rsp), %xmm4
movaps %xmm4, %xmm0
mulss %xmm4, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x5cb5
jp 0x5cb5
movss 0x14(%rsp), %xmm6
movss 0x18(%rsp), %xmm7
movss 0xc(%rsp), %xmm8
jmp 0x5d11
movss 0x50(%rsp), %xmm1
mulss %xmm1, %xmm13
movss 0x54(%rsp), %xmm4
mulss %xmm4, %xmm2
addss %xmm13, %xmm2
mulss %xmm12, %xmm0
addss %xmm2, %xmm0
divss %xmm3, %xmm0
mulss %xmm0, %xmm4
mulss %xmm0, %xmm1
mulss %xmm12, %xmm0
movss 0x4c(%rsp), %xmm2
movaps %xmm2, %xmm7
subss %xmm4, %xmm7
movss 0x10(%rsp), %xmm3
movaps %xmm3, %xmm6
subss %xmm1, %xmm6
movaps %xmm10, %xmm8
subss %xmm0, %xmm8
movaps %xmm7, %xmm1
subss %xmm2, %xmm1
movaps %xmm6, %xmm2
subss %xmm3, %xmm2
movaps %xmm8, %xmm0
subss %xmm10, %xmm0
mulss %xmm2, %xmm2
mulss %xmm1, %xmm1
addss %xmm2, %xmm1
mulss %xmm0, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x5e07
sqrtss %xmm0, %xmm12
jmp 0x60f4
callq 0x2310
movaps %xmm0, %xmm12
movss 0x20(%rsp), %xmm6
movss 0x24(%rsp), %xmm7
jmp 0x60ed
movss 0x58(%rsp), %xmm7
mulss %xmm2, %xmm7
movss 0x5c(%rsp), %xmm5
mulss %xmm6, %xmm5
addss %xmm7, %xmm5
mulss %xmm4, %xmm3
addss %xmm5, %xmm3
divss %xmm0, %xmm3
minss 0x4973(%rip), %xmm3     # 0xa654
maxss %xmm1, %xmm3
mulss %xmm3, %xmm6
mulss %xmm3, %xmm2
mulss %xmm4, %xmm3
movss 0x18(%rsp), %xmm7
addss %xmm6, %xmm7
movss 0x14(%rsp), %xmm6
addss %xmm2, %xmm6
movss 0xc(%rsp), %xmm8
addss %xmm3, %xmm8
movaps %xmm7, %xmm2
subss 0x4c(%rsp), %xmm2
movaps %xmm6, %xmm3
subss 0x10(%rsp), %xmm3
movaps %xmm8, %xmm0
subss %xmm10, %xmm0
mulss %xmm3, %xmm3
mulss %xmm2, %xmm2
addss %xmm3, %xmm2
mulss %xmm0, %xmm0
addss %xmm2, %xmm0
ucomiss %xmm1, %xmm0
jb 0x5d4c
sqrtss %xmm0, %xmm12
jmp 0x5d89
movss %xmm6, 0x14(%rsp)
movss %xmm7, 0x18(%rsp)
movss %xmm8, 0xc(%rsp)
movss %xmm15, 0x10(%rsp)
callq 0x2310
movss 0x10(%rsp), %xmm15
movss 0xc(%rsp), %xmm8
movss 0x18(%rsp), %xmm7
movss 0x14(%rsp), %xmm6
movaps %xmm0, %xmm12
movss 0x3c(%rsp), %xmm10
movss 0x38(%rsp), %xmm11
movss 0x30(%rsp), %xmm4
movss 0x28(%rsp), %xmm9
movss 0x48(%rsp), %xmm13
movss 0x44(%rsp), %xmm14
movss 0x40(%rsp), %xmm3
minss 0x488f(%rip), %xmm12    # 0xa650
xorps %xmm5, %xmm5
ucomiss %xmm15, %xmm5
jb 0x5f89
movaps %xmm13, %xmm0
mulss %xmm13, %xmm0
movaps %xmm3, %xmm1
mulss %xmm3, %xmm1
addss %xmm0, %xmm1
movaps %xmm14, %xmm0
mulss %xmm14, %xmm0
addss %xmm1, %xmm0
ucomiss %xmm5, %xmm0
jne 0x5e3b
jp 0x5e3b
movss 0x2c(%rsp), %xmm1
movss 0x34(%rsp), %xmm0
jmp 0x5ecd
movss %xmm6, 0x14(%rsp)
movss %xmm7, 0x18(%rsp)
movss %xmm8, 0xc(%rsp)
callq 0x2310
movss 0xc(%rsp), %xmm8
movss 0x18(%rsp), %xmm7
movss 0x14(%rsp), %xmm6
movaps %xmm0, %xmm12
jmp 0x60f4
movss (%r15), %xmm1
movss 0x4(%r15), %xmm2
movss %xmm12, 0x10(%rsp)
movaps %xmm3, %xmm12
movss 0x2c(%rsp), %xmm4
subss %xmm4, %xmm1
subss %xmm9, %xmm2
movss 0x8(%r15), %xmm3
movss 0x34(%rsp), %xmm5
subss %xmm5, %xmm3
mulss %xmm13, %xmm2
mulss %xmm12, %xmm1
addss %xmm2, %xmm1
mulss %xmm14, %xmm3
addss %xmm1, %xmm3
divss %xmm0, %xmm3
minss 0x47c1(%rip), %xmm3     # 0xa654
xorps %xmm0, %xmm0
maxss %xmm0, %xmm3
movaps %xmm5, %xmm0
xorps %xmm5, %xmm5
movaps %xmm4, %xmm1
movss 0x30(%rsp), %xmm4
mulss %xmm3, %xmm12
mulss %xmm3, %xmm13
mulss %xmm14, %xmm3
addss %xmm12, %xmm1
movss 0x10(%rsp), %xmm12
addss %xmm13, %xmm9
addss %xmm3, %xmm0
movss %xmm1, 0x2c(%rsp)
subss (%r15), %xmm1
movaps %xmm9, %xmm2
subss 0x4(%r15), %xmm2
movss %xmm0, 0x34(%rsp)
subss 0x8(%r15), %xmm0
mulss %xmm2, %xmm2
mulss %xmm1, %xmm1
addss %xmm2, %xmm1
mulss %xmm0, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x5f10
sqrtss %xmm0, %xmm0
jmp 0x5f6e
movss %xmm6, 0x14(%rsp)
movss %xmm7, 0x18(%rsp)
movss %xmm8, 0xc(%rsp)
movss %xmm9, 0x28(%rsp)
movss %xmm12, 0x10(%rsp)
callq 0x2310
xorps %xmm5, %xmm5
movss 0x10(%rsp), %xmm12
movss 0x28(%rsp), %xmm9
movss 0x30(%rsp), %xmm4
movss 0x38(%rsp), %xmm11
movss 0x3c(%rsp), %xmm10
movss 0xc(%rsp), %xmm8
movss 0x18(%rsp), %xmm7
movss 0x14(%rsp), %xmm6
ucomiss %xmm0, %xmm12
jbe 0x5f89
movaps %xmm9, %xmm6
movss 0x2c(%rsp), %xmm7
movaps %xmm0, %xmm12
movss 0x34(%rsp), %xmm8
ucomiss 0x6c(%rsp), %xmm5
jb 0x60f4
movaps %xmm11, %xmm0
mulss %xmm11, %xmm0
movaps %xmm10, %xmm1
mulss %xmm10, %xmm1
addss %xmm0, %xmm1
movaps %xmm4, %xmm0
mulss %xmm4, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x5fd1
jp 0x5fd1
movss 0x24(%rsp), %xmm5
movss 0x20(%rsp), %xmm9
jmp 0x6054
movss (%r15), %xmm2
movss 0x4(%r15), %xmm3
movss 0x24(%rsp), %xmm5
subss %xmm5, %xmm2
movss 0x20(%rsp), %xmm9
subss %xmm9, %xmm3
movaps %xmm4, %xmm13
movss 0x8(%r15), %xmm4
movss 0x1c(%rsp), %xmm14
subss %xmm14, %xmm4
mulss %xmm11, %xmm3
mulss %xmm10, %xmm2
addss %xmm3, %xmm2
mulss %xmm13, %xmm4
addss %xmm2, %xmm4
divss %xmm0, %xmm4
minss 0x4629(%rip), %xmm4     # 0xa654
maxss %xmm1, %xmm4
mulss %xmm4, %xmm10
mulss %xmm4, %xmm11
mulss %xmm13, %xmm4
addss %xmm10, %xmm5
addss %xmm11, %xmm9
addss %xmm4, %xmm14
movss %xmm14, 0x1c(%rsp)
movss %xmm5, 0x24(%rsp)
movaps %xmm5, %xmm2
subss (%r15), %xmm2
movss %xmm9, 0x20(%rsp)
movaps %xmm9, %xmm3
subss 0x4(%r15), %xmm3
movss 0x1c(%rsp), %xmm0
subss 0x8(%r15), %xmm0
mulss %xmm3, %xmm3
mulss %xmm2, %xmm2
addss %xmm3, %xmm2
mulss %xmm0, %xmm0
addss %xmm2, %xmm0
ucomiss %xmm1, %xmm0
jb 0x609e
sqrtss %xmm0, %xmm0
jmp 0x60d7
movss %xmm6, 0x14(%rsp)
movss %xmm7, 0x18(%rsp)
movss %xmm8, 0xc(%rsp)
movss %xmm12, 0x10(%rsp)
callq 0x2310
movss 0x10(%rsp), %xmm12
movss 0xc(%rsp), %xmm8
movss 0x18(%rsp), %xmm7
movss 0x14(%rsp), %xmm6
ucomiss %xmm0, %xmm12
jbe 0x60f4
movss 0x20(%rsp), %xmm6
movss 0x24(%rsp), %xmm7
movaps %xmm0, %xmm12
movss 0x1c(%rsp), %xmm8
ucomiss 0x10(%r14), %xmm12
jae 0x6116
movss %xmm12, 0x10(%r14)
movss %xmm7, (%r14)
movss %xmm6, 0x4(%r14)
movss %xmm8, 0x8(%r14)
movl %ebx, 0x14(%r14)
addq $0x70, %rsp
popq %rbx
popq %r14
popq %r15
retq