#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ SINCOS(double, double, double);
double exp(double);
double sqhcal(double qq, double gMSAWave[]) {
  double SofQ, etaz, akz, gekz, e24, x1, x2, ck, sk, ak2, qk, q2k, qk2, qk3,
      qqk, sink, cosk, asink, qcosk, aqk, inter;
  etaz = gMSAWave[10];
  akz = gMSAWave[12];
  gekz = gMSAWave[11];
  e24 = 24.0 * etaz;
  x1 = exp(akz);
  x2 = 0.0;
  if (gMSAWave[12] < 20.0) {
    x2 = exp(-akz);
  }
  ck = 0.5 * (x1 + x2);
  sk = 0.5 * (x1 - x2);
  ak2 = akz * akz;
  qk = qq / gMSAWave[13];
  q2k = qk * qk;
  if (qk <= 1.0e-08) {
    SofQ = -1.0 / gMSAWave[0];
  } else {
    if (qk <= 0.01) {
      aqk = gMSAWave[0] * (8.0 + 2.0 * etaz) + 6 * gMSAWave[1] -
            12.0 * gMSAWave[3] -
            24 *
                (gekz * (1.0 + akz) - ck * akz * gMSAWave[2] +
                 gMSAWave[3] * (ck - 1.0) +
                 (gMSAWave[2] - gMSAWave[3] * akz) * sk) /
                ak2 +
            q2k * (-(gMSAWave[0] * (48.0 + 15.0 * etaz) + 40.0 * gMSAWave[1]) /
                       60.0 +
                   gMSAWave[3] +
                   (4.0 / ak2) *
                       (gekz * (9.0 + 7.0 * akz) +
                        ck * (9.0 * gMSAWave[3] - 7.0 * gMSAWave[2] * akz) +
                        sk * (9.0 * gMSAWave[2] - 7.0 * gMSAWave[3] * akz)));
      SofQ = 1.0 / (1.0 - gMSAWave[10] * aqk);
    } else {
      qk2 = 1.0 / q2k;
      qk3 = qk2 / qk;
      qqk = 1.0 / (qk * (q2k + ak2));
      SINCOS(qk, sink, cosk);
      asink = akz * sink;
      qcosk = qk * cosk;
      aqk = gMSAWave[0] * (sink - qcosk);
      aqk = aqk +
            gMSAWave[1] * ((2.0 * qk2 - 1.0) * qcosk + 2.0 * sink - 2.0 / qk);
      inter = 24.0 * qk3 + 4.0 * (1.0 - 6.0 * qk2) * sink;
      aqk =
          (aqk + 0.5 * etaz * gMSAWave[0] *
                     (inter - (1.0 - 12.0 * qk2 + 24.0 * qk2 * qk2) * qcosk)) *
          qk3;
      aqk = aqk + gMSAWave[2] * (ck * asink - sk * qcosk) * qqk;
      aqk = aqk + gMSAWave[3] * (sk * asink - qk * (ck * cosk - 1.0)) * qqk;
      aqk = aqk + gMSAWave[3] * (cosk - 1.0) * qk2;
      aqk = aqk - gekz * (asink + qcosk) * qqk;
      SofQ = 1.0 / (1.0 - e24 * aqk);
    }
  }
  return (SofQ);
}


