#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_AMBIENT_AND_DIFFUSE;
int /*<<< orphan*/ GL_FRONT_AND_BACK;
int /*<<< orphan*/ falsoCilindro(double, double);
int /*<<< orphan*/ falsoCono(double, double);
int /*<<< orphan*/ glMaterialfv(int /*<<< orphan*/, int /*<<< orphan*/,
                                float *);
int /*<<< orphan*/ glPopMatrix();
int /*<<< orphan*/ glPushMatrix();
int /*<<< orphan*/ glRotatef(double, int, int /*<<< orphan*/, int);
int /*<<< orphan*/ glTranslatef(double, double, double);
void ejes(float a) {
  float c1[4] = {1.0, 1.0, 0.0, 1.}, c2[4] = {1.0, 0.0, 1.0, 1},
        c3[4] = {0.0, 1.0, 1.0, 1};
  glPushMatrix();
  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c1);
  falsoCilindro(0.75 * a, 0.05 * a);
  glTranslatef(0.0, 0.75 * a, 0.0);
  falsoCono(0.25 * a, 0.15 * a);
  glPopMatrix();
  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c2);
  glPushMatrix();
  glRotatef(-90.0, 0, 0, 1);
  falsoCilindro(0.75 * a, 0.05 * a);
  glTranslatef(0.0, 0.75 * a, 0.0);
  falsoCono(0.25 * a, 0.15 * a);
  glPopMatrix();
  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c3);
  glPushMatrix();
  glRotatef(90.0, 1, 0, 0);
  falsoCilindro(0.75 * a, 0.05 * a);
  glTranslatef(0.0, 0.75 * a, 0.0);
  falsoCono(0.25 * a, 0.15 * a);
  glPopMatrix();
}


