#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*/ dc3d_(float *, float *, float *, float *, float *, float *,
                         float *, float *, float *, float *, float *, float *,
                         float *, float *, float *, float *, float *, float *,
                         float *, float *, float *, float *, float *, float *,
                         float *, int *);
int iret(float alpha, float x, float y, float z, float depth, float dip,
         float al1, float al2, float aw1, float aw2, float disl1, float disl2,
         float disl3) {
  float ux, uy, uz, uxx, uyx, uzx, uxy, uyy, uzy, uxz, uyz, uzz;
  int iret;
  dc3d_(&alpha, &x, &y, &z, &depth, &dip, &al1, &al2, &aw1, &aw2, &disl1,
        &disl2, &disl3, &ux, &uy, &uz, &uxx, &uyx, &uzx, &uxy, &uyy, &uzy, &uxz,
        &uyz, &uzz, &iret);
  return iret;
}


x86 assembly (clang, -O0):
<iret>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x168,%rsp
movss  0x30(%rbp),%xmm8
movss  0x28(%rbp),%xmm8
movss  0x20(%rbp),%xmm8
movss  0x18(%rbp),%xmm8
movss  0x10(%rbp),%xmm8
movss  %xmm0,-0x2c(%rbp)
movss  %xmm1,-0x30(%rbp)
movss  %xmm2,-0x34(%rbp)
movss  %xmm3,-0x38(%rbp)
movss  %xmm4,-0x3c(%rbp)
movss  %xmm5,-0x40(%rbp)
movss  %xmm6,-0x44(%rbp)
movss  %xmm7,-0x48(%rbp)
lea    -0x2c(%rbp),%rdi
lea    -0x30(%rbp),%rsi
lea    -0x34(%rbp),%rdx
lea    -0x38(%rbp),%rcx
lea    -0x3c(%rbp),%r8
lea    -0x40(%rbp),%r9
lea    -0x44(%rbp),%rax
mov    %rax,-0xe8(%rbp)
lea    -0x48(%rbp),%rax
mov    %rax,-0xe0(%rbp)
lea    0x10(%rbp),%rax
mov    %rax,-0xd8(%rbp)
lea    0x18(%rbp),%rax
mov    %rax,-0xd0(%rbp)
lea    0x20(%rbp),%rax
mov    %rax,-0xc8(%rbp)
lea    0x28(%rbp),%rax
mov    %rax,-0xc0(%rbp)
lea    0x30(%rbp),%rax
mov    %rax,-0xb8(%rbp)
lea    -0x4c(%rbp),%rax
mov    %rax,-0xb0(%rbp)
lea    -0x50(%rbp),%rax
mov    %rax,-0xa8(%rbp)
lea    -0x54(%rbp),%rax
mov    %rax,-0xa0(%rbp)
lea    -0x58(%rbp),%rax
mov    %rax,-0x98(%rbp)
lea    -0x5c(%rbp),%rax
mov    %rax,-0x90(%rbp)
lea    -0x60(%rbp),%r13
lea    -0x64(%rbp),%r12
lea    -0x68(%rbp),%r15
lea    -0x6c(%rbp),%r14
lea    -0x70(%rbp),%rbx
lea    -0x74(%rbp),%r11
lea    -0x78(%rbp),%r10
lea    -0x7c(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0xe8(%rbp),%rax
mov    %rax,(%rsp)
mov    -0xe0(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0xd8(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0xd0(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0xc8(%rbp),%rax
mov    %rax,0x20(%rsp)
mov    -0xc0(%rbp),%rax
mov    %rax,0x28(%rsp)
mov    -0xb8(%rbp),%rax
mov    %rax,0x30(%rsp)
mov    -0xb0(%rbp),%rax
mov    %rax,0x38(%rsp)
mov    -0xa8(%rbp),%rax
mov    %rax,0x40(%rsp)
mov    -0xa0(%rbp),%rax
mov    %rax,0x48(%rsp)
mov    -0x98(%rbp),%rax
mov    %rax,0x50(%rsp)
mov    -0x90(%rbp),%rax
mov    %rax,0x58(%rsp)
mov    -0x88(%rbp),%rax
mov    %r13,0x60(%rsp)
mov    %r12,0x68(%rsp)
mov    %r15,0x70(%rsp)
mov    %r14,0x78(%rsp)
mov    %rbx,0x80(%rsp)
mov    %r11,0x88(%rsp)
mov    %r10,0x90(%rsp)
mov    %rax,0x98(%rsp)
call   1030 <dc3d_@plt>
mov    -0x7c(%rbp),%eax
add    $0x168,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<iret>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
movss  %xmm0,0x24(%rsp)
movss  %xmm1,0x20(%rsp)
movss  %xmm2,0x1c(%rsp)
movss  %xmm3,0x18(%rsp)
movss  %xmm4,0x14(%rsp)
movss  %xmm5,0x10(%rsp)
movss  %xmm6,0xc(%rsp)
movss  %xmm7,0x8(%rsp)
lea    0x4(%rsp),%rax
lea    0x28(%rsp),%r10
lea    0x2c(%rsp),%r11
lea    0x30(%rsp),%rbx
lea    0x34(%rsp),%r14
lea    0x38(%rsp),%r15
lea    0x3c(%rsp),%r12
lea    0x40(%rsp),%r13
lea    0x44(%rsp),%rbp
lea    0x24(%rsp),%rdi
lea    0x20(%rsp),%rsi
lea    0x1c(%rsp),%rdx
lea    0x18(%rsp),%rcx
lea    0x14(%rsp),%r8
lea    0x10(%rsp),%r9
push   %rax
push   %r10
push   %r11
push   %rbx
push   %r14
push   %r15
push   %r12
push   %r13
push   %rbp
lea    0x90(%rsp),%rax
push   %rax
lea    0x9c(%rsp),%rax
push   %rax
lea    0xa8(%rsp),%rax
push   %rax
lea    0xb4(%rsp),%rax
push   %rax
lea    0x118(%rsp),%rax
push   %rax
lea    0x118(%rsp),%rax
push   %rax
lea    0x118(%rsp),%rax
push   %rax
lea    0x118(%rsp),%rax
push   %rax
lea    0x118(%rsp),%rax
push   %rax
lea    0x98(%rsp),%rax
push   %rax
lea    0xa4(%rsp),%rax
push   %rax
call   1030 <dc3d_@plt>
add    $0xa0,%rsp
mov    0x4(%rsp),%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @iret(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12) {
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
%35 = alloca float
%36 = alloca float
%37 = alloca float
%38 = alloca float
%39 = alloca i32
store float %0, float* %14
store float %1, float* %15
store float %2, float* %16
store float %3, float* %17
store float %4, float* %18
store float %5, float* %19
store float %6, float* %20
store float %7, float* %21
store float %8, float* %22
store float %9, float* %23
store float %10, float* %24
store float %11, float* %25
store float %12, float* %26
%40 = call i32 @dc3d_(float* %14, float* %15, float* %16, float* %17, float* %18, float* %19, float* %20, float* %21, float* %22, float* %23, float* %24, float* %25, float* %26, float* %27, float* %28, float* %29, float* %30, float* %31, float* %32, float* %33, float* %34, float* %35, float* %36, float* %37, float* %38, i32* %39)
%41 = load i32, i32* %39
ret i32 %41
}

LLVM IR (-O2):
define i32 @iret(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12) {
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
%35 = alloca float
%36 = alloca float
%37 = alloca float
%38 = alloca float
%39 = alloca i32
store float %0, float* %14
store float %1, float* %15
store float %2, float* %16
store float %3, float* %17
store float %4, float* %18
store float %5, float* %19
store float %6, float* %20
store float %7, float* %21
store float %8, float* %22
store float %9, float* %23
store float %10, float* %24
store float %11, float* %25
store float %12, float* %26
%40 = bitcast float* %27 to i8*
%41 = bitcast float* %28 to i8*
%42 = bitcast float* %29 to i8*
%43 = bitcast float* %30 to i8*
%44 = bitcast float* %31 to i8*
%45 = bitcast float* %32 to i8*
%46 = bitcast float* %33 to i8*
%47 = bitcast float* %34 to i8*
%48 = bitcast float* %35 to i8*
%49 = bitcast float* %36 to i8*
%50 = bitcast float* %37 to i8*
%51 = bitcast float* %38 to i8*
%52 = bitcast i32* %39 to i8*
%53 = call i32 @dc3d_(float* %14, float* %15, float* %16, float* %17, float* %18, float* %19, float* %20, float* %21, float* %22, float* %23, float* %24, float* %25, float* %26, float* %27, float* %28, float* %29, float* %30, float* %31, float* %32, float* %33, float* %34, float* %35, float* %36, float* %37, float* %38, i32* %39)
%54 = load i32, i32* %39
ret i32 %54
}