#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*/ s2funuv(float (*)(float *, float *),
                           float (*)(float *, float *),
                           float (*)(float *, float *),
                           float (*)(float *, float *), float, float, int,
                           float, float, int);
void s2funuv_(void *fx, void *fy, void *fz, void *fcol, float *umin,
              float *umax, int *uDIV, float *vmin, float *vmax, int *vDIV) {
  float (*the_fx)(float *, float *) = (float (*)(float *, float *))fx;
  float (*the_fy)(float *, float *) = (float (*)(float *, float *))fy;
  float (*the_fz)(float *, float *) = (float (*)(float *, float *))fz;
  float (*the_fcol)(float *, float *) = (float (*)(float *, float *))fcol;
  s2funuv(the_fx, the_fy, the_fz, the_fcol, *umin, *umax, *uDIV, *vmin, *vmax,
          *vDIV);
}


x86 assembly (clang, -O0):
<s2funuv_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x38(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rdx
mov    -0x50(%rbp),%rcx
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  (%rax),%xmm1
mov    0x10(%rbp),%rax
mov    (%rax),%r8d
mov    0x18(%rbp),%rax
movss  (%rax),%xmm2
mov    0x20(%rbp),%rax
movss  (%rax),%xmm3
mov    0x28(%rbp),%rax
mov    (%rax),%r9d
call   1030 <s2funuv@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<s2funuv_>:
push   %rbx
mov    0x28(%rsp),%r10
mov    0x20(%rsp),%r11
mov    0x18(%rsp),%rax
mov    0x10(%rsp),%rbx
movss  (%r8),%xmm0
movss  (%r9),%xmm1
mov    (%rbx),%r8d
movss  (%rax),%xmm2
movss  (%r11),%xmm3
mov    (%r10),%r9d
pop    %rbx
jmp    1030 <s2funuv@plt>

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

LLVM IR (-O2):
define void @s2funuv_(i8* %0, i8* %1, i8* %2, i8* %3, float* nocapture %4, float* nocapture %5, i32* nocapture %6, float* nocapture %7, float* nocapture %8, i32* nocapture %9) {
%11 = bitcast i8* %0 to float (float*, float*)*
%12 = bitcast i8* %1 to float (float*, float*)*
%13 = bitcast i8* %2 to float (float*, float*)*
%14 = bitcast i8* %3 to float (float*, float*)*
%15 = load float, float* %4
%16 = load float, float* %5
%17 = load i32, i32* %6
%18 = load float, float* %7
%19 = load float, float* %8
%20 = load i32, i32* %9
%21 = tail call i32 @s2funuv(float (float*, float*)* %11, float (float*, float*)* %12, float (float*, float*)* %13, float (float*, float*)* %14, float %15, float %16, i32 %17, float %18, float %19, i32 %20)
ret void
}