call7f(uc, d, us, ul, ui, c, i, s, l, f) unsigned char uc;
double d;
unsigned short us;
unsigned long ul;
unsigned int ui;
char c;
int i;
short s;
long l;
float f;
{ call7g(d, us, ul, ui, c, i, s, l, f, uc); }


x86 assembly (clang, -O0):
<call7f>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  %xmm1,-0x40(%rbp)
mov    %r8d,-0x50(%rbp)
mov    %ecx,%eax
mov    -0x50(%rbp),%ecx
mov    %eax,-0x4c(%rbp)
mov    %rdx,%rax
mov    -0x4c(%rbp),%edx
mov    %rax,-0x48(%rbp)
mov    %esi,%eax
mov    -0x48(%rbp),%rsi
mov    %eax,-0x38(%rbp)
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
mov    %edi,%r8d
mov    -0x38(%rbp),%edi
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
cvtsd2ss %xmm0,%xmm0
mov    %r8b,-0x5(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %di,-0x12(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %edx,-0x24(%rbp)
mov    %cl,-0x25(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    %ax,-0x2e(%rbp)
movss  %xmm0,-0x34(%rbp)
movsd  -0x10(%rbp),%xmm0
movzwl -0x12(%rbp),%edi
mov    -0x20(%rbp),%rsi
mov    -0x24(%rbp),%edx
movsbl -0x25(%rbp),%ecx
mov    -0x2c(%rbp),%r8d
movswl -0x2e(%rbp),%r9d
mov    0x18(%rbp),%r10
movss  -0x34(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movzbl -0x5(%rbp),%eax
mov    %r10,(%rsp)
mov    %eax,0x8(%rsp)
mov    $0x2,%al
call   1030 <call7g@plt>
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<call7f>:
push   %rax
mov    %r9d,%r10d
movswl 0x10(%rsp),%r9d
cvtsd2ss %xmm1,%xmm1
movzwl %si,%esi
movsbl %r8b,%eax
cvtss2sd %xmm1,%xmm1
movzbl %dil,%r11d
mov    %esi,%edi
mov    %rdx,%rsi
mov    %ecx,%edx
mov    %eax,%ecx
mov    %r10d,%r8d
mov    $0x2,%al
push   %r11
push   0x20(%rsp)
call   1030 <call7g@plt>
add    $0x10,%rsp
pop    %rcx
ret

LLVM IR (-O0):
define i32 @call7f(i32 %0, double %1, i32 %2, i64 %3, i32 %4, i32 %5, i32 %6, i32 %7, i64 %8, double %9) {
%11 = alloca i32
%12 = alloca i8
%13 = alloca double
%14 = alloca i16
%15 = alloca i64
%16 = alloca i32
%17 = alloca i8
%18 = alloca i32
%19 = alloca i16
%20 = alloca i64
%21 = alloca float
%22 = trunc i32 %0 to i8
%23 = trunc i32 %2 to i16
%24 = trunc i32 %5 to i8
%25 = trunc i32 %7 to i16
%26 = fptrunc double %9 to float
store i8 %22, i8* %12
store double %1, double* %13
store i16 %23, i16* %14
store i64 %3, i64* %15
store i32 %4, i32* %16
store i8 %24, i8* %17
store i32 %6, i32* %18
store i16 %25, i16* %19
store i64 %8, i64* %20
store float %26, float* %21
%27 = load double, double* %13
%28 = load i16, i16* %14
%29 = zext i16 %28 to i32
%30 = load i64, i64* %15
%31 = load i32, i32* %16
%32 = load i8, i8* %17
%33 = sext i8 %32 to i32
%34 = load i32, i32* %18
%35 = load i16, i16* %19
%36 = sext i16 %35 to i32
%37 = load i64, i64* %20
%38 = load float, float* %21
%39 = fpext float %38 to double
%40 = load i8, i8* %12
%41 = zext i8 %40 to i32
%42 = call i32 (double, i32, i64, i32, i32, i32, i32, i64, double, i32, ...) bitcast (i32 (...)* @call7g to i32 (double, i32, i64, i32, i32, i32, i32, i64, double, i32, ...)*)(double %27, i32 %29, i64 %30, i32 %31, i32 %33, i32 %34, i32 %36, i64 %37, double %39, i32 %41)
%43 = load i32, i32* %11
ret i32 %43
}

LLVM IR (-O2):
define i32 @call7f(i32 %0, double %1, i32 %2, i64 %3, i32 %4, i32 %5, i32 %6, i32 %7, i64 %8, double %9) {
%11 = fptrunc double %9 to float
%12 = and i32 %2, 65535
%13 = shl i32 %5, 24
%14 = ashr exact i32 %13, 24
%15 = shl i32 %7, 16
%16 = ashr exact i32 %15, 16
%17 = fpext float %11 to double
%18 = and i32 %0, 255
%19 = tail call i32 (double, i32, i64, i32, i32, i32, i32, i64, double, i32, ...) bitcast (i32 (...)* @call7g to i32 (double, i32, i64, i32, i32, i32, i32, i64, double, i32, ...)*)(double %1, i32 %12, i64 %3, i32 %4, i32 %14, i32 %6, i32 %16, i64 %8, double %17, i32 %18)
ret i32 undef
}