#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 asin(double);
double fabs(double);
double nointpts(double A1, double B1, double A2, double B2, double H1,
                double K1, double H2, double K2, double PHI_1, double PHI_2,
                double H2_TR, double K2_TR, double AA, double BB, double CC,
                double DD, double EE, double FF, int *rtnCode) {
  double relsize = (A1 * B1) - (A2 * B2);
  if (relsize > 0.0) {
    if (((H2_TR * H2_TR) / (A1 * A1) + (K2_TR * K2_TR) / (B1 * B1)) < 1.0) {
      (*rtnCode) = 111;
      return ((2.0 * asin(1.0)) * A2 * B2);
    } else {
      (*rtnCode) = 103;
      return 0.0;
    }
  } else if (relsize < 0.0) {
    if (FF < 0.0) {
      (*rtnCode) = 110;
      return ((2.0 * asin(1.0)) * A1 * B1);
    } else {
      (*rtnCode) = 103;
      return 0.0;
    }
  } else {
    if ((((fabs(H1 - H2)) < +1.0E-06) && (fabs(K1 - K2) < +1.0E-06)) &&
        (fabs(PHI_1 - PHI_2) < +1.0E-06)) {
      (*rtnCode) = 112;
      return ((2.0 * asin(1.0)) * A1 * B1);
    } else {
      (*rtnCode) = 103;
      return 0.0;
    }
  }
}


