#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*/ GL_FLAT;
int /*<<< orphan*/ GL_QUADS;
int /*<<< orphan*/ GL_QUAD_STRIP;
int /*<<< orphan*/ GL_SMOOTH;
int /*<<< orphan*/ glBegin(int /*<<< orphan*/);
int /*<<< orphan*/ glEnd();
int /*<<< orphan*/ glNormal3f(double, double, double);
int /*<<< orphan*/ glPopMatrix();
int /*<<< orphan*/ glPushMatrix();
int /*<<< orphan*/ glShadeModel(int /*<<< orphan*/);
int /*<<< orphan*/ glVertex3f(float, float, float);
float sqrt(float);
void falsoCono(float h, float r) {
  float a2, m, norma, n1, n2;
  m = h;
  glPushMatrix();
  a2 = r / 2.0;
  norma = sqrt(a2 * a2 + 2 * m * m);
  n1 = a2 / norma;
  n2 = m / norma;
  glShadeModel(GL_SMOOTH);
  glBegin(GL_QUAD_STRIP);
  {
    glNormal3f(n2, n1, -n2);
    glVertex3f(0, m, 0);
    glVertex3f(a2, 0, -a2);
    glNormal3f(-n2, n1, -n2);
    glVertex3f(0, m, 0);
    glVertex3f(-a2, 0, -a2);
    glNormal3f(-n2, n1, n2);
    glVertex3f(0, m, 0);
    glVertex3f(-a2, 0, a2);
    glNormal3f(n2, n1, n2);
    glVertex3f(0, m, 0);
    glVertex3f(a2, 0, a2);
    glNormal3f(n2, n1, -n2);
    glVertex3f(0, m, 0);
    glVertex3f(a2, 0, -a2);
  }
  glEnd();
  glShadeModel(GL_FLAT);
  glBegin(GL_QUADS);
  {
    glNormal3f(0.0, -1.0, 0.0);
    glVertex3f(-a2, 0, -a2);
    glVertex3f(a2, 0, -a2);
    glVertex3f(a2, 0, a2);
    glVertex3f(-a2, 0, a2);
  }
  glEnd();
  glPopMatrix();
}


