void dct64_486(int *a, int *b, double *samples) {
  int bufs[64];
  int i;
  for (i = 0; i < 32; i++) {
    bufs[i + 32] = ((int)((samples[i]) * 32768.0));
  }
  dct64_1_486(a, b, bufs, bufs + 0x20);
}


x86 assembly (clang, -O0):
<dct64_486>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x124(%rbp)
cmpl   $0x20,-0x124(%rbp)
jge    1180 <dct64_486+0x70>
mov    -0x18(%rbp),%rax
movslq -0x124(%rbp),%rcx
movsd  0xeaf(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x124(%rbp),%eax
add    $0x20,%eax
cltq
mov    %ecx,-0x120(%rbp,%rax,4)
mov    -0x124(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x124(%rbp)
jmp    1131 <dct64_486+0x21>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
lea    -0x120(%rbp),%rdx
lea    -0x120(%rbp),%rcx
add    $0x80,%rcx
mov    $0x0,%al
call   1030 <dct64_1_486@plt>
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dct64_486>:
sub    $0x108,%rsp
movupd (%rdx),%xmm1
movapd 0xedd(%rip),%xmm0
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0x80(%rsp)
movupd 0x10(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0x88(%rsp)
movupd 0x20(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0x90(%rsp)
movupd 0x30(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0x98(%rsp)
movupd 0x40(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xa0(%rsp)
movupd 0x50(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xa8(%rsp)
movupd 0x60(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xb0(%rsp)
movupd 0x70(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xb8(%rsp)
movupd 0x80(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xc0(%rsp)
movupd 0x90(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xc8(%rsp)
movupd 0xa0(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xd0(%rsp)
movupd 0xb0(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xd8(%rsp)
movupd 0xc0(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xe0(%rsp)
movupd 0xd0(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
lea    0x80(%rsp),%rcx
movlpd %xmm1,0xe8(%rsp)
movupd 0xe0(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm1
movlpd %xmm1,0xf0(%rsp)
movupd 0xf0(%rdx),%xmm1
mulpd  %xmm0,%xmm1
cvttpd2dq %xmm1,%xmm0
movlpd %xmm0,0xf8(%rsp)
mov    %rsp,%rdx
xor    %eax,%eax
call   1030 <dct64_1_486@plt>
add    $0x108,%rsp
ret

LLVM IR (-O0):
define void @dct64_486(i32* %0, i32* %1, double* %2) {
%4 = alloca i32*
%5 = alloca i32*
%6 = alloca double*
%7 = alloca [64 x i32]
%8 = alloca i32
store i32* %0, i32** %4
store i32* %1, i32** %5
store double* %2, double** %6
store i32 0, i32* %8
br label %9
9: ; preds = %24, %3
%10 = load i32, i32* %8
%11 = icmp slt i32 %10, 32
br i1 %11, label %12, label %27
12: ; preds = %9
%13 = load double*, double** %6
%14 = load i32, i32* %8
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds double, double* %13, i64 %15
%17 = load double, double* %16
%18 = fmul double %17, 3.276800e+04
%19 = fptosi double %18 to i32
%20 = load i32, i32* %8
%21 = add nsw i32 %20, 32
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [64 x i32], [64 x i32]* %7, i64 0, i64 %22
store i32 %19, i32* %23
br label %24
24: ; preds = %12
%25 = load i32, i32* %8
%26 = add nsw i32 %25, 1
store i32 %26, i32* %8
br label %9
27: ; preds = %9
%28 = load i32*, i32** %4
%29 = load i32*, i32** %5
%30 = getelementptr inbounds [64 x i32], [64 x i32]* %7, i64 0, i64 0
%31 = getelementptr inbounds [64 x i32], [64 x i32]* %7, i64 0, i64 0
%32 = getelementptr inbounds i32, i32* %31, i64 32
%33 = call i32 (i32*, i32*, i32*, i32*, ...) bitcast (i32 (...)* @dct64_1_486 to i32 (i32*, i32*, i32*, i32*, ...)*)(i32* %28, i32* %29, i32* %30, i32* %32)
ret void
}

LLVM IR (-O2):
define void @dct64_486(i32* %0, i32* %1, double* nocapture %2) {
%4 = alloca [64 x i32]
%5 = bitcast [64 x i32]* %4 to i8*
%6 = bitcast double* %2 to <2 x double>*
%7 = load <2 x double>, <2 x double>* %6
%8 = fmul <2 x double> %7, <double 3.276800e+04, double 3.276800e+04>
%9 = fptosi <2 x double> %8 to <2 x i32>
%10 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 32
%11 = bitcast i32* %10 to <2 x i32>*
store <2 x i32> %9, <2 x i32>* %11
%12 = getelementptr inbounds double, double* %2, i64 2
%13 = bitcast double* %12 to <2 x double>*
%14 = load <2 x double>, <2 x double>* %13
%15 = fmul <2 x double> %14, <double 3.276800e+04, double 3.276800e+04>
%16 = fptosi <2 x double> %15 to <2 x i32>
%17 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 34
%18 = bitcast i32* %17 to <2 x i32>*
store <2 x i32> %16, <2 x i32>* %18
%19 = getelementptr inbounds double, double* %2, i64 4
%20 = bitcast double* %19 to <2 x double>*
%21 = load <2 x double>, <2 x double>* %20
%22 = fmul <2 x double> %21, <double 3.276800e+04, double 3.276800e+04>
%23 = fptosi <2 x double> %22 to <2 x i32>
%24 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 36
%25 = bitcast i32* %24 to <2 x i32>*
store <2 x i32> %23, <2 x i32>* %25
%26 = getelementptr inbounds double, double* %2, i64 6
%27 = bitcast double* %26 to <2 x double>*
%28 = load <2 x double>, <2 x double>* %27
%29 = fmul <2 x double> %28, <double 3.276800e+04, double 3.276800e+04>
%30 = fptosi <2 x double> %29 to <2 x i32>
%31 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 38
%32 = bitcast i32* %31 to <2 x i32>*
store <2 x i32> %30, <2 x i32>* %32
%33 = getelementptr inbounds double, double* %2, i64 8
%34 = bitcast double* %33 to <2 x double>*
%35 = load <2 x double>, <2 x double>* %34
%36 = fmul <2 x double> %35, <double 3.276800e+04, double 3.276800e+04>
%37 = fptosi <2 x double> %36 to <2 x i32>
%38 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 40
%39 = bitcast i32* %38 to <2 x i32>*
store <2 x i32> %37, <2 x i32>* %39
%40 = getelementptr inbounds double, double* %2, i64 10
%41 = bitcast double* %40 to <2 x double>*
%42 = load <2 x double>, <2 x double>* %41
%43 = fmul <2 x double> %42, <double 3.276800e+04, double 3.276800e+04>
%44 = fptosi <2 x double> %43 to <2 x i32>
%45 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 42
%46 = bitcast i32* %45 to <2 x i32>*
store <2 x i32> %44, <2 x i32>* %46
%47 = getelementptr inbounds double, double* %2, i64 12
%48 = bitcast double* %47 to <2 x double>*
%49 = load <2 x double>, <2 x double>* %48
%50 = fmul <2 x double> %49, <double 3.276800e+04, double 3.276800e+04>
%51 = fptosi <2 x double> %50 to <2 x i32>
%52 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 44
%53 = bitcast i32* %52 to <2 x i32>*
store <2 x i32> %51, <2 x i32>* %53
%54 = getelementptr inbounds double, double* %2, i64 14
%55 = bitcast double* %54 to <2 x double>*
%56 = load <2 x double>, <2 x double>* %55
%57 = fmul <2 x double> %56, <double 3.276800e+04, double 3.276800e+04>
%58 = fptosi <2 x double> %57 to <2 x i32>
%59 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 46
%60 = bitcast i32* %59 to <2 x i32>*
store <2 x i32> %58, <2 x i32>* %60
%61 = getelementptr inbounds double, double* %2, i64 16
%62 = bitcast double* %61 to <2 x double>*
%63 = load <2 x double>, <2 x double>* %62
%64 = fmul <2 x double> %63, <double 3.276800e+04, double 3.276800e+04>
%65 = fptosi <2 x double> %64 to <2 x i32>
%66 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 48
%67 = bitcast i32* %66 to <2 x i32>*
store <2 x i32> %65, <2 x i32>* %67
%68 = getelementptr inbounds double, double* %2, i64 18
%69 = bitcast double* %68 to <2 x double>*
%70 = load <2 x double>, <2 x double>* %69
%71 = fmul <2 x double> %70, <double 3.276800e+04, double 3.276800e+04>
%72 = fptosi <2 x double> %71 to <2 x i32>
%73 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 50
%74 = bitcast i32* %73 to <2 x i32>*
store <2 x i32> %72, <2 x i32>* %74
%75 = getelementptr inbounds double, double* %2, i64 20
%76 = bitcast double* %75 to <2 x double>*
%77 = load <2 x double>, <2 x double>* %76
%78 = fmul <2 x double> %77, <double 3.276800e+04, double 3.276800e+04>
%79 = fptosi <2 x double> %78 to <2 x i32>
%80 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 52
%81 = bitcast i32* %80 to <2 x i32>*
store <2 x i32> %79, <2 x i32>* %81
%82 = getelementptr inbounds double, double* %2, i64 22
%83 = bitcast double* %82 to <2 x double>*
%84 = load <2 x double>, <2 x double>* %83
%85 = fmul <2 x double> %84, <double 3.276800e+04, double 3.276800e+04>
%86 = fptosi <2 x double> %85 to <2 x i32>
%87 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 54
%88 = bitcast i32* %87 to <2 x i32>*
store <2 x i32> %86, <2 x i32>* %88
%89 = getelementptr inbounds double, double* %2, i64 24
%90 = bitcast double* %89 to <2 x double>*
%91 = load <2 x double>, <2 x double>* %90
%92 = fmul <2 x double> %91, <double 3.276800e+04, double 3.276800e+04>
%93 = fptosi <2 x double> %92 to <2 x i32>
%94 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 56
%95 = bitcast i32* %94 to <2 x i32>*
store <2 x i32> %93, <2 x i32>* %95
%96 = getelementptr inbounds double, double* %2, i64 26
%97 = bitcast double* %96 to <2 x double>*
%98 = load <2 x double>, <2 x double>* %97
%99 = fmul <2 x double> %98, <double 3.276800e+04, double 3.276800e+04>
%100 = fptosi <2 x double> %99 to <2 x i32>
%101 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 58
%102 = bitcast i32* %101 to <2 x i32>*
store <2 x i32> %100, <2 x i32>* %102
%103 = getelementptr inbounds double, double* %2, i64 28
%104 = bitcast double* %103 to <2 x double>*
%105 = load <2 x double>, <2 x double>* %104
%106 = fmul <2 x double> %105, <double 3.276800e+04, double 3.276800e+04>
%107 = fptosi <2 x double> %106 to <2 x i32>
%108 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 60
%109 = bitcast i32* %108 to <2 x i32>*
store <2 x i32> %107, <2 x i32>* %109
%110 = getelementptr inbounds double, double* %2, i64 30
%111 = bitcast double* %110 to <2 x double>*
%112 = load <2 x double>, <2 x double>* %111
%113 = fmul <2 x double> %112, <double 3.276800e+04, double 3.276800e+04>
%114 = fptosi <2 x double> %113 to <2 x i32>
%115 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 62
%116 = bitcast i32* %115 to <2 x i32>*
store <2 x i32> %114, <2 x i32>* %116
%117 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 0
%118 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 32
%119 = call i32 (i32*, i32*, i32*, i32*, ...) bitcast (i32 (...)* @dct64_1_486 to i32 (i32*, i32*, i32*, i32*, ...)*)(i32* %0, i32* %1, i32* %117, i32* %118)
ret void
}