void cauchy_neo(double *x, int sigInLength, double *psir, double *psii,
                int sigOutLength, double ys) {
  int count;
  double x2, con, econ;
  for (count = 0; count < sigInLength; count++) {
    x2 = x[count] * x[count];
    con = 1 - x2;
    econ = (1 - x2) * (1 - x2) + 4 * x2;
    psir[count] = con / (2 * 3.1415926535897931159980 * econ * ys);
    psii[count] = 2 * x2 / (2 * 3.1415926535897931159980 * econ * ys);
  }
  return;
}


x86 assembly (clang, -O0):
<cauchy_neo>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11fa <cauchy_neo+0xfa>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xec2(%rip),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xeb0(%rip),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  0xea3(%rip),%xmm2
subsd  -0x40(%rbp),%xmm2
movsd  0xe8e(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xe5f(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xe44(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0xe2f(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1123 <cauchy_neo+0x23>
pop    %rbp
ret

x86 assembly (clang, -O2):
<cauchy_neo>:
push   %rbp
push   %r15
push   %r14
push   %rbx
test   %esi,%esi
jle    125c <cauchy_neo+0x15c>
mov    %esi,%r8d
cmp    $0x1,%esi
jne    111d <cauchy_neo+0x1d>
xor    %esi,%esi
jmp    11f2 <cauchy_neo+0xf2>
lea    (%rcx,%r8,8),%rsi
cmp    %rdx,%rsi
seta   %r15b
lea    (%rdx,%r8,8),%rbx
cmp    %rcx,%rbx
seta   %r14b
lea    (%rdi,%r8,8),%rbp
cmp    %rdx,%rbp
seta   %al
cmp    %rdi,%rbx
seta   %r10b
cmp    %rcx,%rbp
seta   %r9b
cmp    %rdi,%rsi
seta   %r11b
xor    %esi,%esi
test   %r14b,%r15b
jne    11f2 <cauchy_neo+0xf2>
and    %r10b,%al
jne    11f2 <cauchy_neo+0xf2>
and    %r11b,%r9b
jne    11f2 <cauchy_neo+0xf2>
mov    %r8d,%esi
and    $0xfffffffe,%esi
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
xor    %eax,%eax
movapd 0xe78(%rip),%xmm8
movapd 0xe80(%rip),%xmm3
movapd 0xe88(%rip),%xmm4
nopl   0x0(%rax,%rax,1)
movupd (%rdi,%rax,8),%xmm5
mulpd  %xmm5,%xmm5
movapd %xmm8,%xmm2
subpd  %xmm5,%xmm2
movapd %xmm5,%xmm7
mulpd  %xmm3,%xmm7
movapd %xmm2,%xmm6
mulpd  %xmm2,%xmm6
addpd  %xmm7,%xmm6
mulpd  %xmm4,%xmm6
mulpd  %xmm1,%xmm6
divpd  %xmm6,%xmm2
movupd %xmm2,(%rdx,%rax,8)
addpd  %xmm5,%xmm5
divpd  %xmm6,%xmm5
movupd %xmm5,(%rcx,%rax,8)
add    $0x2,%rax
cmp    %rax,%rsi
jne    11a0 <cauchy_neo+0xa0>
cmp    %r8,%rsi
je     125c <cauchy_neo+0x15c>
movsd  0xe36(%rip),%xmm1
movsd  0xe36(%rip),%xmm2
movsd  0xe36(%rip),%xmm3
nopw   0x0(%rax,%rax,1)
movsd  (%rdi,%rsi,8),%xmm4
mulsd  %xmm4,%xmm4
movapd %xmm1,%xmm5
subsd  %xmm4,%xmm5
movapd %xmm4,%xmm6
mulsd  %xmm2,%xmm6
movapd %xmm5,%xmm7
mulsd  %xmm5,%xmm7
addsd  %xmm6,%xmm7
mulsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm7
divsd  %xmm7,%xmm5
movsd  %xmm5,(%rdx,%rsi,8)
addsd  %xmm4,%xmm4
divsd  %xmm7,%xmm4
movsd  %xmm4,(%rcx,%rsi,8)
add    $0x1,%rsi
cmp    %rsi,%r8
jne    1210 <cauchy_neo+0x110>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @cauchy_neo(double* %0, i32 %1, double* %2, double* %3, i32 %4, double %5) {
%7 = alloca double*
%8 = alloca i32
%9 = alloca double*
%10 = alloca double*
%11 = alloca i32
%12 = alloca double
%13 = alloca i32
%14 = alloca double
%15 = alloca double
%16 = alloca double
store double* %0, double** %7
store i32 %1, i32* %8
store double* %2, double** %9
store double* %3, double** %10
store i32 %4, i32* %11
store double %5, double* %12
store i32 0, i32* %13
br label %17
17: ; preds = %63, %6
%18 = load i32, i32* %13
%19 = load i32, i32* %8
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %66
21: ; preds = %17
%22 = load double*, double** %7
%23 = load i32, i32* %13
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds double, double* %22, i64 %24
%26 = load double, double* %25
%27 = load double*, double** %7
%28 = load i32, i32* %13
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds double, double* %27, i64 %29
%31 = load double, double* %30
%32 = fmul double %26, %31
store double %32, double* %14
%33 = load double, double* %14
%34 = fsub double 1.000000e+00, %33
store double %34, double* %15
%35 = load double, double* %14
%36 = fsub double 1.000000e+00, %35
%37 = load double, double* %14
%38 = fsub double 1.000000e+00, %37
%39 = load double, double* %14
%40 = fmul double 4.000000e+00, %39
%41 = call double @llvm.fmuladd.f64(double %36, double %38, double %40)
store double %41, double* %16
%42 = load double, double* %15
%43 = load double, double* %16
%44 = fmul double 0x401921FB54442D18, %43
%45 = load double, double* %12
%46 = fmul double %44, %45
%47 = fdiv double %42, %46
%48 = load double*, double** %9
%49 = load i32, i32* %13
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double, double* %48, i64 %50
store double %47, double* %51
%52 = load double, double* %14
%53 = fmul double 2.000000e+00, %52
%54 = load double, double* %16
%55 = fmul double 0x401921FB54442D18, %54
%56 = load double, double* %12
%57 = fmul double %55, %56
%58 = fdiv double %53, %57
%59 = load double*, double** %10
%60 = load i32, i32* %13
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds double, double* %59, i64 %61
store double %58, double* %62
br label %63
63: ; preds = %21
%64 = load i32, i32* %13
%65 = add nsw i32 %64, 1
store i32 %65, i32* %13
br label %17
66: ; preds = %17
ret void
}

LLVM IR (-O2):
define void @cauchy_neo(double* nocapture %0, i32 %1, double* nocapture writeonly %2, double* nocapture writeonly %3, i32 %4, double %5) {
%7 = icmp sgt i32 %1, 0
br i1 %7, label %8, label %71
8: ; preds = %6
%9 = zext i32 %1 to i64
%10 = icmp eq i32 %1, 1
br i1 %10, label %52, label %11
11: ; preds = %8
%12 = getelementptr double, double* %2, i64 %9
%13 = getelementptr double, double* %3, i64 %9
%14 = getelementptr double, double* %0, i64 %9
%15 = icmp ugt double* %13, %2
%16 = icmp ugt double* %12, %3
%17 = and i1 %15, %16
%18 = icmp ugt double* %14, %2
%19 = icmp ugt double* %12, %0
%20 = and i1 %18, %19
%21 = or i1 %17, %20
%22 = icmp ugt double* %14, %3
%23 = icmp ugt double* %13, %0
%24 = and i1 %22, %23
%25 = or i1 %21, %24
br i1 %25, label %52, label %26
26: ; preds = %11
%27 = and i64 %9, 4294967294
%28 = insertelement <2 x double> poison, double %5, i64 0
%29 = shufflevector <2 x double> %28, <2 x double> poison, <2 x i32> zeroinitializer
br label %30
30: ; preds = %30, %26
%31 = phi i64 [ 0, %26 ], [ %48, %30 ]
%32 = getelementptr inbounds double, double* %0, i64 %31
%33 = bitcast double* %32 to <2 x double>*
%34 = load <2 x double>, <2 x double>* %33
%35 = fmul <2 x double> %34, %34
%36 = fsub <2 x double> <double 1.000000e+00, double 1.000000e+00>, %35
%37 = fmul <2 x double> %35, <double 4.000000e+00, double 4.000000e+00>
%38 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %36, <2 x double> %36, <2 x double> %37)
%39 = fmul <2 x double> %38, <double 0x401921FB54442D18, double 0x401921FB54442D18>
%40 = fmul <2 x double> %39, %29
%41 = fdiv <2 x double> %36, %40
%42 = getelementptr inbounds double, double* %2, i64 %31
%43 = bitcast double* %42 to <2 x double>*
store <2 x double> %41, <2 x double>* %43
%44 = fmul <2 x double> %35, <double 2.000000e+00, double 2.000000e+00>
%45 = fdiv <2 x double> %44, %40
%46 = getelementptr inbounds double, double* %3, i64 %31
%47 = bitcast double* %46 to <2 x double>*
store <2 x double> %45, <2 x double>* %47
%48 = add nuw i64 %31, 2
%49 = icmp eq i64 %48, %27
br i1 %49, label %50, label %30
50: ; preds = %30
%51 = icmp eq i64 %27, %9
br i1 %51, label %71, label %52
52: ; preds = %11, %8, %50
%53 = phi i64 [ 0, %11 ], [ 0, %8 ], [ %27, %50 ]
br label %54
54: ; preds = %52, %54
%55 = phi i64 [ %69, %54 ], [ %53, %52 ]
%56 = getelementptr inbounds double, double* %0, i64 %55
%57 = load double, double* %56
%58 = fmul double %57, %57
%59 = fsub double 1.000000e+00, %58
%60 = fmul double %58, 4.000000e+00
%61 = tail call double @llvm.fmuladd.f64(double %59, double %59, double %60)
%62 = fmul double %61, 0x401921FB54442D18
%63 = fmul double %62, %5
%64 = fdiv double %59, %63
%65 = getelementptr inbounds double, double* %2, i64 %55
store double %64, double* %65
%66 = fmul double %58, 2.000000e+00
%67 = fdiv double %66, %63
%68 = getelementptr inbounds double, double* %3, i64 %55
store double %67, double* %68
%69 = add nuw nsw i64 %55, 1
%70 = icmp eq i64 %69, %9
br i1 %70, label %71, label %54
71: ; preds = %54, %50, %6
ret void
}