x86 assembly (clang, -O0):
<ejes>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movss  %xmm0,-0x4(%rbp)
mov    0xeac(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xea9(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0xea6(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xea3(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0xea0(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    0xe9d(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    $0x0,%al
call   1060 <glPushMatrix@plt>
mov    0x2e1b(%rip),%rax
mov    (%rax),%edi
mov    0x2e02(%rip),%rax
mov    (%rax),%esi
lea    -0x20(%rbp),%rdx
call   1080 <glMaterialfv@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe1e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xe11(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1040 <falsoCilindro@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdef(%rip),%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1070 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdc7(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xdaa(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1030 <falsoCono@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    0x2d7b(%rip),%rax
mov    (%rax),%edi
mov    0x2d62(%rip),%rax
mov    (%rax),%esi
lea    -0x30(%rbp),%rdx
call   1080 <glMaterialfv@plt>
mov    $0x0,%al
call   1060 <glPushMatrix@plt>
movsd  0xd98(%rip),%xmm0
xor    %esi,%esi
mov    $0x1,%edx
mov    %esi,%edi
call   1090 <glRotatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd61(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd54(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1040 <falsoCilindro@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd32(%rip),%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1070 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd0a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xced(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1030 <falsoCono@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
mov    0x2cbe(%rip),%rax
mov    (%rax),%edi
mov    0x2ca5(%rip),%rax
mov    (%rax),%esi
lea    -0x40(%rbp),%rdx
call   1080 <glMaterialfv@plt>
mov    $0x0,%al
call   1060 <glPushMatrix@plt>
movsd  0xcd3(%rip),%xmm0
mov    $0x1,%edi
xor    %edx,%edx
mov    %edx,%esi
call   1090 <glRotatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xca4(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xc97(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1040 <falsoCilindro@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc75(%rip),%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm2,%xmm2
movaps %xmm2,%xmm0
call   1070 <glTranslatef@plt>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc4d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xc30(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1030 <falsoCono@plt>
mov    $0x0,%al
call   1050 <glPopMatrix@plt>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ejes>:
push   %r14
push   %rbx
sub    $0x58,%rsp
movss  %xmm0,(%rsp)
movaps 0xead(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xeb1(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xeb5(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
xor    %eax,%eax
call   1060 <glPushMatrix@plt>
mov    0x2e3a(%rip),%r14
mov    (%r14),%edi
mov    0x2e20(%rip),%rbx
mov    (%rbx),%esi
lea    0x40(%rsp),%rdx
call   1080 <glMaterialfv@plt>
movss  (%rsp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  %xmm2,0x8(%rsp)
movsd  0xe25(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,(%rsp)
movsd  0xe1c(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rsp)
call   1040 <falsoCilindro@plt>
xorpd  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movsd  (%rsp),%xmm1
call   1070 <glTranslatef@plt>
movsd  0xdfc(%rip),%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
mulsd  0xdec(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
call   1030 <falsoCono@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
mov    (%r14),%edi
mov    (%rbx),%esi
lea    0x30(%rsp),%rdx
call   1080 <glMaterialfv@plt>
xor    %eax,%eax
call   1060 <glPushMatrix@plt>
movsd  0xdc4(%rip),%xmm0
xor    %edi,%edi
xor    %esi,%esi
mov    $0x1,%edx
call   1090 <glRotatef@plt>
movsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
call   1040 <falsoCilindro@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movsd  (%rsp),%xmm1
call   1070 <glTranslatef@plt>
movsd  0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
call   1030 <falsoCono@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
mov    (%r14),%edi
mov    (%rbx),%esi
lea    0x20(%rsp),%rdx
call   1080 <glMaterialfv@plt>
xor    %eax,%eax
call   1060 <glPushMatrix@plt>
movsd  0xd68(%rip),%xmm0
mov    $0x1,%edi
xor    %esi,%esi
xor    %edx,%edx
call   1090 <glRotatef@plt>
movsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
call   1040 <falsoCilindro@plt>
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
movsd  (%rsp),%xmm1
call   1070 <glTranslatef@plt>
movsd  0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
call   1030 <falsoCono@plt>
xor    %eax,%eax
call   1050 <glPopMatrix@plt>
add    $0x58,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@__const.ejes.c1 = [4 x float] [float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00]
@__const.ejes.c2 = [4 x float] [float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00]
@__const.ejes.c3 = [4 x float] [float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00]
@GL_FRONT_AND_BACK = global i32 0
@GL_AMBIENT_AND_DIFFUSE = global i32 0
define void @ejes(float %0) {
%2 = alloca float
%3 = alloca [4 x float]
%4 = alloca [4 x float]
%5 = alloca [4 x float]
store float %0, float* %2
%6 = bitcast [4 x float]* %3 to i8*
%7 = bitcast [4 x float]* %4 to i8*
%8 = bitcast [4 x float]* %5 to i8*
%9 = call i32 (...) @glPushMatrix()
%10 = load i32, i32* @GL_FRONT_AND_BACK
%11 = load i32, i32* @GL_AMBIENT_AND_DIFFUSE
%12 = getelementptr inbounds [4 x float], [4 x float]* %3, i64 0, i64 0
%13 = call i32 @glMaterialfv(i32 %10, i32 %11, float* %12)
%14 = load float, float* %2
%15 = fpext float %14 to double
%16 = fmul double 7.500000e-01, %15
%17 = load float, float* %2
%18 = fpext float %17 to double
%19 = fmul double 5.000000e-02, %18
%20 = call i32 @falsoCilindro(double %16, double %19)
%21 = load float, float* %2
%22 = fpext float %21 to double
%23 = fmul double 7.500000e-01, %22
%24 = call i32 @glTranslatef(double 0.000000e+00, double %23, double 0.000000e+00)
%25 = load float, float* %2
%26 = fpext float %25 to double
%27 = fmul double 2.500000e-01, %26
%28 = load float, float* %2
%29 = fpext float %28 to double
%30 = fmul double 1.500000e-01, %29
%31 = call i32 @falsoCono(double %27, double %30)
%32 = call i32 (...) @glPopMatrix()
%33 = load i32, i32* @GL_FRONT_AND_BACK
%34 = load i32, i32* @GL_AMBIENT_AND_DIFFUSE
%35 = getelementptr inbounds [4 x float], [4 x float]* %4, i64 0, i64 0
%36 = call i32 @glMaterialfv(i32 %33, i32 %34, float* %35)
%37 = call i32 (...) @glPushMatrix()
%38 = call i32 @glRotatef(double -9.000000e+01, i32 0, i32 0, i32 1)
%39 = load float, float* %2
%40 = fpext float %39 to double
%41 = fmul double 7.500000e-01, %40
%42 = load float, float* %2
%43 = fpext float %42 to double
%44 = fmul double 5.000000e-02, %43
%45 = call i32 @falsoCilindro(double %41, double %44)
%46 = load float, float* %2
%47 = fpext float %46 to double
%48 = fmul double 7.500000e-01, %47
%49 = call i32 @glTranslatef(double 0.000000e+00, double %48, double 0.000000e+00)
%50 = load float, float* %2
%51 = fpext float %50 to double
%52 = fmul double 2.500000e-01, %51
%53 = load float, float* %2
%54 = fpext float %53 to double
%55 = fmul double 1.500000e-01, %54
%56 = call i32 @falsoCono(double %52, double %55)
%57 = call i32 (...) @glPopMatrix()
%58 = load i32, i32* @GL_FRONT_AND_BACK
%59 = load i32, i32* @GL_AMBIENT_AND_DIFFUSE
%60 = getelementptr inbounds [4 x float], [4 x float]* %5, i64 0, i64 0
%61 = call i32 @glMaterialfv(i32 %58, i32 %59, float* %60)
%62 = call i32 (...) @glPushMatrix()
%63 = call i32 @glRotatef(double 9.000000e+01, i32 1, i32 0, i32 0)
%64 = load float, float* %2
%65 = fpext float %64 to double
%66 = fmul double 7.500000e-01, %65
%67 = load float, float* %2
%68 = fpext float %67 to double
%69 = fmul double 5.000000e-02, %68
%70 = call i32 @falsoCilindro(double %66, double %69)
%71 = load float, float* %2
%72 = fpext float %71 to double
%73 = fmul double 7.500000e-01, %72
%74 = call i32 @glTranslatef(double 0.000000e+00, double %73, double 0.000000e+00)
%75 = load float, float* %2
%76 = fpext float %75 to double
%77 = fmul double 2.500000e-01, %76
%78 = load float, float* %2
%79 = fpext float %78 to double
%80 = fmul double 1.500000e-01, %79
%81 = call i32 @falsoCono(double %77, double %80)
%82 = call i32 (...) @glPopMatrix()
ret void
}

LLVM IR (-O2):
@__const.ejes.c1 = [4 x float] [float 1.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+00]
@__const.ejes.c2 = [4 x float] [float 1.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00]
@__const.ejes.c3 = [4 x float] [float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00]
@GL_FRONT_AND_BACK = global i32 0
@GL_AMBIENT_AND_DIFFUSE = global i32 0
define void @ejes(float %0) {
%2 = alloca [4 x float]
%3 = alloca [4 x float]
%4 = alloca [4 x float]
%5 = bitcast [4 x float]* %2 to i8*
%6 = bitcast [4 x float]* %3 to i8*
%7 = bitcast [4 x float]* %4 to i8*
%8 = tail call i32 (...) @glPushMatrix()
%9 = load i32, i32* @GL_FRONT_AND_BACK
%10 = load i32, i32* @GL_AMBIENT_AND_DIFFUSE
%11 = getelementptr inbounds [4 x float], [4 x float]* %2, i64 0, i64 0
%12 = call i32 @glMaterialfv(i32 %9, i32 %10, float* %11)
%13 = fpext float %0 to double
%14 = fmul double %13, 7.500000e-01
%15 = fmul double %13, 5.000000e-02
%16 = call i32 @falsoCilindro(double %14, double %15)
%17 = call i32 @glTranslatef(double 0.000000e+00, double %14, double 0.000000e+00)
%18 = fmul double %13, 2.500000e-01
%19 = fmul double %13, 1.500000e-01
%20 = call i32 @falsoCono(double %18, double %19)
%21 = call i32 (...) @glPopMatrix()
%22 = load i32, i32* @GL_FRONT_AND_BACK
%23 = load i32, i32* @GL_AMBIENT_AND_DIFFUSE
%24 = getelementptr inbounds [4 x float], [4 x float]* %3, i64 0, i64 0
%25 = call i32 @glMaterialfv(i32 %22, i32 %23, float* %24)
%26 = call i32 (...) @glPushMatrix()
%27 = call i32 @glRotatef(double -9.000000e+01, i32 0, i32 0, i32 1)
%28 = call i32 @falsoCilindro(double %14, double %15)
%29 = call i32 @glTranslatef(double 0.000000e+00, double %14, double 0.000000e+00)
%30 = call i32 @falsoCono(double %18, double %19)
%31 = call i32 (...) @glPopMatrix()
%32 = load i32, i32* @GL_FRONT_AND_BACK
%33 = load i32, i32* @GL_AMBIENT_AND_DIFFUSE
%34 = getelementptr inbounds [4 x float], [4 x float]* %4, i64 0, i64 0
%35 = call i32 @glMaterialfv(i32 %32, i32 %33, float* %34)
%36 = call i32 (...) @glPushMatrix()
%37 = call i32 @glRotatef(double 9.000000e+01, i32 1, i32 0, i32 0)
%38 = call i32 @falsoCilindro(double %14, double %15)
%39 = call i32 @glTranslatef(double 0.000000e+00, double %14, double 0.000000e+00)
%40 = call i32 @falsoCono(double %18, double %19)
%41 = call i32 (...) @glPopMatrix()
ret void
}