#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*/ closeobj();
int /*<<< orphan*/ makeobj(long);
int /*<<< orphan*/ popmatrix();
int /*<<< orphan*/ pushmatrix();
int /*<<< orphan*/ rect(double, double, double, double);
int /*<<< orphan*/ rotate(int, char);
void makecube() {
  void side();
  makeobj(1L);
  rect(-5.0, -5.0, 10.0, 10.0);
  pushmatrix();
  side();
  rotate(900, 'x');
  side();
  rotate(900, 'x');
  side();
  rotate(900, 'x');
  side();
  popmatrix();
  closeobj();
}


x86 assembly (clang, -O0):
<makecube>:
push   %rbp
mov    %rsp,%rbp
mov    $0x1,%edi
call   1080 <makeobj@plt>
movsd  0xe7a(%rip),%xmm1
movsd  0xe7a(%rip),%xmm3
movaps %xmm1,%xmm0
movaps %xmm3,%xmm2
call   1050 <rect@plt>
mov    $0x0,%al
call   1090 <pushmatrix@plt>
mov    $0x0,%al
call   1060 <side@plt>
mov    $0x384,%edi
mov    $0x78,%esi
call   1070 <rotate@plt>
mov    $0x0,%al
call   1060 <side@plt>
mov    $0x384,%edi
mov    $0x78,%esi
call   1070 <rotate@plt>
mov    $0x0,%al
call   1060 <side@plt>
mov    $0x384,%edi
mov    $0x78,%esi
call   1070 <rotate@plt>
mov    $0x0,%al
call   1060 <side@plt>
mov    $0x0,%al
call   1030 <popmatrix@plt>
mov    $0x0,%al
call   1040 <closeobj@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<makecube>:
push   %rax
mov    $0x1,%edi
call   1080 <makeobj@plt>
movsd  0xe7d(%rip),%xmm0
movsd  0xe7d(%rip),%xmm2
movaps %xmm0,%xmm1
movaps %xmm2,%xmm3
call   1050 <rect@plt>
xor    %eax,%eax
call   1090 <pushmatrix@plt>
xor    %eax,%eax
call   1060 <side@plt>
mov    $0x384,%edi
mov    $0x78,%esi
call   1070 <rotate@plt>
xor    %eax,%eax
call   1060 <side@plt>
mov    $0x384,%edi
mov    $0x78,%esi
call   1070 <rotate@plt>
xor    %eax,%eax
call   1060 <side@plt>
mov    $0x384,%edi
mov    $0x78,%esi
call   1070 <rotate@plt>
xor    %eax,%eax
call   1060 <side@plt>
xor    %eax,%eax
call   1030 <popmatrix@plt>
xor    %eax,%eax
pop    %rcx
jmp    1040 <closeobj@plt>

LLVM IR (-O0):
define void @makecube() {
%1 = call i32 @makeobj(i64 1)
%2 = call i32 @rect(double -5.000000e+00, double -5.000000e+00, double 1.000000e+01, double 1.000000e+01)
%3 = call i32 (...) @pushmatrix()
%4 = call i32 @rotate(i32 900, i8 signext 120)
%5 = call i32 @rotate(i32 900, i8 signext 120)
%6 = call i32 @rotate(i32 900, i8 signext 120)
%7 = call i32 (...) @popmatrix()
%8 = call i32 (...) @closeobj()
ret void
}

LLVM IR (-O2):
define void @makecube() {
%1 = tail call i32 @makeobj(i64 1)
%2 = tail call i32 @rect(double -5.000000e+00, double -5.000000e+00, double 1.000000e+01, double 1.000000e+01)
%3 = tail call i32 (...) @pushmatrix()
tail call void (...) @side()
%4 = tail call i32 @rotate(i32 900, i8 signext 120)
tail call void (...) @side()
%5 = tail call i32 @rotate(i32 900, i8 signext 120)
tail call void (...) @side()
%6 = tail call i32 @rotate(i32 900, i8 signext 120)
tail call void (...) @side()
%7 = tail call i32 (...) @popmatrix()
%8 = tail call i32 (...) @closeobj()
ret void
}