#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*/ testpassd(double, double, double, double, double, double,
                             double, double, double, double, double, double);
int /*<<< orphan*/ testpassf(double, double, double, double, double, double,
                             double, double, double, double, double, double);
int /*<<< orphan*/ testpassi(double, double, double, double, double, double,
                             double, double, double, double, double, double);
int /*<<< orphan*/ testpassidf(int, double, float);
void testParameterPassing() {
  float x;
  testpassi(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  testpassf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  testpassd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  testpassi(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f,
            12.0f);
  testpassf(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f,
            12.0f);
  testpassd(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f,
            12.0f);
  testpassi(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
  testpassf(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
  testpassd(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
  testpassidf(1, 2.0, 3.0f);
}


x86 assembly (clang, -O0):
<testParameterPassing>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movsd  0xeb8(%rip),%xmm0
movsd  0xea8(%rip),%xmm1
movsd  0xeb0(%rip),%xmm2
movsd  0xeb0(%rip),%xmm3
movsd  0xeb0(%rip),%xmm4
movsd  0xeb0(%rip),%xmm5
movsd  0xeb0(%rip),%xmm6
movsd  0xeb0(%rip),%xmm7
movsd  0xeaf(%rip),%xmm11
movsd  0xeae(%rip),%xmm10
movsd  0xead(%rip),%xmm9
movsd  0xeac(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1030 <testpassi@plt>
movsd  0xe34(%rip),%xmm0
movsd  0xe24(%rip),%xmm1
movsd  0xe2c(%rip),%xmm2
movsd  0xe2c(%rip),%xmm3
movsd  0xe2c(%rip),%xmm4
movsd  0xe2c(%rip),%xmm5
movsd  0xe2c(%rip),%xmm6
movsd  0xe2c(%rip),%xmm7
movsd  0xe2b(%rip),%xmm11
movsd  0xe2a(%rip),%xmm10
movsd  0xe29(%rip),%xmm9
movsd  0xe28(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1050 <testpassf@plt>
movsd  0xdb0(%rip),%xmm0
movsd  0xda0(%rip),%xmm1
movsd  0xda8(%rip),%xmm2
movsd  0xda8(%rip),%xmm3
movsd  0xda8(%rip),%xmm4
movsd  0xda8(%rip),%xmm5
movsd  0xda8(%rip),%xmm6
movsd  0xda8(%rip),%xmm7
movsd  0xda7(%rip),%xmm11
movsd  0xda6(%rip),%xmm10
movsd  0xda5(%rip),%xmm9
movsd  0xda4(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1040 <testpassd@plt>
movsd  0xd2c(%rip),%xmm0
movsd  0xd1c(%rip),%xmm1
movsd  0xd24(%rip),%xmm2
movsd  0xd24(%rip),%xmm3
movsd  0xd24(%rip),%xmm4
movsd  0xd24(%rip),%xmm5
movsd  0xd24(%rip),%xmm6
movsd  0xd24(%rip),%xmm7
movsd  0xd23(%rip),%xmm11
movsd  0xd22(%rip),%xmm10
movsd  0xd21(%rip),%xmm9
movsd  0xd20(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1030 <testpassi@plt>
movsd  0xca8(%rip),%xmm0
movsd  0xc98(%rip),%xmm1
movsd  0xca0(%rip),%xmm2
movsd  0xca0(%rip),%xmm3
movsd  0xca0(%rip),%xmm4
movsd  0xca0(%rip),%xmm5
movsd  0xca0(%rip),%xmm6
movsd  0xca0(%rip),%xmm7
movsd  0xc9f(%rip),%xmm11
movsd  0xc9e(%rip),%xmm10
movsd  0xc9d(%rip),%xmm9
movsd  0xc9c(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1050 <testpassf@plt>
movsd  0xc24(%rip),%xmm0
movsd  0xc14(%rip),%xmm1
movsd  0xc1c(%rip),%xmm2
movsd  0xc1c(%rip),%xmm3
movsd  0xc1c(%rip),%xmm4
movsd  0xc1c(%rip),%xmm5
movsd  0xc1c(%rip),%xmm6
movsd  0xc1c(%rip),%xmm7
movsd  0xc1b(%rip),%xmm11
movsd  0xc1a(%rip),%xmm10
movsd  0xc19(%rip),%xmm9
movsd  0xc18(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1040 <testpassd@plt>
movsd  0xba0(%rip),%xmm0
movsd  0xb90(%rip),%xmm1
movsd  0xb98(%rip),%xmm2
movsd  0xb98(%rip),%xmm3
movsd  0xb98(%rip),%xmm4
movsd  0xb98(%rip),%xmm5
movsd  0xb98(%rip),%xmm6
movsd  0xb98(%rip),%xmm7
movsd  0xb97(%rip),%xmm11
movsd  0xb96(%rip),%xmm10
movsd  0xb95(%rip),%xmm9
movsd  0xb94(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1030 <testpassi@plt>
movsd  0xb1c(%rip),%xmm0
movsd  0xb0c(%rip),%xmm1
movsd  0xb14(%rip),%xmm2
movsd  0xb14(%rip),%xmm3
movsd  0xb14(%rip),%xmm4
movsd  0xb14(%rip),%xmm5
movsd  0xb14(%rip),%xmm6
movsd  0xb14(%rip),%xmm7
movsd  0xb13(%rip),%xmm11
movsd  0xb12(%rip),%xmm10
movsd  0xb11(%rip),%xmm9
movsd  0xb10(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1050 <testpassf@plt>
movsd  0xa98(%rip),%xmm0
movsd  0xa88(%rip),%xmm1
movsd  0xa90(%rip),%xmm2
movsd  0xa90(%rip),%xmm3
movsd  0xa90(%rip),%xmm4
movsd  0xa90(%rip),%xmm5
movsd  0xa90(%rip),%xmm6
movsd  0xa90(%rip),%xmm7
movsd  0xa8f(%rip),%xmm11
movsd  0xa8e(%rip),%xmm10
movsd  0xa8d(%rip),%xmm9
movsd  0xa8c(%rip),%xmm8
movsd  %xmm11,(%rsp)
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
call   1040 <testpassd@plt>
mov    $0x1,%edi
movsd  0xa07(%rip),%xmm0
movss  0xa5f(%rip),%xmm1
call   1060 <testpassidf@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<testParameterPassing>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
movabs $0x4028000000000000,%rbx
movabs $0x4026000000000000,%r12
movabs $0x4024000000000000,%r15
movabs $0x4022000000000000,%r14
movsd  0xe88(%rip),%xmm0
movsd  0xe88(%rip),%xmm1
movsd  0xe88(%rip),%xmm2
movsd  0xe88(%rip),%xmm3
movsd  0xe88(%rip),%xmm4
movsd  0xe88(%rip),%xmm5
movsd  0xe88(%rip),%xmm6
movsd  0xe88(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1030 <testpassi@plt>
add    $0x20,%rsp
movsd  0xe38(%rip),%xmm0
movsd  0xe38(%rip),%xmm1
movsd  0xe38(%rip),%xmm2
movsd  0xe38(%rip),%xmm3
movsd  0xe38(%rip),%xmm4
movsd  0xe38(%rip),%xmm5
movsd  0xe38(%rip),%xmm6
movsd  0xe38(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1050 <testpassf@plt>
add    $0x20,%rsp
movsd  0xde8(%rip),%xmm0
movsd  0xde8(%rip),%xmm1
movsd  0xde8(%rip),%xmm2
movsd  0xde8(%rip),%xmm3
movsd  0xde8(%rip),%xmm4
movsd  0xde8(%rip),%xmm5
movsd  0xde8(%rip),%xmm6
movsd  0xde8(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1040 <testpassd@plt>
add    $0x20,%rsp
movsd  0xd98(%rip),%xmm0
movsd  0xd98(%rip),%xmm1
movsd  0xd98(%rip),%xmm2
movsd  0xd98(%rip),%xmm3
movsd  0xd98(%rip),%xmm4
movsd  0xd98(%rip),%xmm5
movsd  0xd98(%rip),%xmm6
movsd  0xd98(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1030 <testpassi@plt>
add    $0x20,%rsp
movsd  0xd48(%rip),%xmm0
movsd  0xd48(%rip),%xmm1
movsd  0xd48(%rip),%xmm2
movsd  0xd48(%rip),%xmm3
movsd  0xd48(%rip),%xmm4
movsd  0xd48(%rip),%xmm5
movsd  0xd48(%rip),%xmm6
movsd  0xd48(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1050 <testpassf@plt>
add    $0x20,%rsp
movsd  0xcf8(%rip),%xmm0
movsd  0xcf8(%rip),%xmm1
movsd  0xcf8(%rip),%xmm2
movsd  0xcf8(%rip),%xmm3
movsd  0xcf8(%rip),%xmm4
movsd  0xcf8(%rip),%xmm5
movsd  0xcf8(%rip),%xmm6
movsd  0xcf8(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1040 <testpassd@plt>
add    $0x20,%rsp
movsd  0xca8(%rip),%xmm0
movsd  0xca8(%rip),%xmm1
movsd  0xca8(%rip),%xmm2
movsd  0xca8(%rip),%xmm3
movsd  0xca8(%rip),%xmm4
movsd  0xca8(%rip),%xmm5
movsd  0xca8(%rip),%xmm6
movsd  0xca8(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1030 <testpassi@plt>
add    $0x20,%rsp
movsd  0xc58(%rip),%xmm0
movsd  0xc58(%rip),%xmm1
movsd  0xc58(%rip),%xmm2
movsd  0xc58(%rip),%xmm3
movsd  0xc58(%rip),%xmm4
movsd  0xc58(%rip),%xmm5
movsd  0xc58(%rip),%xmm6
movsd  0xc58(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1050 <testpassf@plt>
add    $0x20,%rsp
movsd  0xc08(%rip),%xmm0
movsd  0xc08(%rip),%xmm1
movsd  0xc08(%rip),%xmm2
movsd  0xc08(%rip),%xmm3
movsd  0xc08(%rip),%xmm4
movsd  0xc08(%rip),%xmm5
movsd  0xc08(%rip),%xmm6
movsd  0xc08(%rip),%xmm7
push   %rbx
push   %r12
push   %r15
push   %r14
call   1040 <testpassd@plt>
add    $0x20,%rsp
movss  0xbf8(%rip),%xmm1
mov    $0x1,%edi
movsd  0xbb3(%rip),%xmm0
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
jmp    1060 <testpassidf@plt>

LLVM IR (-O0):
define void @testParameterPassing() {
%1 = alloca float
%2 = call i32 @testpassi(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%3 = call i32 @testpassf(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%4 = call i32 @testpassd(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%5 = call i32 @testpassi(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%6 = call i32 @testpassf(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%7 = call i32 @testpassd(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%8 = call i32 @testpassi(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%9 = call i32 @testpassf(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%10 = call i32 @testpassd(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%11 = call i32 @testpassidf(i32 1, double 2.000000e+00, float 3.000000e+00)
ret void
}

LLVM IR (-O2):
define void @testParameterPassing() {
%1 = tail call i32 @testpassi(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%2 = tail call i32 @testpassf(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%3 = tail call i32 @testpassd(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%4 = tail call i32 @testpassi(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%5 = tail call i32 @testpassf(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%6 = tail call i32 @testpassd(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%7 = tail call i32 @testpassi(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%8 = tail call i32 @testpassf(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%9 = tail call i32 @testpassd(double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00, double 1.000000e+01, double 1.100000e+01, double 1.200000e+01)
%10 = tail call i32 @testpassidf(i32 1, double 2.000000e+00, float 3.000000e+00)
ret void
}