x86 assembly (clang, -O0):
<sqhcal>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  %xmm0,-0x8(%rbp)
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xea2(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xe6d(%rip),%xmm0
ucomisd 0x60(%rax),%xmm0
jbe    11c4 <sqhcal+0xa4>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xe42(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
movsd  0xe27(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
divsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xddd(%rip),%xmm0
ucomisd -0x68(%rbp),%xmm0
jb     1258 <sqhcal+0x138>
mov    -0x10(%rbp),%rax
movsd  0xde6(%rip),%xmm0
divsd  (%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    18e8 <sqhcal+0x7c8>
movsd  0xdc0(%rip),%xmm0
ucomisd -0x68(%rbp),%xmm0
jb     152e <sqhcal+0x40e>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x20(%rbp),%xmm2
addsd  %xmm2,%xmm2
movsd  0xe0c(%rip),%xmm1
addsd  %xmm1,%xmm2
mov    -0x10(%rbp),%rax
movsd  0xdf4(%rip),%xmm1
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm1
movsd  0xd86(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  0xd61(%rip),%xmm3
addsd  -0x28(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x50(%rbp),%xmm3
movsd  0xd14(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm3
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm2
movsd  -0x28(%rbp),%xmm4
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movsd  -0x58(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
movsd  0xc9d(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  -0x60(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x20(%rbp),%xmm4
movsd  0xce6(%rip),%xmm3
mulsd  %xmm3,%xmm4
movsd  0xce2(%rip),%xmm3
addsd  %xmm3,%xmm4
mov    -0x10(%rbp),%rax
movsd  0xcc2(%rip),%xmm3
mulsd  0x8(%rax),%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
movsd  0xc8e(%rip),%xmm2
divsd  %xmm2,%xmm3
mov    -0x10(%rbp),%rax
addsd  0x18(%rax),%xmm3
movsd  0xc51(%rip),%xmm2
divsd  -0x60(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm5
movsd  -0x28(%rbp),%xmm6
movsd  0xc5a(%rip),%xmm4
mulsd  %xmm4,%xmm6
movsd  0xc46(%rip),%xmm4
addsd  %xmm4,%xmm6
movsd  -0x50(%rbp),%xmm4
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm7
mov    -0x10(%rbp),%rax
movsd  0xc2f(%rip),%xmm8
mulsd  0x10(%rax),%xmm8
mulsd  -0x28(%rbp),%xmm8
movq   %xmm8,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm8
movsd  0xbfb(%rip),%xmm9
mulsd  %xmm9,%xmm7
addsd  %xmm8,%xmm7
mulsd  %xmm7,%xmm4
mulsd  %xmm6,%xmm5
addsd  %xmm4,%xmm5
movsd  -0x58(%rbp),%xmm4
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm6
mov    -0x10(%rbp),%rax
movsd  0xbd3(%rip),%xmm7
mulsd  0x18(%rax),%xmm7
mulsd  -0x28(%rbp),%xmm7
movq   %xmm7,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm7
movsd  0xba1(%rip),%xmm8
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xb14(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xb08(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    18e3 <sqhcal+0x7c3>
movsd  0xaf2(%rip),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
mulsd  %xmm0,%xmm1
movsd  0xabe(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm2
ff
call   1030 <SINCOS@plt>
movsd  -0x28(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
subsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x78(%rbp),%xmm2
addsd  %xmm2,%xmm2
movsd  0xa30(%rip),%xmm3
addsd  %xmm3,%xmm2
movsd  -0xa8(%rbp),%xmm4
ff
movsd  0xa3c(%rip),%xmm3
mulsd  -0x90(%rbp),%xmm3
ff
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movsd  0xa24(%rip),%xmm3
divsd  -0x68(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  0x9f1(%rip),%xmm1
mulsd  %xmm1,%xmm2
movsd  0x9c5(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  0x9d1(%rip),%xmm1
mulsd  %xmm2,%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
movsd  0x985(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0x975(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  -0xb8(%rbp),%xmm3
ff
movsd  -0x78(%rbp),%xmm4
movsd  0x973(%rip),%xmm2
mulsd  %xmm2,%xmm4
movsd  0x957(%rip),%xmm2
addsd  %xmm2,%xmm4
movsd  0x92b(%rip),%xmm2
mulsd  -0x78(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm5
mulsd  %xmm5,%xmm2
addsd  %xmm4,%xmm2
movsd  -0xa8(%rbp),%xmm4
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm4
ff
movsd  -0x58(%rbp),%xmm3
mulsd  -0xa8(%rbp),%xmm3
ff
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm4
ff
movsd  -0x68(%rbp),%xmm3
movsd  -0x50(%rbp),%xmm5
movsd  -0x98(%rbp),%xmm6
ff
mulsd  %xmm6,%xmm5
movsd  0x863(%rip),%xmm6
addsd  %xmm6,%xmm5
mulsd  %xmm5,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  0x7f7(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
addsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x75a(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0x74e(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    18e8 <sqhcal+0x7c8>
movsd  -0x18(%rbp),%xmm0
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sqhcal>:
push   %rbx
sub    $0x30,%rsp
mov    %rdi,%rbx
movsd  %xmm0,0x18(%rsp)
movsd  0x50(%rdi),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x58(%rdi),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x60(%rdi),%xmm0
movapd %xmm0,0x20(%rsp)
call   1040 <exp@plt>
movapd %xmm0,%xmm14
xorpd  %xmm0,%xmm0
movsd  0xe9c(%rip),%xmm1
ucomisd 0x60(%rbx),%xmm1
jbe    118c <sqhcal+0x6c>
movapd 0xf2d(%rip),%xmm0
xorpd  0x20(%rsp),%xmm0
movsd  %xmm14,0x8(%rsp)
call   1040 <exp@plt>
movsd  0x8(%rsp),%xmm14
movsd  0x18(%rsp),%xmm12
divsd  0x68(%rbx),%xmm12
movsd  0xe6f(%rip),%xmm1
ucomisd %xmm12,%xmm1
jae    11ce <sqhcal+0xae>
movsd  0xe70(%rip),%xmm1
ucomisd %xmm12,%xmm1
jae    11df <sqhcal+0xbf>
movapd %xmm12,%xmm0
call   1030 <SINCOS@plt>
movsd  0xec7(%rip),%xmm0
jmp    139d <sqhcal+0x27d>
movsd  0xe42(%rip),%xmm0
divsd  (%rbx),%xmm0
jmp    139d <sqhcal+0x27d>
movapd %xmm14,%xmm11
addsd  %xmm0,%xmm11
movsd  0xe17(%rip),%xmm2
mulsd  %xmm2,%xmm11
subsd  %xmm0,%xmm14
mulsd  %xmm2,%xmm14
movapd 0x20(%rsp),%xmm15
movapd %xmm15,%xmm9
mulsd  %xmm15,%xmm9
mulsd  %xmm12,%xmm12
movsd  0x10(%rsp),%xmm1
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
addsd  0xdfc(%rip),%xmm0
movsd  (%rbx),%xmm8
movsd  0x8(%rbx),%xmm10
movsd  0xdf1(%rip),%xmm2
mulsd  %xmm10,%xmm2
mulsd  %xmm8,%xmm0
addsd  %xmm2,%xmm0
movsd  0x18(%rbx),%xmm13
movsd  0xddd(%rip),%xmm7
mulsd  %xmm13,%xmm7
addsd  %xmm0,%xmm7
movsd  0xdd4(%rip),%xmm0
movapd %xmm15,%xmm5
addsd  %xmm0,%xmm5
movsd  0x10(%rbx),%xmm2
movapd %xmm15,%xmm4
mulsd  %xmm11,%xmm4
mulsd  %xmm2,%xmm4
mulsd  (%rsp),%xmm5
subsd  %xmm4,%xmm5
movsd  0xd7f(%rip),%xmm4
addsd  %xmm11,%xmm4
mulsd  %xmm13,%xmm4
addsd  %xmm5,%xmm4
movapd %xmm13,%xmm3
mulsd  %xmm15,%xmm3
movapd %xmm2,%xmm5
subsd  %xmm3,%xmm5
mulsd  %xmm14,%xmm5
addsd  %xmm4,%xmm5
mulsd  0xd7e(%rip),%xmm5
divsd  %xmm9,%xmm5
mulsd  0xd79(%rip),%xmm1
addsd  0xd79(%rip),%xmm1
addsd  %xmm7,%xmm5
mulsd  0xd74(%rip),%xmm10
mulsd  %xmm8,%xmm1
addsd  %xmm10,%xmm1
divsd  0xd6a(%rip),%xmm1
addsd  %xmm13,%xmm1
movsd  0xd65(%rip),%xmm3
divsd  %xmm9,%xmm3
movsd  0xd60(%rip),%xmm4
mulsd  %xmm15,%xmm4
movsd  0xd5a(%rip),%xmm9
addsd  %xmm9,%xmm4
movsd  0xd54(%rip),%xmm8
movapd %xmm2,%xmm7
mulsd  %xmm8,%xmm7
mulsd  %xmm15,%xmm7
movapd %xmm13,%xmm6
mulsd  %xmm9,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm11,%xmm6
mulsd  (%rsp),%xmm4
addsd  %xmm6,%xmm4
mulsd  %xmm8,%xmm13
mulsd  %xmm15,%xmm13
mulsd  %xmm9,%xmm2
addsd  %xmm13,%xmm2
mulsd  %xmm14,%xmm2
addsd  %xmm4,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm12,%xmm2
addsd  %xmm5,%xmm2
mulsd  0x50(%rbx),%xmm2
movapd %xmm0,%xmm1
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
add    $0x30,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define double @sqhcal(double %0, double* %1) {
%3 = alloca double
%4 = alloca double*
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
store double %0, double* %3
store double* %1, double** %4
%26 = load double*, double** %4
%27 = getelementptr inbounds double, double* %26, i64 10
%28 = load double, double* %27
store double %28, double* %6
%29 = load double*, double** %4
%30 = getelementptr inbounds double, double* %29, i64 12
%31 = load double, double* %30
store double %31, double* %7
%32 = load double*, double** %4
%33 = getelementptr inbounds double, double* %32, i64 11
%34 = load double, double* %33
store double %34, double* %8
%35 = load double, double* %6
%36 = fmul double 2.400000e+01, %35
store double %36, double* %9
%37 = load double, double* %7
%38 = call double @exp(double %37)
store double %38, double* %10
store double 0.000000e+00, double* %11
%39 = load double*, double** %4
%40 = getelementptr inbounds double, double* %39, i64 12
%41 = load double, double* %40
%42 = fcmp olt double %41, 2.000000e+01
br i1 %42, label %43, label %47
43: ; preds = %2
%44 = load double, double* %7
%45 = fneg double %44
%46 = call double @exp(double %45)
store double %46, double* %11
br label %47
47: ; preds = %43, %2
%48 = load double, double* %10
%49 = load double, double* %11
%50 = fadd double %48, %49
%51 = fmul double 5.000000e-01, %50
store double %51, double* %12
%52 = load double, double* %10
%53 = load double, double* %11
%54 = fsub double %52, %53
%55 = fmul double 5.000000e-01, %54
store double %55, double* %13
%56 = load double, double* %7
%57 = load double, double* %7
%58 = fmul double %56, %57
store double %58, double* %14
%59 = load double, double* %3
%60 = load double*, double** %4
%61 = getelementptr inbounds double, double* %60, i64 13
%62 = load double, double* %61
%63 = fdiv double %59, %62
store double %63, double* %15
%64 = load double, double* %15
%65 = load double, double* %15
%66 = fmul double %64, %65
store double %66, double* %16
%67 = load double, double* %15
%68 = fcmp ole double %67, 1.000000e-08
br i1 %68, label %69, label %74
69: ; preds = %47
%70 = load double*, double** %4
%71 = getelementptr inbounds double, double* %70, i64 0
%72 = load double, double* %71
%73 = fdiv double -1.000000e+00, %72
store double %73, double* %5
br label %307
74: ; preds = %47
%75 = load double, double* %15
%76 = fcmp ole double %75, 1.000000e-02
br i1 %76, label %77, label %183
77: ; preds = %74
%78 = load double*, double** %4
%79 = getelementptr inbounds double, double* %78, i64 0
%80 = load double, double* %79
%81 = load double, double* %6
%82 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %81, double 8.000000e+00)
%83 = load double*, double** %4
%84 = getelementptr inbounds double, double* %83, i64 1
%85 = load double, double* %84
%86 = fmul double 6.000000e+00, %85
%87 = call double @llvm.fmuladd.f64(double %80, double %82, double %86)
%88 = load double*, double** %4
%89 = getelementptr inbounds double, double* %88, i64 3
%90 = load double, double* %89
%91 = call double @llvm.fmuladd.f64(double -1.200000e+01, double %90, double %87)
%92 = load double, double* %8
%93 = load double, double* %7
%94 = fadd double 1.000000e+00, %93
%95 = load double, double* %12
%96 = load double, double* %7
%97 = fmul double %95, %96
%98 = load double*, double** %4
%99 = getelementptr inbounds double, double* %98, i64 2
%100 = load double, double* %99
%101 = fmul double %97, %100
%102 = fneg double %101
%103 = call double @llvm.fmuladd.f64(double %92, double %94, double %102)
%104 = load double*, double** %4
%105 = getelementptr inbounds double, double* %104, i64 3
%106 = load double, double* %105
%107 = load double, double* %12
%108 = fsub double %107, 1.000000e+00
%109 = call double @llvm.fmuladd.f64(double %106, double %108, double %103)
%110 = load double*, double** %4
%111 = getelementptr inbounds double, double* %110, i64 2
%112 = load double, double* %111
%113 = load double*, double** %4
%114 = getelementptr inbounds double, double* %113, i64 3
%115 = load double, double* %114
%116 = load double, double* %7
%117 = fneg double %115
%118 = call double @llvm.fmuladd.f64(double %117, double %116, double %112)
%119 = load double, double* %13
%120 = call double @llvm.fmuladd.f64(double %118, double %119, double %109)
%121 = fmul double 2.400000e+01, %120
%122 = load double, double* %14
%123 = fdiv double %121, %122
%124 = fsub double %91, %123
%125 = load double, double* %16
%126 = load double*, double** %4
%127 = getelementptr inbounds double, double* %126, i64 0
%128 = load double, double* %127
%129 = load double, double* %6
%130 = call double @llvm.fmuladd.f64(double 1.500000e+01, double %129, double 4.800000e+01)
%131 = load double*, double** %4
%132 = getelementptr inbounds double, double* %131, i64 1
%133 = load double, double* %132
%134 = fmul double 4.000000e+01, %133
%135 = call double @llvm.fmuladd.f64(double %128, double %130, double %134)
%136 = fneg double %135
%137 = fdiv double %136, 6.000000e+01
%138 = load double*, double** %4
%139 = getelementptr inbounds double, double* %138, i64 3
%140 = load double, double* %139
%141 = fadd double %137, %140
%142 = load double, double* %14
%143 = fdiv double 4.000000e+00, %142
%144 = load double, double* %8
%145 = load double, double* %7
%146 = call double @llvm.fmuladd.f64(double 7.000000e+00, double %145, double 9.000000e+00)
%147 = load double, double* %12
%148 = load double*, double** %4
%149 = getelementptr inbounds double, double* %148, i64 3
%150 = load double, double* %149
%151 = load double*, double** %4
%152 = getelementptr inbounds double, double* %151, i64 2
%153 = load double, double* %152
%154 = fmul double 7.000000e+00, %153
%155 = load double, double* %7
%156 = fmul double %154, %155
%157 = fneg double %156
%158 = call double @llvm.fmuladd.f64(double 9.000000e+00, double %150, double %157)
%159 = fmul double %147, %158
%160 = call double @llvm.fmuladd.f64(double %144, double %146, double %159)
%161 = load double, double* %13
%162 = load double*, double** %4
%163 = getelementptr inbounds double, double* %162, i64 2
%164 = load double, double* %163
%165 = load double*, double** %4
%166 = getelementptr inbounds double, double* %165, i64 3
%167 = load double, double* %166
%168 = fmul double 7.000000e+00, %167
%169 = load double, double* %7
%170 = fmul double %168, %169
%171 = fneg double %170
%172 = call double @llvm.fmuladd.f64(double 9.000000e+00, double %164, double %171)
%173 = call double @llvm.fmuladd.f64(double %161, double %172, double %160)
%174 = call double @llvm.fmuladd.f64(double %143, double %173, double %141)
%175 = call double @llvm.fmuladd.f64(double %125, double %174, double %124)
store double %175, double* %24
%176 = load double*, double** %4
%177 = getelementptr inbounds double, double* %176, i64 10
%178 = load double, double* %177
%179 = load double, double* %24
%180 = fneg double %178
%181 = call double @llvm.fmuladd.f64(double %180, double %179, double 1.000000e+00)
%182 = fdiv double 1.000000e+00, %181
store double %182, double* %5
br label %306
183: ; preds = %74
%184 = load double, double* %16
%185 = fdiv double 1.000000e+00, %184
store double %185, double* %17
%186 = load double, double* %17
%187 = load double, double* %15
%188 = fdiv double %186, %187
store double %188, double* %18
%189 = load double, double* %15
%190 = load double, double* %16
%191 = load double, double* %14
%192 = fadd double %190, %191
%193 = fmul double %189, %192
%194 = fdiv double 1.000000e+00, %193
store double %194, double* %19
%195 = load double, double* %15
%196 = load double, double* %20
%197 = load double, double* %21
%198 = call i32 @SINCOS(double %195, double %196, double %197)
%199 = load double, double* %7
%200 = load double, double* %20
%201 = fmul double %199, %200
store double %201, double* %22
%202 = load double, double* %15
%203 = load double, double* %21
%204 = fmul double %202, %203
store double %204, double* %23
%205 = load double*, double** %4
%206 = getelementptr inbounds double, double* %205, i64 0
%207 = load double, double* %206
%208 = load double, double* %20
%209 = load double, double* %23
%210 = fsub double %208, %209
%211 = fmul double %207, %210
store double %211, double* %24
%212 = load double, double* %24
%213 = load double*, double** %4
%214 = getelementptr inbounds double, double* %213, i64 1
%215 = load double, double* %214
%216 = load double, double* %17
%217 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %216, double -1.000000e+00)
%218 = load double, double* %23
%219 = load double, double* %20
%220 = fmul double 2.000000e+00, %219
%221 = call double @llvm.fmuladd.f64(double %217, double %218, double %220)
%222 = load double, double* %15
%223 = fdiv double 2.000000e+00, %222
%224 = fsub double %221, %223
%225 = call double @llvm.fmuladd.f64(double %215, double %224, double %212)
store double %225, double* %24
%226 = load double, double* %18
%227 = load double, double* %17
%228 = call double @llvm.fmuladd.f64(double -6.000000e+00, double %227, double 1.000000e+00)
%229 = fmul double 4.000000e+00, %228
%230 = load double, double* %20
%231 = fmul double %229, %230
%232 = call double @llvm.fmuladd.f64(double 2.400000e+01, double %226, double %231)
store double %232, double* %25
%233 = load double, double* %24
%234 = load double, double* %6
%235 = fmul double 5.000000e-01, %234
%236 = load double*, double** %4
%237 = getelementptr inbounds double, double* %236, i64 0
%238 = load double, double* %237
%239 = fmul double %235, %238
%240 = load double, double* %25
%241 = load double, double* %17
%242 = call double @llvm.fmuladd.f64(double -1.200000e+01, double %241, double 1.000000e+00)
%243 = load double, double* %17
%244 = fmul double 2.400000e+01, %243
%245 = load double, double* %17
%246 = call double @llvm.fmuladd.f64(double %244, double %245, double %242)
%247 = load double, double* %23
%248 = fneg double %246
%249 = call double @llvm.fmuladd.f64(double %248, double %247, double %240)
%250 = call double @llvm.fmuladd.f64(double %239, double %249, double %233)
%251 = load double, double* %18
%252 = fmul double %250, %251
store double %252, double* %24
%253 = load double, double* %24
%254 = load double*, double** %4
%255 = getelementptr inbounds double, double* %254, i64 2
%256 = load double, double* %255
%257 = load double, double* %12
%258 = load double, double* %22
%259 = load double, double* %13
%260 = load double, double* %23
%261 = fmul double %259, %260
%262 = fneg double %261
%263 = call double @llvm.fmuladd.f64(double %257, double %258, double %262)
%264 = fmul double %256, %263
%265 = load double, double* %19
%266 = call double @llvm.fmuladd.f64(double %264, double %265, double %253)
store double %266, double* %24
%267 = load double, double* %24
%268 = load double*, double** %4
%269 = getelementptr inbounds double, double* %268, i64 3
%270 = load double, double* %269
%271 = load double, double* %13
%272 = load double, double* %22
%273 = load double, double* %15
%274 = load double, double* %12
%275 = load double, double* %21
%276 = call double @llvm.fmuladd.f64(double %274, double %275, double -1.000000e+00)
%277 = fmul double %273, %276
%278 = fneg double %277
%279 = call double @llvm.fmuladd.f64(double %271, double %272, double %278)
%280 = fmul double %270, %279
%281 = load double, double* %19
%282 = call double @llvm.fmuladd.f64(double %280, double %281, double %267)
store double %282, double* %24
%283 = load double, double* %24
%284 = load double*, double** %4
%285 = getelementptr inbounds double, double* %284, i64 3
%286 = load double, double* %285
%287 = load double, double* %21
%288 = fsub double %287, 1.000000e+00
%289 = fmul double %286, %288
%290 = load double, double* %17
%291 = call double @llvm.fmuladd.f64(double %289, double %290, double %283)
store double %291, double* %24
%292 = load double, double* %24
%293 = load double, double* %8
%294 = load double, double* %22
%295 = load double, double* %23
%296 = fadd double %294, %295
%297 = fmul double %293, %296
%298 = load double, double* %19
%299 = fneg double %297
%300 = call double @llvm.fmuladd.f64(double %299, double %298, double %292)
store double %300, double* %24
%301 = load double, double* %9
%302 = load double, double* %24
%303 = fneg double %301
%304 = call double @llvm.fmuladd.f64(double %303, double %302, double 1.000000e+00)
%305 = fdiv double 1.000000e+00, %304
store double %305, double* %5
br label %306
306: ; preds = %183, %77
br label %307
307: ; preds = %306, %69
%308 = load double, double* %5
ret double %308
}

LLVM IR (-O2):
define double @sqhcal(double %0, double* nocapture %1) {
%3 = getelementptr inbounds double, double* %1, i64 10
%4 = load double, double* %3
%5 = getelementptr inbounds double, double* %1, i64 12
%6 = load double, double* %5
%7 = getelementptr inbounds double, double* %1, i64 11
%8 = load double, double* %7
%9 = tail call double @exp(double %6)
%10 = load double, double* %5
%11 = fcmp olt double %10, 2.000000e+01
br i1 %11, label %12, label %15
12: ; preds = %2
%13 = fneg double %6
%14 = tail call double @exp(double %13)
br label %15
15: ; preds = %12, %2
%16 = phi double [ %14, %12 ], [ 0.000000e+00, %2 ]
%17 = fadd double %9, %16
%18 = fmul double %17, 5.000000e-01
%19 = fsub double %9, %16
%20 = fmul double %19, 5.000000e-01
%21 = fmul double %6, %6
%22 = getelementptr inbounds double, double* %1, i64 13
%23 = load double, double* %22
%24 = fdiv double %0, %23
%25 = fmul double %24, %24
%26 = fcmp ugt double %24, 1.000000e-08
br i1 %26, label %30, label %27
27: ; preds = %15
%28 = load double, double* %1
%29 = fdiv double -1.000000e+00, %28
br label %81
30: ; preds = %15
%31 = fcmp ugt double %24, 1.000000e-02
br i1 %31, label %79, label %32
32: ; preds = %30
%33 = load double, double* %1
%34 = tail call double @llvm.fmuladd.f64(double %4, double 2.000000e+00, double 8.000000e+00)
%35 = getelementptr inbounds double, double* %1, i64 1
%36 = load double, double* %35
%37 = fmul double %36, 6.000000e+00
%38 = tail call double @llvm.fmuladd.f64(double %33, double %34, double %37)
%39 = getelementptr inbounds double, double* %1, i64 3
%40 = load double, double* %39
%41 = tail call double @llvm.fmuladd.f64(double %40, double -1.200000e+01, double %38)
%42 = fadd double %6, 1.000000e+00
%43 = getelementptr inbounds double, double* %1, i64 2
%44 = load double, double* %43
%45 = fneg double %18
%46 = fmul double %6, %45
%47 = fmul double %46, %44
%48 = tail call double @llvm.fmuladd.f64(double %8, double %42, double %47)
%49 = fadd double %18, -1.000000e+00
%50 = tail call double @llvm.fmuladd.f64(double %40, double %49, double %48)
%51 = fneg double %40
%52 = tail call double @llvm.fmuladd.f64(double %51, double %6, double %44)
%53 = tail call double @llvm.fmuladd.f64(double %52, double %20, double %50)
%54 = fmul double %53, 2.400000e+01
%55 = fdiv double %54, %21
%56 = fsub double %41, %55
%57 = tail call double @llvm.fmuladd.f64(double %4, double 1.500000e+01, double 4.800000e+01)
%58 = fmul double %36, 4.000000e+01
%59 = tail call double @llvm.fmuladd.f64(double %33, double %57, double %58)
%60 = fdiv double %59, 6.000000e+01
%61 = fsub double %40, %60
%62 = fdiv double 4.000000e+00, %21
%63 = tail call double @llvm.fmuladd.f64(double %6, double 7.000000e+00, double 9.000000e+00)
%64 = fmul double %44, -7.000000e+00
%65 = fmul double %6, %64
%66 = tail call double @llvm.fmuladd.f64(double %40, double 9.000000e+00, double %65)
%67 = fmul double %18, %66
%68 = tail call double @llvm.fmuladd.f64(double %8, double %63, double %67)
%69 = fmul double %40, -7.000000e+00
%70 = fmul double %6, %69
%71 = tail call double @llvm.fmuladd.f64(double %44, double 9.000000e+00, double %70)
%72 = tail call double @llvm.fmuladd.f64(double %20, double %71, double %68)
%73 = tail call double @llvm.fmuladd.f64(double %62, double %72, double %61)
%74 = tail call double @llvm.fmuladd.f64(double %25, double %73, double %56)
%75 = load double, double* %3
%76 = fneg double %75
%77 = tail call double @llvm.fmuladd.f64(double %76, double %74, double 1.000000e+00)
%78 = fdiv double 1.000000e+00, %77
br label %81
79: ; preds = %30
%80 = tail call i32 @SINCOS(double %24, double undef, double undef)
br label %81
81: ; preds = %32, %79, %27
%82 = phi double [ %29, %27 ], [ %78, %32 ], [ 0xFFF8000000000000, %79 ]
ret double %82
}