x86 assembly (clang, -O0):
<falsoCono>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    $0x0,%al
call   1060 <glPushMatrix@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe54(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm2
movss  0xe3d(%rip),%xmm1
mulss  -0x10(%rbp),%xmm1
mulss  -0x10(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1070 <sqrt@plt>
movss  %xmm0,-0x14(%rbp)
movss  -0xc(%rbp),%xmm0
divss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x10(%rbp),%xmm0
divss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    0x2db4(%rip),%rax
mov    (%rax),%edi
call   1080 <glShadeModel@plt>
mov    0x2db6(%rip),%rax
mov    (%rax),%edi
call   1090 <glBegin@plt>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x1c(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
cvtss2sd %xmm2,%xmm2
call   10a0 <glNormal3f@plt>
movss  -0x10(%rbp),%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0x1c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x1c(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
cvtss2sd %xmm2,%xmm2
call   10a0 <glNormal3f@plt>
movss  -0x10(%rbp),%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  -0xc(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0x1c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
call   10a0 <glNormal3f@plt>
movss  -0x10(%rbp),%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  -0xc(%rbp),%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
call   10a0 <glNormal3f@plt>
movss  -0x10(%rbp),%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x1c(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
cvtss2sd %xmm2,%xmm2
call   10a0 <glNormal3f@plt>
movss  -0x10(%rbp),%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
mov    $0x0,%al
call   1040 <glEnd@plt>
mov    0x2bdd(%rip),%rax
mov    (%rax),%edi
call   1080 <glShadeModel@plt>
mov    0x2bd7(%rip),%rax
mov    (%rax),%edi
call   1090 <glBegin@plt>
xorps  %xmm2,%xmm2
movsd  0xbdd(%rip),%xmm1
movaps %xmm2,%xmm0
call   10a0 <glNormal3f@plt>
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  -0xc(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  -0xc(%rbp),%xmm2
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
mov    $0x0,%al
call   1040 <glEnd@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<falsoCono>:
sub    $0x68,%rsp
movaps %xmm1,0x10(%rsp)
movss  %xmm0,0xc(%rsp)
xor    %eax,%eax
call   1060 <glPushMatrix@plt>
movaps 0x10(%rsp),%xmm0
mulss  0xe5d(%rip),%xmm0
movss  0xc(%rsp),%xmm2
movaps %xmm2,%xmm1
addss  %xmm2,%xmm1
mulss  %xmm2,%xmm1
movaps %xmm0,0x10(%rsp)
mulss  %xmm0,%xmm0
addss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     11cf <falsoCono+0x4f>
sqrtss %xmm0,%xmm0
jmp    11d4 <falsoCono+0x54>
call   1070 <sqrt@plt>
movaps 0x10(%rsp),%xmm1
divss  %xmm0,%xmm1
movaps %xmm1,0x30(%rsp)
movss  0xc(%rsp),%xmm1
divss  %xmm0,%xmm1
movaps %xmm1,0x50(%rsp)
mov    0x2dd0(%rip),%rax
mov    (%rax),%edi
call   1080 <glShadeModel@plt>
mov    0x2dd2(%rip),%rax
mov    (%rax),%edi
call   1090 <glBegin@plt>
movaps 0x50(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
movsd  %xmm0,0x48(%rsp)
movaps 0x30(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  %xmm1,0x28(%rsp)
xorps  0xddb(%rip),%xmm2
cvtss2sd %xmm2,%xmm2
movsd  %xmm2,0x50(%rsp)
call   10a0 <glNormal3f@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movss  0xc(%rsp),%xmm1
call   1030 <glVertex3f@plt>
movaps 0x10(%rsp),%xmm0
movaps 0xdaf(%rip),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x30(%rsp)
xorps  %xmm1,%xmm1
call   1030 <glVertex3f@plt>
movsd  0x50(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movaps %xmm0,%xmm2
call   10a0 <glNormal3f@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movss  0xc(%rsp),%xmm1
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x30(%rsp),%xmm0
movaps %xmm0,%xmm2
call   1030 <glVertex3f@plt>
movsd  0x50(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x48(%rsp),%xmm2
call   10a0 <glNormal3f@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movss  0xc(%rsp),%xmm1
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x30(%rsp),%xmm0
movaps 0x10(%rsp),%xmm2
call   1030 <glVertex3f@plt>
movsd  0x48(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movaps %xmm0,%xmm2
call   10a0 <glNormal3f@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movss  0xc(%rsp),%xmm1
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x10(%rsp),%xmm0
movaps %xmm0,%xmm2
call   1030 <glVertex3f@plt>
movsd  0x48(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x50(%rsp),%xmm2
call   10a0 <glNormal3f@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movss  0xc(%rsp),%xmm1
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x10(%rsp),%xmm0
movaps 0x30(%rsp),%xmm2
call   1030 <glVertex3f@plt>
xor    %eax,%eax
call   1040 <glEnd@plt>
mov    0x2c83(%rip),%rax
mov    (%rax),%edi
call   1080 <glShadeModel@plt>
mov    0x2c7d(%rip),%rax
mov    (%rax),%edi
call   1090 <glBegin@plt>
movsd  0xca6(%rip),%xmm1
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
call   10a0 <glNormal3f@plt>
xorps  %xmm1,%xmm1
movaps 0x30(%rsp),%xmm0
movaps %xmm0,%xmm2
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x10(%rsp),%xmm0
movaps 0x30(%rsp),%xmm2
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x10(%rsp),%xmm0
movaps %xmm0,%xmm2
call   1030 <glVertex3f@plt>
xorps  %xmm1,%xmm1
movaps 0x30(%rsp),%xmm0
movaps 0x10(%rsp),%xmm2
call   1030 <glVertex3f@plt>
xor    %eax,%eax
call   1040 <glEnd@plt>
xor    %eax,%eax
add    $0x68,%rsp
jmp    1050 <glPopMatrix@plt>

LLVM IR (-O0):
@GL_SMOOTH = global i32 0
@GL_QUAD_STRIP = global i32 0
@GL_FLAT = global i32 0
@GL_QUADS = global i32 0
define void @falsoCono(float %0, float %1) {
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
store float %0, float* %3
store float %1, float* %4
%10 = load float, float* %3
store float %10, float* %6
%11 = call i32 (...) @glPushMatrix()
%12 = load float, float* %4
%13 = fpext float %12 to double
%14 = fdiv double %13, 2.000000e+00
%15 = fptrunc double %14 to float
store float %15, float* %5
%16 = load float, float* %5
%17 = load float, float* %5
%18 = load float, float* %6
%19 = fmul float 2.000000e+00, %18
%20 = load float, float* %6
%21 = fmul float %19, %20
%22 = call float @llvm.fmuladd.f32(float %16, float %17, float %21)
%23 = call float @sqrt(float %22)
store float %23, float* %7
%24 = load float, float* %5
%25 = load float, float* %7
%26 = fdiv float %24, %25
store float %26, float* %8
%27 = load float, float* %6
%28 = load float, float* %7
%29 = fdiv float %27, %28
store float %29, float* %9
%30 = load i32, i32* @GL_SMOOTH
%31 = call i32 @glShadeModel(i32 %30)
%32 = load i32, i32* @GL_QUAD_STRIP
%33 = call i32 @glBegin(i32 %32)
%34 = load float, float* %9
%35 = fpext float %34 to double
%36 = load float, float* %8
%37 = fpext float %36 to double
%38 = load float, float* %9
%39 = fneg float %38
%40 = fpext float %39 to double
%41 = call i32 @glNormal3f(double %35, double %37, double %40)
%42 = load float, float* %6
%43 = call i32 @glVertex3f(float 0.000000e+00, float %42, float 0.000000e+00)
%44 = load float, float* %5
%45 = load float, float* %5
%46 = fneg float %45
%47 = call i32 @glVertex3f(float %44, float 0.000000e+00, float %46)
%48 = load float, float* %9
%49 = fneg float %48
%50 = fpext float %49 to double
%51 = load float, float* %8
%52 = fpext float %51 to double
%53 = load float, float* %9
%54 = fneg float %53
%55 = fpext float %54 to double
%56 = call i32 @glNormal3f(double %50, double %52, double %55)
%57 = load float, float* %6
%58 = call i32 @glVertex3f(float 0.000000e+00, float %57, float 0.000000e+00)
%59 = load float, float* %5
%60 = fneg float %59
%61 = load float, float* %5
%62 = fneg float %61
%63 = call i32 @glVertex3f(float %60, float 0.000000e+00, float %62)
%64 = load float, float* %9
%65 = fneg float %64
%66 = fpext float %65 to double
%67 = load float, float* %8
%68 = fpext float %67 to double
%69 = load float, float* %9
%70 = fpext float %69 to double
%71 = call i32 @glNormal3f(double %66, double %68, double %70)
%72 = load float, float* %6
%73 = call i32 @glVertex3f(float 0.000000e+00, float %72, float 0.000000e+00)
%74 = load float, float* %5
%75 = fneg float %74
%76 = load float, float* %5
%77 = call i32 @glVertex3f(float %75, float 0.000000e+00, float %76)
%78 = load float, float* %9
%79 = fpext float %78 to double
%80 = load float, float* %8
%81 = fpext float %80 to double
%82 = load float, float* %9
%83 = fpext float %82 to double
%84 = call i32 @glNormal3f(double %79, double %81, double %83)
%85 = load float, float* %6
%86 = call i32 @glVertex3f(float 0.000000e+00, float %85, float 0.000000e+00)
%87 = load float, float* %5
%88 = load float, float* %5
%89 = call i32 @glVertex3f(float %87, float 0.000000e+00, float %88)
%90 = load float, float* %9
%91 = fpext float %90 to double
%92 = load float, float* %8
%93 = fpext float %92 to double
%94 = load float, float* %9
%95 = fneg float %94
%96 = fpext float %95 to double
%97 = call i32 @glNormal3f(double %91, double %93, double %96)
%98 = load float, float* %6
%99 = call i32 @glVertex3f(float 0.000000e+00, float %98, float 0.000000e+00)
%100 = load float, float* %5
%101 = load float, float* %5
%102 = fneg float %101
%103 = call i32 @glVertex3f(float %100, float 0.000000e+00, float %102)
%104 = call i32 (...) @glEnd()
%105 = load i32, i32* @GL_FLAT
%106 = call i32 @glShadeModel(i32 %105)
%107 = load i32, i32* @GL_QUADS
%108 = call i32 @glBegin(i32 %107)
%109 = call i32 @glNormal3f(double 0.000000e+00, double -1.000000e+00, double 0.000000e+00)
%110 = load float, float* %5
%111 = fneg float %110
%112 = load float, float* %5
%113 = fneg float %112
%114 = call i32 @glVertex3f(float %111, float 0.000000e+00, float %113)
%115 = load float, float* %5
%116 = load float, float* %5
%117 = fneg float %116
%118 = call i32 @glVertex3f(float %115, float 0.000000e+00, float %117)
%119 = load float, float* %5
%120 = load float, float* %5
%121 = call i32 @glVertex3f(float %119, float 0.000000e+00, float %120)
%122 = load float, float* %5
%123 = fneg float %122
%124 = load float, float* %5
%125 = call i32 @glVertex3f(float %123, float 0.000000e+00, float %124)
%126 = call i32 (...) @glEnd()
%127 = call i32 (...) @glPopMatrix()
ret void
}

LLVM IR (-O2):
@GL_SMOOTH = global i32 0
@GL_QUAD_STRIP = global i32 0
@GL_FLAT = global i32 0
@GL_QUADS = global i32 0
define void @falsoCono(float %0, float %1) {
%3 = tail call i32 (...) @glPushMatrix()
%4 = fmul float %1, 5.000000e-01
%5 = fmul float %0, 2.000000e+00
%6 = fmul float %5, %0
%7 = tail call float @llvm.fmuladd.f32(float %4, float %4, float %6)
%8 = tail call float @sqrt(float %7)
%9 = fdiv float %4, %8
%10 = fdiv float %0, %8
%11 = load i32, i32* @GL_SMOOTH
%12 = tail call i32 @glShadeModel(i32 %11)
%13 = load i32, i32* @GL_QUAD_STRIP
%14 = tail call i32 @glBegin(i32 %13)
%15 = fpext float %10 to double
%16 = fpext float %9 to double
%17 = fneg float %10
%18 = fpext float %17 to double
%19 = tail call i32 @glNormal3f(double %15, double %16, double %18)
%20 = tail call i32 @glVertex3f(float 0.000000e+00, float %0, float 0.000000e+00)
%21 = fneg float %4
%22 = tail call i32 @glVertex3f(float %4, float 0.000000e+00, float %21)
%23 = tail call i32 @glNormal3f(double %18, double %16, double %18)
%24 = tail call i32 @glVertex3f(float 0.000000e+00, float %0, float 0.000000e+00)
%25 = tail call i32 @glVertex3f(float %21, float 0.000000e+00, float %21)
%26 = tail call i32 @glNormal3f(double %18, double %16, double %15)
%27 = tail call i32 @glVertex3f(float 0.000000e+00, float %0, float 0.000000e+00)
%28 = tail call i32 @glVertex3f(float %21, float 0.000000e+00, float %4)
%29 = tail call i32 @glNormal3f(double %15, double %16, double %15)
%30 = tail call i32 @glVertex3f(float 0.000000e+00, float %0, float 0.000000e+00)
%31 = tail call i32 @glVertex3f(float %4, float 0.000000e+00, float %4)
%32 = tail call i32 @glNormal3f(double %15, double %16, double %18)
%33 = tail call i32 @glVertex3f(float 0.000000e+00, float %0, float 0.000000e+00)
%34 = tail call i32 @glVertex3f(float %4, float 0.000000e+00, float %21)
%35 = tail call i32 (...) @glEnd()
%36 = load i32, i32* @GL_FLAT
%37 = tail call i32 @glShadeModel(i32 %36)
%38 = load i32, i32* @GL_QUADS
%39 = tail call i32 @glBegin(i32 %38)
%40 = tail call i32 @glNormal3f(double 0.000000e+00, double -1.000000e+00, double 0.000000e+00)
%41 = tail call i32 @glVertex3f(float %21, float 0.000000e+00, float %21)
%42 = tail call i32 @glVertex3f(float %4, float 0.000000e+00, float %21)
%43 = tail call i32 @glVertex3f(float %4, float 0.000000e+00, float %4)
%44 = tail call i32 @glVertex3f(float %21, float 0.000000e+00, float %4)
%45 = tail call i32 (...) @glEnd()
%46 = tail call i32 (...) @glPopMatrix()
ret void
}