x86 assembly (clang, -O0):
<nointpts>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  0x58(%rbp),%xmm8
movsd  0x50(%rbp),%xmm8
movsd  0x48(%rbp),%xmm8
movsd  0x40(%rbp),%xmm8
movsd  0x38(%rbp),%xmm8
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
mov    %rdi,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1261 <nointpts+0x151>
movsd  0x20(%rbp),%xmm1
mulsd  0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  0x28(%rbp),%xmm0
mulsd  0x28(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
mulsd  -0x18(%rbp),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xe0a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    124a <nointpts+0x13a>
mov    -0x50(%rbp),%rax
movl   $0x6f,(%rax)
movsd  0xdee(%rip),%xmm0
call   1030 <asin@plt>
movaps %xmm0,%xmm1
movsd  0xdd6(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    138f <nointpts+0x27f>
mov    -0x50(%rbp),%rax
movl   $0x67,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    138f <nointpts+0x27f>
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    12ce <nointpts+0x1be>
xorps  %xmm0,%xmm0
ucomisd 0x58(%rbp),%xmm0
jbe    12b7 <nointpts+0x1a7>
mov    -0x50(%rbp),%rax
movl   $0x6e,(%rax)
movsd  0xd81(%rip),%xmm0
call   1030 <asin@plt>
movaps %xmm0,%xmm1
movsd  0xd69(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    138f <nointpts+0x27f>
mov    -0x50(%rbp),%rax
movl   $0x67,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    138f <nointpts+0x27f>
movsd  -0x30(%rbp),%xmm1
subsd  -0x40(%rbp),%xmm1
movaps 0xd41(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xd15(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    137d <nointpts+0x26d>
movsd  -0x38(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
movaps 0xd1a(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xcee(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    137d <nointpts+0x26d>
movsd  0x10(%rbp),%xmm1
subsd  0x18(%rbp),%xmm1
movaps 0xcf3(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xcc7(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    137d <nointpts+0x26d>
mov    -0x50(%rbp),%rax
movl   $0x70,(%rax)
movsd  0xcbb(%rip),%xmm0
call   1030 <asin@plt>
movaps %xmm0,%xmm1
movsd  0xca3(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    138f <nointpts+0x27f>
mov    -0x50(%rbp),%rax
movl   $0x67,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nointpts>:
movapd %xmm2,%xmm8
movapd %xmm2,%xmm9
mulsd  %xmm3,%xmm9
movapd %xmm0,%xmm2
mulsd  %xmm1,%xmm2
subsd  %xmm9,%xmm2
xorpd  %xmm9,%xmm9
ucomisd %xmm9,%xmm2
jbe    1180 <nointpts+0x80>
movsd  0x20(%rsp),%xmm2
movsd  0x18(%rsp),%xmm4
unpcklpd %xmm2,%xmm4
mulpd  %xmm4,%xmm4
unpcklpd %xmm1,%xmm0
mulpd  %xmm0,%xmm0
divpd  %xmm0,%xmm4
movapd %xmm4,%xmm0
unpckhpd %xmm4,%xmm0
addsd  %xmm4,%xmm0
movsd  0xec4(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    11f6 <nointpts+0xf6>
movl   $0x6f,(%rdi)
mulsd  0xea3(%rip),%xmm8
mulsd  %xmm3,%xmm8
movapd %xmm8,%xmm0
ret
ucomisd %xmm2,%xmm9
jbe    119d <nointpts+0x9d>
xorpd  %xmm8,%xmm8
ucomisd 0x50(%rsp),%xmm8
jbe    1201 <nointpts+0x101>
movl   $0x6e,(%rdi)
jmp    11e9 <nointpts+0xe9>
subsd  %xmm6,%xmm4
andpd  0xe57(%rip),%xmm4
movsd  0xe5f(%rip),%xmm2
ucomisd %xmm4,%xmm2
jbe    11f6 <nointpts+0xf6>
subsd  %xmm7,%xmm5
andpd  0xe3d(%rip),%xmm5
ucomisd %xmm5,%xmm2
jbe    11f6 <nointpts+0xf6>
movsd  0x8(%rsp),%xmm3
subsd  0x10(%rsp),%xmm3
andpd  0xe23(%rip),%xmm3
ucomisd %xmm3,%xmm2
jbe    11f6 <nointpts+0xf6>
movl   $0x70,(%rdi)
mulsd  0xe27(%rip),%xmm0
mulsd  %xmm1,%xmm0
ret
movl   $0x67,(%rdi)
xorpd  %xmm0,%xmm0
ret
movl   $0x67,(%rdi)
movapd %xmm8,%xmm0
ret

LLVM IR (-O0):
define double @nointpts(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, double %17, i32* %18) {
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca i32*
%40 = alloca double
store double %0, double* %21
store double %1, double* %22
store double %2, double* %23
store double %3, double* %24
store double %4, double* %25
store double %5, double* %26
store double %6, double* %27
store double %7, double* %28
store double %8, double* %29
store double %9, double* %30
store double %10, double* %31
store double %11, double* %32
store double %12, double* %33
store double %13, double* %34
store double %14, double* %35
store double %15, double* %36
store double %16, double* %37
store double %17, double* %38
store i32* %18, i32** %39
%41 = load double, double* %21
%42 = load double, double* %22
%43 = load double, double* %23
%44 = load double, double* %24
%45 = fmul double %43, %44
%46 = fneg double %45
%47 = call double @llvm.fmuladd.f64(double %41, double %42, double %46)
store double %47, double* %40
%48 = load double, double* %40
%49 = fcmp ogt double %48, 0.000000e+00
br i1 %49, label %50, label %77
50: ; preds = %19
%51 = load double, double* %31
%52 = load double, double* %31
%53 = fmul double %51, %52
%54 = load double, double* %21
%55 = load double, double* %21
%56 = fmul double %54, %55
%57 = fdiv double %53, %56
%58 = load double, double* %32
%59 = load double, double* %32
%60 = fmul double %58, %59
%61 = load double, double* %22
%62 = load double, double* %22
%63 = fmul double %61, %62
%64 = fdiv double %60, %63
%65 = fadd double %57, %64
%66 = fcmp olt double %65, 1.000000e+00
br i1 %66, label %67, label %75
67: ; preds = %50
%68 = load i32*, i32** %39
store i32 111, i32* %68
%69 = call double @asin(double 1.000000e+00)
%70 = fmul double 2.000000e+00, %69
%71 = load double, double* %23
%72 = fmul double %70, %71
%73 = load double, double* %24
%74 = fmul double %72, %73
store double %74, double* %20
br label %121
75: ; preds = %50
%76 = load i32*, i32** %39
store i32 103, i32* %76
store double 0.000000e+00, double* %20
br label %121
77: ; preds = %19
%78 = load double, double* %40
%79 = fcmp olt double %78, 0.000000e+00
br i1 %79, label %80, label %93
80: ; preds = %77
%81 = load double, double* %38
%82 = fcmp olt double %81, 0.000000e+00
br i1 %82, label %83, label %91
83: ; preds = %80
%84 = load i32*, i32** %39
store i32 110, i32* %84
%85 = call double @asin(double 1.000000e+00)
%86 = fmul double 2.000000e+00, %85
%87 = load double, double* %21
%88 = fmul double %86, %87
%89 = load double, double* %22
%90 = fmul double %88, %89
store double %90, double* %20
br label %121
91: ; preds = %80
%92 = load i32*, i32** %39
store i32 103, i32* %92
store double 0.000000e+00, double* %20
br label %121
93: ; preds = %77
%94 = load double, double* %25
%95 = load double, double* %27
%96 = fsub double %94, %95
%97 = call double @llvm.fabs.f64(double %96)
%98 = fcmp olt double %97, 0x3EB0C6F7A0B5ED8D
br i1 %98, label %99, label %119
99: ; preds = %93
%100 = load double, double* %26
%101 = load double, double* %28
%102 = fsub double %100, %101
%103 = call double @llvm.fabs.f64(double %102)
%104 = fcmp olt double %103, 0x3EB0C6F7A0B5ED8D
br i1 %104, label %105, label %119
105: ; preds = %99
%106 = load double, double* %29
%107 = load double, double* %30
%108 = fsub double %106, %107
%109 = call double @llvm.fabs.f64(double %108)
%110 = fcmp olt double %109, 0x3EB0C6F7A0B5ED8D
br i1 %110, label %111, label %119
111: ; preds = %105
%112 = load i32*, i32** %39
store i32 112, i32* %112
%113 = call double @asin(double 1.000000e+00)
%114 = fmul double 2.000000e+00, %113
%115 = load double, double* %21
%116 = fmul double %114, %115
%117 = load double, double* %22
%118 = fmul double %116, %117
store double %118, double* %20
br label %121
119: ; preds = %105, %99, %93
%120 = load i32*, i32** %39
store i32 103, i32* %120
store double 0.000000e+00, double* %20
br label %121
121: ; preds = %119, %111, %91, %83, %75, %67
%122 = load double, double* %20
ret double %122
}

LLVM IR (-O2):
define double @nointpts(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, double %14, double %15, double %16, double %17, i32* nocapture writeonly %18) {
%20 = fneg double %2
%21 = fmul double %20, %3
%22 = tail call double @llvm.fmuladd.f64(double %0, double %1, double %21)
%23 = fcmp ogt double %22, 0.000000e+00
br i1 %23, label %24, label %40
24: ; preds = %19
%25 = insertelement <2 x double> poison, double %10, i64 0
%26 = insertelement <2 x double> %25, double %11, i64 1
%27 = fmul <2 x double> %26, %26
%28 = insertelement <2 x double> poison, double %0, i64 0
%29 = insertelement <2 x double> %28, double %1, i64 1
%30 = fmul <2 x double> %29, %29
%31 = fdiv <2 x double> %27, %30
%32 = shufflevector <2 x double> %31, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%33 = fadd <2 x double> %31, %32
%34 = extractelement <2 x double> %33, i64 0
%35 = fcmp olt double %34, 1.000000e+00
br i1 %35, label %36, label %39
36: ; preds = %24
store i32 111, i32* %18
%37 = fmul double %2, 0x400921FB54442D18
%38 = fmul double %37, %3
br label %64
39: ; preds = %24
store i32 103, i32* %18
br label %64
40: ; preds = %19
%41 = fcmp olt double %22, 0.000000e+00
br i1 %41, label %42, label %48
42: ; preds = %40
%43 = fcmp olt double %17, 0.000000e+00
br i1 %43, label %44, label %47
44: ; preds = %42
store i32 110, i32* %18
%45 = fmul double %0, 0x400921FB54442D18
%46 = fmul double %45, %1
br label %64
47: ; preds = %42
store i32 103, i32* %18
br label %64
48: ; preds = %40
%49 = fsub double %4, %6
%50 = tail call double @llvm.fabs.f64(double %49)
%51 = fcmp olt double %50, 0x3EB0C6F7A0B5ED8D
br i1 %51, label %52, label %63
52: ; preds = %48
%53 = fsub double %5, %7
%54 = tail call double @llvm.fabs.f64(double %53)
%55 = fcmp olt double %54, 0x3EB0C6F7A0B5ED8D
br i1 %55, label %56, label %63
56: ; preds = %52
%57 = fsub double %8, %9
%58 = tail call double @llvm.fabs.f64(double %57)
%59 = fcmp olt double %58, 0x3EB0C6F7A0B5ED8D
br i1 %59, label %60, label %63
60: ; preds = %56
store i32 112, i32* %18
%61 = fmul double %0, 0x400921FB54442D18
%62 = fmul double %61, %1
br label %64
63: ; preds = %56, %52, %48
store i32 103, i32* %18
br label %64
64: ; preds = %63, %60, %47, %44, %39, %36
%65 = phi double [ %38, %36 ], [ 0.000000e+00, %39 ], [ %46, %44 ], [ 0.000000e+00, %47 ], [ %62, %60 ], [ 0.000000e+00, %63 ]
ret double %65
}