#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 */
double cos(double);
double sin(double);
int precess_1(double *R, double J, int direction, int prec_method) {
  double T, Z = 0, z = 0, TH = 0;
  int i;
  double x[3];
  double sinth, costh, sinZ, cosZ, sinz, cosz, A, B;
  if (J == 2451545.0)
    return (0);
  T = (J - 2451545.0) / 36525.0;
  if (prec_method == 1) {
    Z = ((0.017998 * T + 0.30188) * T + 2306.2181) * T *
        (3.14159265358979323846 / 180.0) / 3600;
    z = ((0.018203 * T + 1.09468) * T + 2306.2181) * T *
        (3.14159265358979323846 / 180.0) / 3600;
    TH = ((-0.041833 * T - 0.42665) * T + 2004.3109) * T *
         (3.14159265358979323846 / 180.0) / 3600;
  } else if (prec_method == 6) {
    Z = (((((-0.0000002 * T - 0.0000327) * T + 0.0179663) * T + 0.3019015) * T +
          2306.0809506) *
             T +
         2.5976176) *
        (3.14159265358979323846 / 180.0) / 3600;
    z = (((((-0.0000003 * T - 0.000047) * T + 0.0182237) * T + 1.0947790) * T +
          2306.0803226) *
             T -
         2.5976176) *
        (3.14159265358979323846 / 180.0) / 3600;
    TH = ((((-0.0000001 * T - 0.0000601) * T - 0.0418251) * T - 0.4269353) * T +
          2004.1917476) *
         T * (3.14159265358979323846 / 180.0) / 3600;
  } else if (prec_method == 8) {
    T = (J - 2451545.0) / 36525.0;
    Z = (((((-0.0000003173 * T - 0.000005971) * T + 0.01801828) * T +
           0.2988499) *
              T +
          2306.083227) *
             T +
         2.650545) *
        (3.14159265358979323846 / 180.0) / 3600;
    z = (((((-0.0000002904 * T - 0.000028596) * T + 0.01826837) * T +
           1.0927348) *
              T +
          2306.077181) *
             T -
         2.650545) *
        (3.14159265358979323846 / 180.0) / 3600;
    TH = ((((-0.00000011274 * T - 0.000007089) * T - 0.04182264) * T -
           0.4294934) *
              T +
          2004.191903) *
         T * (3.14159265358979323846 / 180.0) / 3600;
  } else if (prec_method == 7) {
    Z = ((((((-0.00000000013 * T - 0.0000003040) * T - 0.000005708) * T +
            0.01801752) *
               T +
           0.3023262) *
              T +
          2306.080472) *
             T +
         2.72767) *
        (3.14159265358979323846 / 180.0) / 3600;
    z = ((((((-0.00000000005 * T - 0.0000002486) * T - 0.000028276) * T +
            0.01826676) *
               T +
           1.0956768) *
              T +
          2306.076070) *
             T -
         2.72767) *
        (3.14159265358979323846 / 180.0) / 3600;
    TH = ((((((0.000000000009 * T + 0.00000000036) * T - 0.0000001127) * T -
             0.000007291) *
                T -
            0.04182364) *
               T -
           0.4266980) *
              T +
          2004.190936) *
         T * (3.14159265358979323846 / 180.0) / 3600;
  } else {
    return 0;
  }
  sinth = sin(TH);
  costh = cos(TH);
  sinZ = sin(Z);
  cosZ = cos(Z);
  sinz = sin(z);
  cosz = cos(z);
  A = cosZ * costh;
  B = sinZ * costh;
  if (direction < 0) {
    x[0] = (A * cosz - sinZ * sinz) * R[0] - (B * cosz + cosZ * sinz) * R[1] -
           sinth * cosz * R[2];
    x[1] = (A * sinz + sinZ * cosz) * R[0] - (B * sinz - cosZ * cosz) * R[1] -
           sinth * sinz * R[2];
    x[2] = cosZ * sinth * R[0] - sinZ * sinth * R[1] + costh * R[2];
  } else {
    x[0] = (A * cosz - sinZ * sinz) * R[0] + (A * sinz + sinZ * cosz) * R[1] +
           cosZ * sinth * R[2];
    x[1] = -(B * cosz + cosZ * sinz) * R[0] - (B * sinz - cosZ * cosz) * R[1] -
           sinZ * sinth * R[2];
    x[2] = -sinth * cosz * R[0] - sinth * sinz * R[1] + costh * R[2];
  }
  for (i = 0; i < 3; i++)
    R[i] = x[i];
  return (0);
}


