// File: /workspace/github_c_makefile_star2_O0/ggerganov[P]font-rasterizer/./stb_truetype.h
// Function: stbtt__ray_intersect_bezier
static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2])
{
   float q0perp = q0[1]*ray[0] - q0[0]*ray[1];
   float q1perp = q1[1]*ray[0] - q1[0]*ray[1];
   float q2perp = q2[1]*ray[0] - q2[0]*ray[1];
   float roperp = orig[1]*ray[0] - orig[0]*ray[1];

   float a = q0perp - 2*q1perp + q2perp;
   float b = q1perp - q0perp;
   float c = q0perp - roperp;

   float s0 = 0., s1 = 0.;
   int num_s = 0;

   if (a != 0.0) {
      float discr = b*b - a*c;
      if (discr > 0.0) {
         float rcpna = -1 / a;
         float d = (float) STBTT_sqrt(discr);
         s0 = (b+d) * rcpna;
         s1 = (b-d) * rcpna;
         if (s0 >= 0.0 && s0 <= 1.0)
            num_s = 1;
         if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) {
            if (num_s == 0) s0 = s1;
            ++num_s;
         }
      }
   } else {
      // 2*b*s + c = 0
      // s = -c / (2*b)
      s0 = c / (-2 * b);
      if (s0 >= 0.0 && s0 <= 1.0)
         num_s = 1;
   }

   if (num_s == 0)
      return 0;
   else {
      float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]);
      float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2;

      float q0d =   q0[0]*rayn_x +   q0[1]*rayn_y;
      float q1d =   q1[0]*rayn_x +   q1[1]*rayn_y;
      float q2d =   q2[0]*rayn_x +   q2[1]*rayn_y;
      float rod = orig[0]*rayn_x + orig[1]*rayn_y;

      float q10d = q1d - q0d;
      float q20d = q2d - q0d;
      float q0rd = q0d - rod;

      hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d;
      hits[0][1] = a*s0+b;

      if (num_s > 1) {
         hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d;
         hits[1][1] = a*s1+b;
         return 2;
      } else {
         return 1;
      }
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x18(%rbp), %rax
movss (%rax), %xmm2
movq -0x20(%rbp), %rax
movss (%rax), %xmm1
movq -0x18(%rbp), %rax
mulss 0x4(%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x3c(%rbp)
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x18(%rbp), %rax
movss (%rax), %xmm2
movq -0x28(%rbp), %rax
movss (%rax), %xmm1
movq -0x18(%rbp), %rax
mulss 0x4(%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x30(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x18(%rbp), %rax
movss (%rax), %xmm2
movq -0x30(%rbp), %rax
movss (%rax), %xmm1
movq -0x18(%rbp), %rax
mulss 0x4(%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x44(%rbp)
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x18(%rbp), %rax
movss (%rax), %xmm2
movq -0x10(%rbp), %rax
movss (%rax), %xmm1
movq -0x18(%rbp), %rax
mulss 0x4(%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x48(%rbp)
movss -0x3c(%rbp), %xmm0
movss -0x40(%rbp), %xmm1
addss %xmm1, %xmm1
subss %xmm1, %xmm0
addss -0x44(%rbp), %xmm0
movss %xmm0, -0x4c(%rbp)
movss -0x40(%rbp), %xmm0
subss -0x3c(%rbp), %xmm0
movss %xmm0, -0x50(%rbp)
movss -0x3c(%rbp), %xmm0
subss -0x48(%rbp), %xmm0
movss %xmm0, -0x54(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x58(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x5c(%rbp)
movl $0x0, -0x60(%rbp)
movss -0x4c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1362d
jp 0x1362d
jmp 0x1374a
movss -0x50(%rbp), %xmm0
movss -0x50(%rbp), %xmm2
movss -0x4c(%rbp), %xmm1
mulss -0x54(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x64(%rbp)
movss -0x64(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x13748
movss 0x2ffb(%rip), %xmm0     # 0x16674
divss -0x4c(%rbp), %xmm0
movss %xmm0, -0x68(%rbp)
movss -0x64(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x11d0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x6c(%rbp)
movss -0x50(%rbp), %xmm0
addss -0x6c(%rbp), %xmm0
mulss -0x68(%rbp), %xmm0
movss %xmm0, -0x58(%rbp)
movss -0x50(%rbp), %xmm0
subss -0x6c(%rbp), %xmm0
mulss -0x68(%rbp), %xmm0
movss %xmm0, -0x5c(%rbp)
movss -0x58(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x136f2
movss -0x58(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2fab(%rip), %xmm0     # 0x16690
ucomisd %xmm1, %xmm0
jb 0x136f2
movl $0x1, -0x60(%rbp)
movss -0x6c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x13746
movss -0x5c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x13746
movss -0x5c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2f69(%rip), %xmm0     # 0x16690
ucomisd %xmm1, %xmm0
jb 0x13746
cmpl $0x0, -0x60(%rbp)
jne 0x1373d
movss -0x5c(%rbp), %xmm0
movss %xmm0, -0x58(%rbp)
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0x13748
jmp 0x13797
movss -0x54(%rbp), %xmm0
movss 0x2f21(%rip), %xmm1     # 0x16678
mulss -0x50(%rbp), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0x58(%rbp)
movss -0x58(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x13795
movss -0x58(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2f08(%rip), %xmm0     # 0x16690
ucomisd %xmm1, %xmm0
jb 0x13795
movl $0x1, -0x60(%rbp)
jmp 0x13797
cmpl $0x0, -0x60(%rbp)
jne 0x137a9
movl $0x0, -0x4(%rbp)
jmp 0x139f6
movq -0x18(%rbp), %rax
movss (%rax), %xmm1
movq -0x18(%rbp), %rax
movss (%rax), %xmm2
movq -0x18(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x18(%rbp), %rax
mulss 0x4(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss 0x2e41(%rip), %xmm0     # 0x1661c
divss %xmm1, %xmm0
movss %xmm0, -0x70(%rbp)
movq -0x18(%rbp), %rax
movss (%rax), %xmm0
mulss -0x70(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movq -0x18(%rbp), %rax
movss 0x4(%rax), %xmm0
mulss -0x70(%rbp), %xmm0
movss %xmm0, -0x78(%rbp)
movq -0x20(%rbp), %rax
movss (%rax), %xmm0
movss -0x74(%rbp), %xmm2
movq -0x20(%rbp), %rax
movss 0x4(%rax), %xmm1
mulss -0x78(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x7c(%rbp)
movq -0x28(%rbp), %rax
movss (%rax), %xmm0
movss -0x74(%rbp), %xmm2
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm1
mulss -0x78(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x80(%rbp)
movq -0x30(%rbp), %rax
movss (%rax), %xmm0
movss -0x74(%rbp), %xmm2
movq -0x30(%rbp), %rax
movss 0x4(%rax), %xmm1
mulss -0x78(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x84(%rbp)
movq -0x10(%rbp), %rax
movss (%rax), %xmm0
movss -0x74(%rbp), %xmm2
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm1
mulss -0x78(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x88(%rbp)
movss -0x80(%rbp), %xmm0
subss -0x7c(%rbp), %xmm0
movss %xmm0, -0x8c(%rbp)
movss -0x84(%rbp), %xmm0
subss -0x7c(%rbp), %xmm0
movss %xmm0, -0x90(%rbp)
movss -0x7c(%rbp), %xmm0
subss -0x88(%rbp), %xmm0
movss %xmm0, -0x94(%rbp)
movss -0x94(%rbp), %xmm0
movss -0x58(%rbp), %xmm1
movss -0x58(%rbp), %xmm3
addss %xmm3, %xmm3
movss 0x2d23(%rip), %xmm2     # 0x1662c
subss %xmm3, %xmm2
mulss %xmm2, %xmm1
movss -0x8c(%rbp), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x58(%rbp), %xmm0
mulss -0x58(%rbp), %xmm0
movss -0x90(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x38(%rbp), %rax
movss %xmm0, (%rax)
movss -0x4c(%rbp), %xmm0
movss -0x58(%rbp), %xmm2
movss -0x50(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x38(%rbp), %rax
movss %xmm0, 0x4(%rax)
cmpl $0x1, -0x60(%rbp)
jle 0x139ef
movss -0x94(%rbp), %xmm0
movss -0x5c(%rbp), %xmm1
movss -0x5c(%rbp), %xmm3
addss %xmm3, %xmm3
movss 0x2ca1(%rip), %xmm2     # 0x1662c
subss %xmm3, %xmm2
mulss %xmm2, %xmm1
movss -0x8c(%rbp), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x5c(%rbp), %xmm0
mulss -0x5c(%rbp), %xmm0
movss -0x90(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x38(%rbp), %rax
movss %xmm0, 0x8(%rax)
movss -0x4c(%rbp), %xmm0
movss -0x5c(%rbp), %xmm2
movss -0x50(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x38(%rbp), %rax
movss %xmm0, 0xc(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x139f6
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)