f(a, b, c, d, e, f, g, h, i, j, k, l, m, n, pt, fp) float g, h, i, j, k, l, m,
    n;
char *pt;
float fp;
{
  char *pt_local = pt + 1;
  printf("%p %f\n", pt, fp);
  float *pfp = &fp;
  if (*pfp != fp)
    abort();
  {
    extern char a;
    if (pt_local != &a + 1)
      abort();
  }
}


x86 assembly (clang, -O0):
<f>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movsd  %xmm7,-0x58(%rbp)
movsd  %xmm6,-0x60(%rbp)
movsd  %xmm5,-0x68(%rbp)
movaps %xmm3,%xmm5
movsd  -0x68(%rbp),%xmm3
movaps %xmm2,%xmm6
movsd  -0x60(%rbp),%xmm2
movaps %xmm1,%xmm7
movsd  -0x58(%rbp),%xmm1
movaps %xmm0,%xmm8
movsd  0x18(%rbp),%xmm0
mov    0x10(%rbp),%rax
cvtsd2ss %xmm8,%xmm8
cvtsd2ss %xmm7,%xmm7
cvtsd2ss %xmm6,%xmm6
cvtsd2ss %xmm5,%xmm5
cvtsd2ss %xmm4,%xmm4
cvtsd2ss %xmm3,%xmm3
cvtsd2ss %xmm2,%xmm2
cvtsd2ss %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm0
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
movss  %xmm8,-0x20(%rbp)
movss  %xmm7,-0x24(%rbp)
movss  %xmm6,-0x28(%rbp)
movss  %xmm5,-0x2c(%rbp)
movss  %xmm4,-0x30(%rbp)
movss  %xmm3,-0x34(%rbp)
movss  %xmm2,-0x38(%rbp)
movss  %xmm1,-0x3c(%rbp)
movss  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    0x10(%rbp),%rsi
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xe1d(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    -0x40(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
movss  (%rax),%xmm0
ucomiss -0x40(%rbp),%xmm0
jne    120f <f+0xef>
jp     120f <f+0xef>
jmp    1214 <f+0xf4>
call   1030 <abort@plt>
mov    0x2dcd(%rip),%rax
add    $0x1,%rax
cmp    %rax,-0x48(%rbp)
je     122e <f+0x10e>
call   1030 <abort@plt>
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<f>:
push   %rbx
sub    $0x10,%rsp
mov    0x20(%rsp),%rbx
movsd  0x28(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0xc(%rsp)
cvtss2sd %xmm0,%xmm0
lea    0xebb(%rip),%rdi
mov    %rbx,%rsi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0xc(%rsp),%xmm0
ucomiss %xmm0,%xmm0
jp     1169 <f+0x49>
cmp    0x2e87(%rip),%rbx
jne    1169 <f+0x49>
add    $0x10,%rsp
pop    %rbx
ret
call   1030 <abort@plt>

LLVM IR (-O0):
@.str = [7 x i8] c"%p %f\0A\00"
@a = external global i8
define i32 @f(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, i8* %14, double %15) {
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%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 i8*
%33 = alloca float
%34 = alloca i8*
%35 = alloca float*
%36 = fptrunc double %6 to float
%37 = fptrunc double %7 to float
%38 = fptrunc double %8 to float
%39 = fptrunc double %9 to float
%40 = fptrunc double %10 to float
%41 = fptrunc double %11 to float
%42 = fptrunc double %12 to float
%43 = fptrunc double %13 to float
%44 = fptrunc double %15 to float
store i32 %0, i32* %18
store i32 %1, i32* %19
store i32 %2, i32* %20
store i32 %3, i32* %21
store i32 %4, i32* %22
store i32 %5, i32* %23
store float %36, float* %24
store float %37, float* %25
store float %38, float* %26
store float %39, float* %27
store float %40, float* %28
store float %41, float* %29
store float %42, float* %30
store float %43, float* %31
store i8* %14, i8** %32
store float %44, float* %33
%45 = load i8*, i8** %32
%46 = getelementptr inbounds i8, i8* %45, i64 1
store i8* %46, i8** %34
%47 = load i8*, i8** %32
%48 = load float, float* %33
%49 = fpext float %48 to double
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i8* %47, double %49)
store float* %33, float** %35
%51 = load float*, float** %35
%52 = load float, float* %51
%53 = load float, float* %33
%54 = fcmp une float %52, %53
br i1 %54, label %55, label %56
55: ; preds = %16
unreachable
56: ; preds = %16
%57 = load i8*, i8** %34
%58 = icmp ne i8* %57, getelementptr inbounds (i8, i8* @a, i64 1)
br i1 %58, label %59, label %60
59: ; preds = %56
unreachable
60: ; preds = %56
%61 = load i32, i32* %17
ret i32 %61
}

LLVM IR (-O2):
@.str = [7 x i8] c"%p %f\0A\00"
@a = external global i8
define i32 @f(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double %13, i8* %14, double %15) {
%17 = fptrunc double %15 to float
%18 = fpext float %17 to double
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i8* %14, double %18)
%20 = fcmp uno float %17, 0.000000e+00
br i1 %20, label %21, label %22
21: ; preds = %16
tail call void @abort()
unreachable
22: ; preds = %16
%23 = icmp eq i8* %14, @a
br i1 %23, label %25, label %24
24: ; preds = %22
tail call void @abort()
unreachable
25: ; preds = %22
ret i32 undef
}