x86 assembly (clang, -O0):
<precess_1>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
mov    %esi,-0x1c(%rbp)
mov    %edx,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xea1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    117b <precess_1+0x5b>
jp     117b <precess_1+0x5b>
movl   $0x0,-0x4(%rbp)
jmp    1cee <precess_1+0xbce>
movsd  -0x18(%rbp),%xmm0
movsd  0xe78(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xe74(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
cmpl   $0x1,-0x20(%rbp)
jne    12a8 <precess_1+0x188>
movsd  -0x28(%rbp),%xmm0
movsd  0x1054(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x1050(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x101b(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xe32(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe1e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xff0(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xfec(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xfc7(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xdde(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdca(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xf84(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf80(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf5b(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xd8a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd76(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1834 <precess_1+0x714>
cmpl   $0x6,-0x20(%rbp)
jne    1451 <precess_1+0x331>
movsd  -0x28(%rbp),%xmm0
movsd  0xf09(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf05(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xee0(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xec3(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xea6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe89(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xced(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcd9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xe4b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe47(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe22(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe05(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xde8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdcb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xc5f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc4b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xd8d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd89(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd64(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd47(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd2a(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xbe1(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbcd(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    182f <precess_1+0x70f>
cmpl   $0x8,-0x20(%rbp)
jne    161c <precess_1+0x4fc>
movsd  -0x18(%rbp),%xmm0
movsd  0xb98(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xb94(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xcb6(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcb2(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc8d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc70(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc53(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc36(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xb22(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb0e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xbf8(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbf4(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbcf(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbb2(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb95(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb78(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xa94(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa80(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xb3a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb36(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb11(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xaf4(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xad7(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xa16(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa02(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    182a <precess_1+0x70a>
cmpl   $0x7,-0x20(%rbp)
jne    1819 <precess_1+0x6f9>
movsd  -0x28(%rbp),%xmm0
movsd  0xa85(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa81(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa5c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa3f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa22(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa05(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9e8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x964(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x950(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0x9aa(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9a6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x981(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x964(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x947(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x92a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x90d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x8c1(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8ad(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0x8cf(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8cb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8a6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x889(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x86c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x84f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x832(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0x819(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x805(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1825 <precess_1+0x705>
movl   $0x0,-0x4(%rbp)
jmp    1cee <precess_1+0xbce>
jmp    182a <precess_1+0x70a>
jmp    182f <precess_1+0x70f>
jmp    1834 <precess_1+0x714>
movsd  -0x40(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
cmpl   $0x0,-0x1c(%rbp)
jge    1abc <precess_1+0x99c>
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm4
ff
movsd  -0x80(%rbp),%xmm3
mulsd  -0x88(%rbp),%xmm3
ff
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x80(%rbp),%xmm3
mulsd  -0x90(%rbp),%xmm3
ff
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x80(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1cb1 <precess_1+0xb91>
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x78(%rbp),%xmm3
mulsd  -0x90(%rbp),%xmm3
ff
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x80(%rbp),%xmm3
mulsd  -0x90(%rbp),%xmm3
ff
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x68(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x0,-0x44(%rbp)
cmpl   $0x3,-0x44(%rbp)
jge    1ce7 <precess_1+0xbc7>
movslq -0x44(%rbp),%rax
movsd  -0x60(%rbp,%rax,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1cb8 <precess_1+0xb98>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<precess_1>:
push   %rbp
push   %rbx
sub    $0x68,%rsp
ucomisd 0xed2(%rip),%xmm0
jne    1136 <precess_1+0x16>
jnp    15e7 <precess_1+0x4c7>
add    $0xffffffff,%edx
cmp    $0x7,%edx
ja     15e7 <precess_1+0x4c7>
mov    %esi,%ebp
mov    %rdi,%rbx
addsd  0xeb9(%rip),%xmm0
divsd  0xeb9(%rip),%xmm0
lea    0x10e2(%rip),%rax
movslq (%rax,%rdx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0x1089(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0x108d(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0x1091(%rip),%xmm2
movsd  0xf09(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xf05(%rip),%xmm3
mulpd  %xmm1,%xmm2
mulsd  %xmm0,%xmm3
addsd  0xefd(%rip),%xmm3
jmp    1372 <precess_1+0x252>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xfd8(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xfdc(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xfe0(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xfe4(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xfe8(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xfec(%rip),%xmm2
movsd  0xe6c(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xe68(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xe64(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xe60(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xe5c(%rip),%xmm3
jmp    1372 <precess_1+0x252>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xe7f(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe83(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe87(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe8b(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe8f(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe93(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe97(%rip),%xmm2
movsd  0xd77(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd73(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd6f(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd6b(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd67(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd63(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd5f(%rip),%xmm3
jmp    1372 <precess_1+0x252>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xe42(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe46(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe4a(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe4e(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe52(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe56(%rip),%xmm2
movsd  0xd0e(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd0a(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd06(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xd02(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xcfe(%rip),%xmm3
movapd %xmm2,%xmm5
unpckhpd %xmm2,%xmm5
movsd  0xd36(%rip),%xmm1
mulsd  %xmm1,%xmm5
movapd %xmm2,%xmm4
movsd  0xd2e(%rip),%xmm2
divsd  %xmm2,%xmm5
movapd %xmm5,(%rsp)
mulsd  %xmm1,%xmm4
divsd  %xmm2,%xmm4
movapd %xmm4,0x30(%rsp)
mulsd  %xmm3,%xmm0
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
movapd %xmm0,0x10(%rsp)
call   1030 <sin@plt>
movapd %xmm0,0x20(%rsp)
movaps 0x10(%rsp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movaps (%rsp),%xmm0
call   1030 <sin@plt>
movaps %xmm0,0x50(%rsp)
movaps (%rsp),%xmm0
call   1040 <cos@plt>
movaps %xmm0,(%rsp)
movaps 0x30(%rsp),%xmm0
call   1030 <sin@plt>
movaps %xmm0,0x40(%rsp)
movapd 0x30(%rsp),%xmm0
call   1040 <cos@plt>
movapd 0x50(%rsp),%xmm1
movapd 0x40(%rsp),%xmm14
movapd (%rsp),%xmm5
movsd  0x10(%rsp),%xmm12
movapd %xmm12,%xmm3
mulsd  %xmm5,%xmm3
movapd %xmm12,%xmm4
mulsd  %xmm1,%xmm4
movapd 0xdf1(%rip),%xmm10
xorpd  %xmm1,%xmm10
movapd %xmm14,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm3,%xmm13
mulsd  %xmm0,%xmm13
subsd  %xmm2,%xmm13
movsd  (%rbx),%xmm8
test   %ebp,%ebp
js     1533 <precess_1+0x413>
mulsd  %xmm0,%xmm1
mulsd  %xmm14,%xmm3
addsd  %xmm1,%xmm3
movsd  0x8(%rbx),%xmm9
movsd  0x10(%rbx),%xmm6
movapd %xmm0,%xmm1
mulsd  %xmm5,%xmm1
movapd %xmm5,%xmm7
mulsd  %xmm14,%xmm7
movapd %xmm4,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm7,%xmm2
movapd 0xd8a(%rip),%xmm7
xorpd  %xmm7,%xmm2
mulsd  %xmm14,%xmm4
subsd  %xmm1,%xmm4
xorpd  %xmm7,%xmm4
unpcklpd %xmm9,%xmm3
movapd 0x20(%rsp),%xmm1
movapd %xmm1,%xmm11
xorpd  %xmm1,%xmm7
mulsd  %xmm14,%xmm1
mulsd  %xmm9,%xmm1
unpcklpd %xmm4,%xmm9
mulpd  %xmm3,%xmm9
unpcklpd %xmm2,%xmm13
movapd %xmm8,%xmm2
unpcklpd %xmm8,%xmm2
mulpd  %xmm13,%xmm2
addpd  %xmm9,%xmm2
unpcklpd %xmm11,%xmm11
unpcklpd %xmm10,%xmm5
mulpd  %xmm11,%xmm5
mulsd  %xmm6,%xmm12
unpcklpd %xmm6,%xmm6
mulpd  %xmm5,%xmm6
addpd  %xmm2,%xmm6
mulsd  %xmm0,%xmm7
mulsd  %xmm8,%xmm7
subsd  %xmm1,%xmm7
addsd  %xmm12,%xmm7
movapd %xmm7,%xmm5
jmp    15de <precess_1+0x4be>
movsd  0x8(%rbx),%xmm9
movsd  0x10(%rbx),%xmm7
mulsd  %xmm0,%xmm1
mulsd  %xmm14,%xmm3
addsd  %xmm1,%xmm3
movapd 0xcdd(%rip),%xmm6
xorpd  %xmm5,%xmm6
movapd %xmm5,%xmm2
unpcklpd %xmm0,%xmm2
unpcklpd %xmm14,%xmm0
unpcklpd %xmm6,%xmm14
mulpd  %xmm2,%xmm14
unpcklpd %xmm4,%xmm4
mulpd  %xmm0,%xmm4
addpd  %xmm14,%xmm4
movapd 0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm10
mulsd  %xmm9,%xmm10
unpcklpd %xmm9,%xmm9
mulpd  %xmm4,%xmm9
unpcklpd %xmm3,%xmm13
movapd %xmm8,%xmm6
unpcklpd %xmm8,%xmm6
mulpd  %xmm13,%xmm6
subpd  %xmm9,%xmm6
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm0,%xmm2
mulsd  %xmm7,%xmm12
unpcklpd %xmm7,%xmm7
mulpd  %xmm2,%xmm7
subpd  %xmm7,%xmm6
mulsd  %xmm1,%xmm5
mulsd  %xmm8,%xmm5
addsd  %xmm10,%xmm5
addsd  %xmm12,%xmm5
movupd %xmm6,(%rbx)
movsd  %xmm5,0x10(%rbx)
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define i32 @precess_1(double* %0, double %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca double*
%7 = alloca double
%8 = alloca i32
%9 = alloca i32
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca i32
%15 = alloca [3 x 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
store double* %0, double** %6
store double %1, double* %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store double 0.000000e+00, double* %11
store double 0.000000e+00, double* %12
store double 0.000000e+00, double* %13
%24 = load double, double* %7
%25 = fcmp oeq double %24, 0x4142B42C80000000
br i1 %25, label %26, label %27
26: ; preds = %4
store i32 0, i32* %5
br label %399
27: ; preds = %4
%28 = load double, double* %7
%29 = fsub double %28, 0x4142B42C80000000
%30 = fdiv double %29, 3.652500e+04
store double %30, double* %10
%31 = load i32, i32* %9
%32 = icmp eq i32 %31, 1
br i1 %32, label %33, label %58
33: ; preds = %27
%34 = load double, double* %10
%35 = call double @llvm.fmuladd.f64(double 1.799800e-02, double %34, double 3.018800e-01)
%36 = load double, double* %10
%37 = call double @llvm.fmuladd.f64(double %35, double %36, double 0x40A2046FAACD9E84)
%38 = load double, double* %10
%39 = fmul double %37, %38
%40 = fmul double %39, 0x3F91DF46A2529D39
%41 = fdiv double %40, 3.600000e+03
store double %41, double* %11
%42 = load double, double* %10
%43 = call double @llvm.fmuladd.f64(double 1.820300e-02, double %42, double 1.094680e+00)
%44 = load double, double* %10
%45 = call double @llvm.fmuladd.f64(double %43, double %44, double 0x40A2046FAACD9E84)
%46 = load double, double* %10
%47 = fmul double %45, %46
%48 = fmul double %47, 0x3F91DF46A2529D39
%49 = fdiv double %48, 3.600000e+03
store double %49, double* %12
%50 = load double, double* %10
%51 = call double @llvm.fmuladd.f64(double -4.183300e-02, double %50, double -4.266500e-01)
%52 = load double, double* %10
%53 = call double @llvm.fmuladd.f64(double %51, double %52, double 0x409F513E5C91D14E)
%54 = load double, double* %10
%55 = fmul double %53, %54
%56 = fmul double %55, 0x3F91DF46A2529D39
%57 = fdiv double %56, 3.600000e+03
store double %57, double* %13
br label %193
58: ; preds = %27
%59 = load i32, i32* %9
%60 = icmp eq i32 %59, 6
br i1 %60, label %61, label %98
61: ; preds = %58
%62 = load double, double* %10
%63 = call double @llvm.fmuladd.f64(double -2.000000e-07, double %62, double -3.270000e-05)
%64 = load double, double* %10
%65 = call double @llvm.fmuladd.f64(double %63, double %64, double 1.796630e-02)
%66 = load double, double* %10
%67 = call double @llvm.fmuladd.f64(double %65, double %66, double 0x3FD3525AAB474107)
%68 = load double, double* %10
%69 = call double @llvm.fmuladd.f64(double %67, double %68, double 0x40A20429725B672F)
%70 = load double, double* %10
%71 = call double @llvm.fmuladd.f64(double %69, double %70, double 0x4004C7EBBC7C1CB1)
%72 = fmul double %71, 0x3F91DF46A2529D39
%73 = fdiv double %72, 3.600000e+03
store double %73, double* %11
%74 = load double, double* %10
%75 = call double @llvm.fmuladd.f64(double -3.000000e-07, double %74, double -4.700000e-05)
%76 = load double, double* %10
%77 = call double @llvm.fmuladd.f64(double %75, double %76, double 1.822370e-02)
%78 = load double, double* %10
%79 = call double @llvm.fmuladd.f64(double %77, double %78, double 0x3FF18436FC158FB4)
%80 = load double, double* %10
%81 = call double @llvm.fmuladd.f64(double %79, double %80, double 0x40A20429200B3842)
%82 = load double, double* %10
%83 = call double @llvm.fmuladd.f64(double %81, double %82, double 0xC004C7EBBC7C1CB1)
%84 = fmul double %83, 0x3F91DF46A2529D39
%85 = fdiv double %84, 3.600000e+03
store double %85, double* %12
%86 = load double, double* %10
%87 = call double @llvm.fmuladd.f64(double 0xBE7AD7F29ABCAF48, double %86, double -6.010000e-05)
%88 = load double, double* %10
%89 = call double @llvm.fmuladd.f64(double %87, double %88, double -4.182510e-02)
%90 = load double, double* %10
%91 = call double @llvm.fmuladd.f64(double %89, double %90, double 0xBFDB52E86FC0823C)
%92 = load double, double* %10
%93 = call double @llvm.fmuladd.f64(double %91, double %92, double 0x409F50C4597B9C59)
%94 = load double, double* %10
%95 = fmul double %93, %94
%96 = fmul double %95, 0x3F91DF46A2529D39
%97 = fdiv double %96, 3.600000e+03
store double %97, double* %13
br label %192
98: ; preds = %58
%99 = load i32, i32* %9
%100 = icmp eq i32 %99, 8
br i1 %100, label %101, label %141
101: ; preds = %98
%102 = load double, double* %7
%103 = fsub double %102, 0x4142B42C80000000
%104 = fdiv double %103, 3.652500e+04
store double %104, double* %10
%105 = load double, double* %10
%106 = call double @llvm.fmuladd.f64(double -3.173000e-07, double %105, double -5.971000e-06)
%107 = load double, double* %10
%108 = call double @llvm.fmuladd.f64(double %106, double %107, double 0x3F9273624D521851)
%109 = load double, double* %10
%110 = call double @llvm.fmuladd.f64(double %108, double %109, double 0x3FD3205B54BA6C78)
%111 = load double, double* %10
%112 = call double @llvm.fmuladd.f64(double %110, double %111, double 0x40A2042A9CBAB64A)
%113 = load double, double* %10
%114 = call double @llvm.fmuladd.f64(double %112, double %113, double 0x40053450EFDC9C4E)
%115 = fmul double %114, 0x3F91DF46A2529D39
%116 = fdiv double %115, 3.600000e+03
store double %116, double* %11
%117 = load double, double* %10
%118 = call double @llvm.fmuladd.f64(double -2.904000e-07, double %117, double -2.859600e-05)
%119 = load double, double* %10
%120 = call double @llvm.fmuladd.f64(double %118, double %119, double 0x3F92B4F18ECE0E96)
%121 = load double, double* %10
%122 = call double @llvm.fmuladd.f64(double %120, double %121, double 0x3FF17BD77C5337B5)
%123 = load double, double* %10
%124 = call double @llvm.fmuladd.f64(double %122, double %123, double 0x40A2042784449DBF)
%125 = load double, double* %10
%126 = call double @llvm.fmuladd.f64(double %124, double %125, double 0xC0053450EFDC9C4E)
%127 = fmul double %126, 0x3F91DF46A2529D39
%128 = fdiv double %127, 3.600000e+03
store double %128, double* %12
%129 = load double, double* %10
%130 = call double @llvm.fmuladd.f64(double -1.127400e-07, double %129, double -7.089000e-06)
%131 = load double, double* %10
%132 = call double @llvm.fmuladd.f64(double %130, double %131, double 0xBFA569C6EE10944D)
%133 = load double, double* %10
%134 = call double @llvm.fmuladd.f64(double %132, double %133, double 0xBFDB7CD1E2B6431E)
%135 = load double, double* %10
%136 = call double @llvm.fmuladd.f64(double %134, double %135, double 0x409F50C482385404)
%137 = load double, double* %10
%138 = fmul double %136, %137
%139 = fmul double %138, 0x3F91DF46A2529D39
%140 = fdiv double %139, 3.600000e+03
store double %140, double* %13
br label %191
141: ; preds = %98
%142 = load i32, i32* %9
%143 = icmp eq i32 %142, 7
br i1 %143, label %144, label %189
144: ; preds = %141
%145 = load double, double* %10
%146 = call double @llvm.fmuladd.f64(double -1.300000e-10, double %145, double -3.040000e-07)
%147 = load double, double* %10
%148 = call double @llvm.fmuladd.f64(double %146, double %147, double -5.708000e-06)
%149 = load double, double* %10
%150 = call double @llvm.fmuladd.f64(double %148, double %149, double 0x3F92732F4C9EBF1D)
%151 = load double, double* %10
%152 = call double @llvm.fmuladd.f64(double %150, double %151, double 0x3FD3594FFD6E5548)
%153 = load double, double* %10
%154 = call double @llvm.fmuladd.f64(double %152, double %153, double 0x40A2042933A0407D)
%155 = load double, double* %10
%156 = call double @llvm.fmuladd.f64(double %154, double %155, double 2.727670e+00)
%157 = fmul double %156, 0x3F91DF46A2529D39
%158 = fdiv double %157, 3.600000e+03
store double %158, double* %11
%159 = load double, double* %10
%160 = call double @llvm.fmuladd.f64(double -5.000000e-11, double %159, double -2.486000e-07)
%161 = load double, double* %10
%162 = call double @llvm.fmuladd.f64(double %160, double %161, double -2.827600e-05)
%163 = load double, double* %10
%164 = call double @llvm.fmuladd.f64(double %162, double %163, double 0x3F92B48583372C92)
%165 = load double, double* %10
%166 = call double @llvm.fmuladd.f64(double %164, double %165, double 0x3FF187E4656FC661)
%167 = load double, double* %10
%168 = call double @llvm.fmuladd.f64(double %166, double %167, double 0x40A20426F2A5A46A)
%169 = load double, double* %10
%170 = call double @llvm.fmuladd.f64(double %168, double %169, double -2.727670e+00)
%171 = fmul double %170, 0x3F91DF46A2529D39
%172 = fdiv double %171, 3.600000e+03
store double %172, double* %12
%173 = load double, double* %10
%174 = call double @llvm.fmuladd.f64(double 9.000000e-12, double %173, double 3.600000e-10)
%175 = load double, double* %10
%176 = call double @llvm.fmuladd.f64(double %174, double %175, double -1.127000e-07)
%177 = load double, double* %10
%178 = call double @llvm.fmuladd.f64(double %176, double %177, double -7.291000e-06)
%179 = load double, double* %10
%180 = call double @llvm.fmuladd.f64(double %178, double %179, double 0xBFA569E87BFFD5B9)
%181 = load double, double* %10
%182 = call double @llvm.fmuladd.f64(double %180, double %181, double -4.266980e-01)
%183 = load double, double* %10
%184 = call double @llvm.fmuladd.f64(double %182, double %183, double 0x409F50C384BA0E84)
%185 = load double, double* %10
%186 = fmul double %184, %185
%187 = fmul double %186, 0x3F91DF46A2529D39
%188 = fdiv double %187, 3.600000e+03
store double %188, double* %13
br label %190
189: ; preds = %141
store i32 0, i32* %5
br label %399
190: ; preds = %144
br label %191
191: ; preds = %190, %101
br label %192
192: ; preds = %191, %61
br label %193
193: ; preds = %192, %33
%194 = load double, double* %13
%195 = call double @sin(double %194)
store double %195, double* %16
%196 = load double, double* %13
%197 = call double @cos(double %196)
store double %197, double* %17
%198 = load double, double* %11
%199 = call double @sin(double %198)
store double %199, double* %18
%200 = load double, double* %11
%201 = call double @cos(double %200)
store double %201, double* %19
%202 = load double, double* %12
%203 = call double @sin(double %202)
store double %203, double* %20
%204 = load double, double* %12
%205 = call double @cos(double %204)
store double %205, double* %21
%206 = load double, double* %19
%207 = load double, double* %17
%208 = fmul double %206, %207
store double %208, double* %22
%209 = load double, double* %18
%210 = load double, double* %17
%211 = fmul double %209, %210
store double %211, double* %23
%212 = load i32, i32* %8
%213 = icmp slt i32 %212, 0
br i1 %213, label %214, label %298
214: ; preds = %193
%215 = load double, double* %22
%216 = load double, double* %21
%217 = load double, double* %18
%218 = load double, double* %20
%219 = fmul double %217, %218
%220 = fneg double %219
%221 = call double @llvm.fmuladd.f64(double %215, double %216, double %220)
%222 = load double*, double** %6
%223 = getelementptr inbounds double, double* %222, i64 0
%224 = load double, double* %223
%225 = load double, double* %23
%226 = load double, double* %21
%227 = load double, double* %19
%228 = load double, double* %20
%229 = fmul double %227, %228
%230 = call double @llvm.fmuladd.f64(double %225, double %226, double %229)
%231 = load double*, double** %6
%232 = getelementptr inbounds double, double* %231, i64 1
%233 = load double, double* %232
%234 = fmul double %230, %233
%235 = fneg double %234
%236 = call double @llvm.fmuladd.f64(double %221, double %224, double %235)
%237 = load double, double* %16
%238 = load double, double* %21
%239 = fmul double %237, %238
%240 = load double*, double** %6
%241 = getelementptr inbounds double, double* %240, i64 2
%242 = load double, double* %241
%243 = fneg double %239
%244 = call double @llvm.fmuladd.f64(double %243, double %242, double %236)
%245 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
store double %244, double* %245
%246 = load double, double* %22
%247 = load double, double* %20
%248 = load double, double* %18
%249 = load double, double* %21
%250 = fmul double %248, %249
%251 = call double @llvm.fmuladd.f64(double %246, double %247, double %250)
%252 = load double*, double** %6
%253 = getelementptr inbounds double, double* %252, i64 0
%254 = load double, double* %253
%255 = load double, double* %23
%256 = load double, double* %20
%257 = load double, double* %19
%258 = load double, double* %21
%259 = fmul double %257, %258
%260 = fneg double %259
%261 = call double @llvm.fmuladd.f64(double %255, double %256, double %260)
%262 = load double*, double** %6
%263 = getelementptr inbounds double, double* %262, i64 1
%264 = load double, double* %263
%265 = fmul double %261, %264
%266 = fneg double %265
%267 = call double @llvm.fmuladd.f64(double %251, double %254, double %266)
%268 = load double, double* %16
%269 = load double, double* %20
%270 = fmul double %268, %269
%271 = load double*, double** %6
%272 = getelementptr inbounds double, double* %271, i64 2
%273 = load double, double* %272
%274 = fneg double %270
%275 = call double @llvm.fmuladd.f64(double %274, double %273, double %267)
%276 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
store double %275, double* %276
%277 = load double, double* %19
%278 = load double, double* %16
%279 = fmul double %277, %278
%280 = load double*, double** %6
%281 = getelementptr inbounds double, double* %280, i64 0
%282 = load double, double* %281
%283 = load double, double* %18
%284 = load double, double* %16
%285 = fmul double %283, %284
%286 = load double*, double** %6
%287 = getelementptr inbounds double, double* %286, i64 1
%288 = load double, double* %287
%289 = fmul double %285, %288
%290 = fneg double %289
%291 = call double @llvm.fmuladd.f64(double %279, double %282, double %290)
%292 = load double, double* %17
%293 = load double*, double** %6
%294 = getelementptr inbounds double, double* %293, i64 2
%295 = load double, double* %294
%296 = call double @llvm.fmuladd.f64(double %292, double %295, double %291)
%297 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
store double %296, double* %297
br label %382
298: ; preds = %193
%299 = load double, double* %22
%300 = load double, double* %21
%301 = load double, double* %18
%302 = load double, double* %20
%303 = fmul double %301, %302
%304 = fneg double %303
%305 = call double @llvm.fmuladd.f64(double %299, double %300, double %304)
%306 = load double*, double** %6
%307 = getelementptr inbounds double, double* %306, i64 0
%308 = load double, double* %307
%309 = load double, double* %22
%310 = load double, double* %20
%311 = load double, double* %18
%312 = load double, double* %21
%313 = fmul double %311, %312
%314 = call double @llvm.fmuladd.f64(double %309, double %310, double %313)
%315 = load double*, double** %6
%316 = getelementptr inbounds double, double* %315, i64 1
%317 = load double, double* %316
%318 = fmul double %314, %317
%319 = call double @llvm.fmuladd.f64(double %305, double %308, double %318)
%320 = load double, double* %19
%321 = load double, double* %16
%322 = fmul double %320, %321
%323 = load double*, double** %6
%324 = getelementptr inbounds double, double* %323, i64 2
%325 = load double, double* %324
%326 = call double @llvm.fmuladd.f64(double %322, double %325, double %319)
%327 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
store double %326, double* %327
%328 = load double, double* %23
%329 = load double, double* %21
%330 = load double, double* %19
%331 = load double, double* %20
%332 = fmul double %330, %331
%333 = call double @llvm.fmuladd.f64(double %328, double %329, double %332)
%334 = fneg double %333
%335 = load double*, double** %6
%336 = getelementptr inbounds double, double* %335, i64 0
%337 = load double, double* %336
%338 = load double, double* %23
%339 = load double, double* %20
%340 = load double, double* %19
%341 = load double, double* %21
%342 = fmul double %340, %341
%343 = fneg double %342
%344 = call double @llvm.fmuladd.f64(double %338, double %339, double %343)
%345 = load double*, double** %6
%346 = getelementptr inbounds double, double* %345, i64 1
%347 = load double, double* %346
%348 = fmul double %344, %347
%349 = fneg double %348
%350 = call double @llvm.fmuladd.f64(double %334, double %337, double %349)
%351 = load double, double* %18
%352 = load double, double* %16
%353 = fmul double %351, %352
%354 = load double*, double** %6
%355 = getelementptr inbounds double, double* %354, i64 2
%356 = load double, double* %355
%357 = fneg double %353
%358 = call double @llvm.fmuladd.f64(double %357, double %356, double %350)
%359 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
store double %358, double* %359
%360 = load double, double* %16
%361 = fneg double %360
%362 = load double, double* %21
%363 = fmul double %361, %362
%364 = load double*, double** %6
%365 = getelementptr inbounds double, double* %364, i64 0
%366 = load double, double* %365
%367 = load double, double* %16
%368 = load double, double* %20
%369 = fmul double %367, %368
%370 = load double*, double** %6
%371 = getelementptr inbounds double, double* %370, i64 1
%372 = load double, double* %371
%373 = fmul double %369, %372
%374 = fneg double %373
%375 = call double @llvm.fmuladd.f64(double %363, double %366, double %374)
%376 = load double, double* %17
%377 = load double*, double** %6
%378 = getelementptr inbounds double, double* %377, i64 2
%379 = load double, double* %378
%380 = call double @llvm.fmuladd.f64(double %376, double %379, double %375)
%381 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
store double %380, double* %381
br label %382
382: ; preds = %298, %214
store i32 0, i32* %14
br label %383
383: ; preds = %395, %382
%384 = load i32, i32* %14
%385 = icmp slt i32 %384, 3
br i1 %385, label %386, label %398
386: ; preds = %383
%387 = load i32, i32* %14
%388 = sext i32 %387 to i64
%389 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 %388
%390 = load double, double* %389
%391 = load double*, double** %6
%392 = load i32, i32* %14
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds double, double* %391, i64 %393
store double %390, double* %394
br label %395
395: ; preds = %386
%396 = load i32, i32* %14
%397 = add nsw i32 %396, 1
store i32 %397, i32* %14
br label %383
398: ; preds = %383
store i32 0, i32* %5
br label %399
399: ; preds = %398, %189, %26
%400 = load i32, i32* %5
ret i32 %400
}

LLVM IR (-O2):
define i32 @precess_1(double* nocapture %0, double %1, i32 %2, i32 %3) {
%5 = fcmp oeq double %1, 0x4142B42C80000000
br i1 %5, label %163, label %6
6: ; preds = %4
%7 = fadd double %1, 0xC142B42C80000000
%8 = fdiv double %7, 3.652500e+04
switch i32 %3, label %163 [
i32 1, label %9
i32 6, label %17
i32 8, label %29
i32 7, label %41
]
9: ; preds = %6
%10 = insertelement <2 x double> poison, double %8, i64 0
%11 = shufflevector <2 x double> %10, <2 x double> poison, <2 x i32> zeroinitializer
%12 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %11, <2 x double> <double 1.820300e-02, double 1.799800e-02>, <2 x double> <double 1.094680e+00, double 3.018800e-01>)
%13 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %12, <2 x double> %11, <2 x double> <double 0x40A2046FAACD9E84, double 0x40A2046FAACD9E84>)
%14 = fmul <2 x double> %11, %13
%15 = tail call double @llvm.fmuladd.f64(double %8, double -4.183300e-02, double -4.266500e-01)
%16 = tail call double @llvm.fmuladd.f64(double %15, double %8, double 0x409F513E5C91D14E)
br label %56
17: ; preds = %6
%18 = insertelement <2 x double> poison, double %8, i64 0
%19 = shufflevector <2 x double> %18, <2 x double> poison, <2 x i32> zeroinitializer
%20 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %19, <2 x double> <double -3.000000e-07, double -2.000000e-07>, <2 x double> <double -4.700000e-05, double -3.270000e-05>)
%21 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %20, <2 x double> %19, <2 x double> <double 1.822370e-02, double 1.796630e-02>)
%22 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %21, <2 x double> %19, <2 x double> <double 0x3FF18436FC158FB4, double 0x3FD3525AAB474107>)
%23 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %22, <2 x double> %19, <2 x double> <double 0x40A20429200B3842, double 0x40A20429725B672F>)
%24 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %23, <2 x double> %19, <2 x double> <double 0xC004C7EBBC7C1CB1, double 0x4004C7EBBC7C1CB1>)
%25 = tail call double @llvm.fmuladd.f64(double %8, double 0xBE7AD7F29ABCAF48, double -6.010000e-05)
%26 = tail call double @llvm.fmuladd.f64(double %25, double %8, double -4.182510e-02)
%27 = tail call double @llvm.fmuladd.f64(double %26, double %8, double 0xBFDB52E86FC0823C)
%28 = tail call double @llvm.fmuladd.f64(double %27, double %8, double 0x409F50C4597B9C59)
br label %56
29: ; preds = %6
%30 = insertelement <2 x double> poison, double %8, i64 0
%31 = shufflevector <2 x double> %30, <2 x double> poison, <2 x i32> zeroinitializer
%32 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %31, <2 x double> <double -2.904000e-07, double -3.173000e-07>, <2 x double> <double -2.859600e-05, double -5.971000e-06>)
%33 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %32, <2 x double> %31, <2 x double> <double 0x3F92B4F18ECE0E96, double 0x3F9273624D521851>)
%34 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %33, <2 x double> %31, <2 x double> <double 0x3FF17BD77C5337B5, double 0x3FD3205B54BA6C78>)
%35 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %34, <2 x double> %31, <2 x double> <double 0x40A2042784449DBF, double 0x40A2042A9CBAB64A>)
%36 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %35, <2 x double> %31, <2 x double> <double 0xC0053450EFDC9C4E, double 0x40053450EFDC9C4E>)
%37 = tail call double @llvm.fmuladd.f64(double %8, double -1.127400e-07, double -7.089000e-06)
%38 = tail call double @llvm.fmuladd.f64(double %37, double %8, double 0xBFA569C6EE10944D)
%39 = tail call double @llvm.fmuladd.f64(double %38, double %8, double 0xBFDB7CD1E2B6431E)
%40 = tail call double @llvm.fmuladd.f64(double %39, double %8, double 0x409F50C482385404)
br label %56
41: ; preds = %6
%42 = insertelement <2 x double> poison, double %8, i64 0
%43 = shufflevector <2 x double> %42, <2 x double> poison, <2 x i32> zeroinitializer
%44 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %43, <2 x double> <double -5.000000e-11, double -1.300000e-10>, <2 x double> <double -2.486000e-07, double -3.040000e-07>)
%45 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %44, <2 x double> %43, <2 x double> <double -2.827600e-05, double -5.708000e-06>)
%46 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %45, <2 x double> %43, <2 x double> <double 0x3F92B48583372C92, double 0x3F92732F4C9EBF1D>)
%47 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %46, <2 x double> %43, <2 x double> <double 0x3FF187E4656FC661, double 0x3FD3594FFD6E5548>)
%48 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %47, <2 x double> %43, <2 x double> <double 0x40A20426F2A5A46A, double 0x40A2042933A0407D>)
%49 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %48, <2 x double> %43, <2 x double> <double -2.727670e+00, double 2.727670e+00>)
%50 = tail call double @llvm.fmuladd.f64(double %8, double 9.000000e-12, double 3.600000e-10)
%51 = tail call double @llvm.fmuladd.f64(double %50, double %8, double -1.127000e-07)
%52 = tail call double @llvm.fmuladd.f64(double %51, double %8, double -7.291000e-06)
%53 = tail call double @llvm.fmuladd.f64(double %52, double %8, double 0xBFA569E87BFFD5B9)
%54 = tail call double @llvm.fmuladd.f64(double %53, double %8, double -4.266980e-01)
%55 = tail call double @llvm.fmuladd.f64(double %54, double %8, double 0x409F50C384BA0E84)
br label %56
56: ; preds = %17, %41, %29, %9
%57 = phi double [ %16, %9 ], [ %28, %17 ], [ %40, %29 ], [ %55, %41 ]
%58 = phi <2 x double> [ %14, %9 ], [ %24, %17 ], [ %36, %29 ], [ %49, %41 ]
%59 = extractelement <2 x double> %58, i64 1
%60 = fmul double %59, 0x3F91DF46A2529D39
%61 = fdiv double %60, 3.600000e+03
%62 = extractelement <2 x double> %58, i64 0
%63 = fmul double %62, 0x3F91DF46A2529D39
%64 = fdiv double %63, 3.600000e+03
%65 = fmul double %8, %57
%66 = fmul double %65, 0x3F91DF46A2529D39
%67 = fdiv double %66, 3.600000e+03
%68 = tail call double @sin(double %67)
%69 = tail call double @cos(double %67)
%70 = tail call double @sin(double %61)
%71 = tail call double @cos(double %61)
%72 = tail call double @sin(double %64)
%73 = tail call double @cos(double %64)
%74 = fmul double %69, %71
%75 = fmul double %69, %70
%76 = icmp slt i32 %2, 0
%77 = fneg double %70
%78 = fmul double %72, %77
%79 = tail call double @llvm.fmuladd.f64(double %74, double %73, double %78)
%80 = load double, double* %0
br i1 %76, label %81, label %120
81: ; preds = %56
%82 = getelementptr inbounds double, double* %0, i64 1
%83 = load double, double* %82
%84 = getelementptr inbounds double, double* %0, i64 2
%85 = load double, double* %84
%86 = fneg double %68
%87 = fmul double %70, %73
%88 = tail call double @llvm.fmuladd.f64(double %74, double %72, double %87)
%89 = fneg double %71
%90 = insertelement <2 x double> poison, double %71, i64 0
%91 = insertelement <2 x double> %90, double %73, i64 1
%92 = insertelement <2 x double> poison, double %72, i64 0
%93 = insertelement <2 x double> %92, double %89, i64 1
%94 = fmul <2 x double> %91, %93
%95 = insertelement <2 x double> poison, double %75, i64 0
%96 = shufflevector <2 x double> %95, <2 x double> poison, <2 x i32> zeroinitializer
%97 = insertelement <2 x double> poison, double %73, i64 0
%98 = insertelement <2 x double> %97, double %72, i64 1
%99 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %96, <2 x double> %98, <2 x double> %94)
%100 = fneg <2 x double> %99
%101 = insertelement <2 x double> poison, double %83, i64 0
%102 = shufflevector <2 x double> %101, <2 x double> poison, <2 x i32> zeroinitializer
%103 = fmul <2 x double> %102, %100
%104 = insertelement <2 x double> poison, double %79, i64 0
%105 = insertelement <2 x double> %104, double %88, i64 1
%106 = insertelement <2 x double> poison, double %80, i64 0
%107 = shufflevector <2 x double> %106, <2 x double> poison, <2 x i32> zeroinitializer
%108 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %105, <2 x double> %107, <2 x double> %103)
%109 = insertelement <2 x double> poison, double %86, i64 0
%110 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> zeroinitializer
%111 = fmul <2 x double> %98, %110
%112 = insertelement <2 x double> poison, double %85, i64 0
%113 = shufflevector <2 x double> %112, <2 x double> poison, <2 x i32> zeroinitializer
%114 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %111, <2 x double> %113, <2 x double> %108)
%115 = fmul double %68, %71
%116 = fmul double %68, %77
%117 = fmul double %116, %83
%118 = tail call double @llvm.fmuladd.f64(double %115, double %80, double %117)
%119 = tail call double @llvm.fmuladd.f64(double %69, double %85, double %118)
br label %158
120: ; preds = %56
%121 = fmul double %70, %73
%122 = tail call double @llvm.fmuladd.f64(double %74, double %72, double %121)
%123 = getelementptr inbounds double, double* %0, i64 1
%124 = load double, double* %123
%125 = getelementptr inbounds double, double* %0, i64 2
%126 = load double, double* %125
%127 = fmul double %71, %72
%128 = tail call double @llvm.fmuladd.f64(double %75, double %73, double %127)
%129 = fneg double %128
%130 = fneg double %71
%131 = fmul double %73, %130
%132 = tail call double @llvm.fmuladd.f64(double %75, double %72, double %131)
%133 = fneg double %132
%134 = insertelement <2 x double> poison, double %122, i64 0
%135 = insertelement <2 x double> %134, double %124, i64 1
%136 = insertelement <2 x double> poison, double %124, i64 0
%137 = insertelement <2 x double> %136, double %133, i64 1
%138 = fmul <2 x double> %135, %137
%139 = insertelement <2 x double> poison, double %79, i64 0
%140 = insertelement <2 x double> %139, double %129, i64 1
%141 = insertelement <2 x double> poison, double %80, i64 0
%142 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> zeroinitializer
%143 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %140, <2 x double> %142, <2 x double> %138)
%144 = insertelement <2 x double> poison, double %68, i64 0
%145 = shufflevector <2 x double> %144, <2 x double> poison, <2 x i32> zeroinitializer
%146 = insertelement <2 x double> poison, double %71, i64 0
%147 = insertelement <2 x double> %146, double %77, i64 1
%148 = fmul <2 x double> %145, %147
%149 = insertelement <2 x double> poison, double %126, i64 0
%150 = shufflevector <2 x double> %149, <2 x double> poison, <2 x i32> zeroinitializer
%151 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %148, <2 x double> %150, <2 x double> %143)
%152 = fneg double %68
%153 = fmul double %73, %152
%154 = fmul double %72, %152
%155 = fmul double %154, %124
%156 = tail call double @llvm.fmuladd.f64(double %153, double %80, double %155)
%157 = tail call double @llvm.fmuladd.f64(double %69, double %126, double %156)
br label %158
158: ; preds = %120, %81
%159 = phi double [ %119, %81 ], [ %157, %120 ]
%160 = phi <2 x double> [ %114, %81 ], [ %151, %120 ]
%161 = bitcast double* %0 to <2 x double>*
store <2 x double> %160, <2 x double>* %161
%162 = getelementptr inbounds double, double* %0, i64 2
store double %159, double* %162
br label %163
163: ; preds = %158, %6, %4
ret i32 0
}