void window_subband(buffer, z, k) short **buffer;
double z[512];
int k;
{
  typedef double XX[2][512];
  static XX *x;
  int i, j;
  static off[2] = {0, 0};
  static char init = 0;
  static double *c;
  if (!init) {
    c = (double *)mem_alloc(sizeof(double) * 512, "window");
    read_ana_window(c);
    x = (XX *)mem_alloc(sizeof(XX), "x");
    for (i = 0; i < 2; i++)
      for (j = 0; j < 512; j++)
        (*x)[i][j] = 0;
    init = 1;
  }
  for (i = 0; i < 32; i++)
    (*x)[k][31 - i + off[k]] = (double)*(*buffer)++ / 32768;
  for (i = 0; i < 512; i++)
    z[i] = (*x)[k][(i + off[k]) & 512 - 1] * c[i];
  off[k] += 480;
  off[k] &= 512 - 1;
}


x86 assembly (clang, -O0):
<window_subband>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
cmpb   $0x0,0x2f0e(%rip)
jne    11f1 <window_subband+0xd1>
mov    $0x1000,%edi
lea    0xebc(%rip),%rsi
mov    $0x0,%al
call   1040 <mem_alloc@plt>
cltq
mov    %rax,0x2ef4(%rip)
mov    0x2eed(%rip),%rdi
mov    $0x0,%al
call   1030 <read_ana_window@plt>
mov    $0x2000,%edi
lea    0xe99(%rip),%rsi
mov    $0x0,%al
call   1040 <mem_alloc@plt>
cltq
mov    %rax,0x2eb2(%rip)
movl   $0x0,-0x18(%rbp)
cmpl   $0x2,-0x18(%rbp)
jge    11ea <window_subband+0xca>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x200,-0x1c(%rbp)
jge    11d7 <window_subband+0xb7>
mov    0x2e86(%rip),%rax
movslq -0x18(%rbp),%rcx
shl    $0xc,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    119e <window_subband+0x7e>
jmp    11dc <window_subband+0xbc>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    118d <window_subband+0x6d>
movb   $0x1,0x2e57(%rip)
movl   $0x0,-0x18(%rbp)
cmpl   $0x20,-0x18(%rbp)
jge    1264 <window_subband+0x144>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x2,%rdx
mov    %rdx,(%rcx)
movswl (%rax),%eax
cvtsi2sd %eax,%xmm0
movsd  0xdde(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    0x2e0b(%rip),%rax
movslq -0x14(%rbp),%rcx
shl    $0xc,%rcx
add    %rcx,%rax
mov    $0x1f,%ecx
sub    -0x18(%rbp),%ecx
movslq -0x14(%rbp),%rsi
lea    0x2df5(%rip),%rdx
add    (%rdx,%rsi,4),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11f8 <window_subband+0xd8>
movl   $0x0,-0x18(%rbp)
cmpl   $0x200,-0x18(%rbp)
jge    12d4 <window_subband+0x1b4>
mov    0x2db9(%rip),%rax
movslq -0x14(%rbp),%rcx
shl    $0xc,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
movslq -0x14(%rbp),%rsi
lea    0x2da8(%rip),%rdx
add    (%rdx,%rsi,4),%ecx
and    $0x1ff,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2da0(%rip),%rax
movslq -0x18(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    126b <window_subband+0x14b>
movslq -0x14(%rbp),%rcx
lea    0x2d61(%rip),%rax
mov    (%rax,%rcx,4),%edx
add    $0x1e0,%edx
lea    0x2d51(%rip),%rax
mov    %edx,(%rax,%rcx,4)
movslq -0x14(%rbp),%rcx
lea    0x2d43(%rip),%rax
mov    (%rax,%rcx,4),%edx
and    $0x1ff,%edx
lea    0x2d33(%rip),%rax
mov    %edx,(%rax,%rcx,4)
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<window_subband>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %edx,%r15d
mov    %rsi,%rbx
mov    %rdi,%r14
cmpb   $0x1,0x2f08(%rip)
jne    1153 <window_subband+0x23>
mov    0x2eef(%rip),%r12
jmp    11aa <window_subband+0x7a>
lea    0xeb6(%rip),%rsi
mov    $0x1000,%edi
xor    %eax,%eax
call   1050 <mem_alloc@plt>
movslq %eax,%rdi
mov    %rdi,0x2ee8(%rip)
xor    %eax,%eax
call   1040 <read_ana_window@plt>
lea    0xe99(%rip),%rsi
mov    $0x2000,%edi
xor    %eax,%eax
call   1050 <mem_alloc@plt>
movslq %eax,%r12
mov    %r12,0x2eac(%rip)
mov    $0x2000,%edx
mov    %r12,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
movb   $0x1,0x2ea6(%rip)
movslq %r15d,%r9
lea    0x2e94(%rip),%r8
movslq (%r8,%r9,4),%rbp
mov    (%r14),%rcx
lea    0x40(%rcx),%rdi
movd   (%rcx),%xmm0
pshuflw $0x60,%xmm0,%xmm0
psrad  $0x10,%xmm0
cvtdq2pd %xmm0,%xmm1
movapd 0xe27(%rip),%xmm0
mulpd  %xmm0,%xmm1
mov    %r9,%rsi
shl    $0xc,%rsi
add    %r12,%rsi
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0xf0(%rsi,%rbp,8)
movd   0x4(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0xe0(%rsi,%rbp,8)
movd   0x8(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0xd0(%rsi,%rbp,8)
movd   0xc(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0xc0(%rsi,%rbp,8)
movd   0x10(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0xb0(%rsi,%rbp,8)
movd   0x14(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0xa0(%rsi,%rbp,8)
movd   0x18(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x90(%rsi,%rbp,8)
movd   0x1c(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x80(%rsi,%rbp,8)
movd   0x20(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x70(%rsi,%rbp,8)
movd   0x24(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x60(%rsi,%rbp,8)
movd   0x28(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x50(%rsi,%rbp,8)
movd   0x2c(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x40(%rsi,%rbp,8)
movd   0x30(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x30(%rsi,%rbp,8)
movd   0x34(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x20(%rsi,%rbp,8)
movd   0x38(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,0x10(%rsi,%rbp,8)
movd   0x3c(%rcx),%xmm1
pshuflw $0x60,%xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2pd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
shufpd $0x1,%xmm1,%xmm1
movupd %xmm1,(%rsi,%rbp,8)
mov    %rdi,(%r14)
mov    0x2c47(%rip),%rcx
test   $0x1ff,%ebp
je     1477 <window_subband+0x347>
xor    %edx,%edx
mov    %ebp,%edi
nopl   (%rax)
mov    %edi,%eax
and    $0x1ff,%eax
movsd  (%rsi,%rax,8),%xmm0
mulsd  (%rcx,%rdx,8),%xmm0
movsd  %xmm0,(%rbx,%rdx,8)
lea    0x1(%rdi),%eax
and    $0x1ff,%eax
movsd  (%rsi,%rax,8),%xmm0
mulsd  0x8(%rcx,%rdx,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rdx,8)
add    $0x2,%rdx
add    $0x2,%edi
cmp    $0x200,%rdx
jne    1420 <window_subband+0x2f0>
lea    0x1e0(%rbp),%eax
and    $0x1ff,%eax
mov    %eax,(%r8,%r9,4)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %ebp,%edi
lea    0x1000(%rbx),%rax
lea    0x1000(%rcx),%r10
and    $0x1ff,%edi
lea    (%rsi,%rdi,8),%rdx
add    $0x1000,%rdx
cmp    %rbx,%r10
seta   %r10b
cmp    %rax,%rcx
setb   %r11b
cmp    %rbx,%rdx
seta   %dl
lea    (%rsi,%rdi,8),%rdi
cmp    %rax,%rdi
setb   %dil
test   %r11b,%r10b
jne    1419 <window_subband+0x2e9>
and    %dil,%dl
jne    1419 <window_subband+0x2e9>
xor    %edi,%edi
mov    %ebp,%eax
nopl   (%rax)
mov    %eax,%edx
and    $0x1ff,%edx
movupd (%rsi,%rdx,8),%xmm0
movupd 0x10(%rsi,%rdx,8),%xmm1
movupd (%rcx,%rdi,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%rcx,%rdi,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,(%rbx,%rdi,8)
movupd %xmm0,0x10(%rbx,%rdi,8)
lea    0x4(%rax),%edx
and    $0x1ff,%edx
movupd (%rsi,%rdx,8),%xmm0
movupd 0x10(%rsi,%rdx,8),%xmm1
movupd 0x20(%rcx,%rdi,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x30(%rcx,%rdi,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x20(%rbx,%rdi,8)
movupd %xmm0,0x30(%rbx,%rdi,8)
add    $0x8,%rdi
add    $0x8,%eax
cmp    $0x200,%rdi
jne    14d0 <window_subband+0x3a0>
jmp    145f <window_subband+0x32f>

LLVM IR (-O0):
@window_subband.x = internal global [2 x [512 x double]]* null
@window_subband.off = internal global [2 x i32] zeroinitializer
@window_subband.init = internal global i8 0
@window_subband.c = internal global double* null
@.str = [7 x i8] c"window\00"
@.str.1 = [2 x i8] c"x\00"
define void @window_subband(i16** %0, double* %1, i32 %2) {
%4 = alloca i16**
%5 = alloca double*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i16** %0, i16*** %4
store double* %1, double** %5
store i32 %2, i32* %6
%9 = load i8, i8* @window_subband.init
%10 = icmp ne i8 %9, 0
br i1 %10, label %43, label %11
11: ; preds = %3
%12 = call i32 (i64, i8*, ...) bitcast (i32 (...)* @mem_alloc to i32 (i64, i8*, ...)*)(i64 4096, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%13 = sext i32 %12 to i64
%14 = inttoptr i64 %13 to double*
store double* %14, double** @window_subband.c
%15 = load double*, double** @window_subband.c
%16 = call i32 (double*, ...) bitcast (i32 (...)* @read_ana_window to i32 (double*, ...)*)(double* %15)
%17 = call i32 (i64, i8*, ...) bitcast (i32 (...)* @mem_alloc to i32 (i64, i8*, ...)*)(i64 8192, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%18 = sext i32 %17 to i64
%19 = inttoptr i64 %18 to [2 x [512 x double]]*
store [2 x [512 x double]]* %19, [2 x [512 x double]]** @window_subband.x
store i32 0, i32* %7
br label %20
20: ; preds = %39, %11
%21 = load i32, i32* %7
%22 = icmp slt i32 %21, 2
br i1 %22, label %23, label %42
23: ; preds = %20
store i32 0, i32* %8
br label %24
24: ; preds = %35, %23
%25 = load i32, i32* %8
%26 = icmp slt i32 %25, 512
br i1 %26, label %27, label %38
27: ; preds = %24
%28 = load [2 x [512 x double]]*, [2 x [512 x double]]** @window_subband.x
%29 = load i32, i32* %7
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %28, i64 0, i64 %30
%32 = load i32, i32* %8
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [512 x double], [512 x double]* %31, i64 0, i64 %33
store double 0.000000e+00, double* %34
br label %35
35: ; preds = %27
%36 = load i32, i32* %8
%37 = add nsw i32 %36, 1
store i32 %37, i32* %8
br label %24
38: ; preds = %24
br label %39
39: ; preds = %38
%40 = load i32, i32* %7
%41 = add nsw i32 %40, 1
store i32 %41, i32* %7
br label %20
42: ; preds = %20
store i8 1, i8* @window_subband.init
br label %43
43: ; preds = %42, %3
store i32 0, i32* %7
br label %44
44: ; preds = %67, %43
%45 = load i32, i32* %7
%46 = icmp slt i32 %45, 32
br i1 %46, label %47, label %70
47: ; preds = %44
%48 = load i16**, i16*** %4
%49 = load i16*, i16** %48
%50 = getelementptr inbounds i16, i16* %49, i32 1
store i16* %50, i16** %48
%51 = load i16, i16* %49
%52 = sitofp i16 %51 to double
%53 = fdiv double %52, 3.276800e+04
%54 = load [2 x [512 x double]]*, [2 x [512 x double]]** @window_subband.x
%55 = load i32, i32* %6
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %54, i64 0, i64 %56
%58 = load i32, i32* %7
%59 = sub nsw i32 31, %58
%60 = load i32, i32* %6
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [2 x i32], [2 x i32]* @window_subband.off, i64 0, i64 %61
%63 = load i32, i32* %62
%64 = add nsw i32 %59, %63
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [512 x double], [512 x double]* %57, i64 0, i64 %65
store double %53, double* %66
br label %67
67: ; preds = %47
%68 = load i32, i32* %7
%69 = add nsw i32 %68, 1
store i32 %69, i32* %7
br label %44
70: ; preds = %44
store i32 0, i32* %7
br label %71
71: ; preds = %99, %70
%72 = load i32, i32* %7
%73 = icmp slt i32 %72, 512
br i1 %73, label %74, label %102
74: ; preds = %71
%75 = load [2 x [512 x double]]*, [2 x [512 x double]]** @window_subband.x
%76 = load i32, i32* %6
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %75, i64 0, i64 %77
%79 = load i32, i32* %7
%80 = load i32, i32* %6
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [2 x i32], [2 x i32]* @window_subband.off, i64 0, i64 %81
%83 = load i32, i32* %82
%84 = add nsw i32 %79, %83
%85 = and i32 %84, 511
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [512 x double], [512 x double]* %78, i64 0, i64 %86
%88 = load double, double* %87
%89 = load double*, double** @window_subband.c
%90 = load i32, i32* %7
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds double, double* %89, i64 %91
%93 = load double, double* %92
%94 = fmul double %88, %93
%95 = load double*, double** %5
%96 = load i32, i32* %7
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds double, double* %95, i64 %97
store double %94, double* %98
br label %99
99: ; preds = %74
%100 = load i32, i32* %7
%101 = add nsw i32 %100, 1
store i32 %101, i32* %7
br label %71
102: ; preds = %71
%103 = load i32, i32* %6
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds [2 x i32], [2 x i32]* @window_subband.off, i64 0, i64 %104
%106 = load i32, i32* %105
%107 = add nsw i32 %106, 480
store i32 %107, i32* %105
%108 = load i32, i32* %6
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [2 x i32], [2 x i32]* @window_subband.off, i64 0, i64 %109
%111 = load i32, i32* %110
%112 = and i32 %111, 511
store i32 %112, i32* %110
ret void
}

LLVM IR (-O2):
@window_subband.x = internal unnamed_addr global [2 x [512 x double]]* null
@window_subband.off = internal unnamed_addr global [2 x i32] zeroinitializer
@window_subband.init = internal unnamed_addr global i1 false
@window_subband.c = internal unnamed_addr global double* null
@.str = [7 x i8] c"window\00"
@.str.1 = [2 x i8] c"x\00"
define void @window_subband(i16** nocapture %0, double* nocapture writeonly %1, i32 %2) {
%4 = load i1, i1* @window_subband.init
br i1 %4, label %5, label %7
5: ; preds = %3
%6 = load [2 x [512 x double]]*, [2 x [512 x double]]** @window_subband.x
br label %16
7: ; preds = %3
%8 = tail call i32 (i64, i8*, ...) bitcast (i32 (...)* @mem_alloc to i32 (i64, i8*, ...)*)(i64 4096, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%9 = sext i32 %8 to i64
%10 = inttoptr i64 %9 to double*
store double* %10, double** @window_subband.c
%11 = tail call i32 (double*, ...) bitcast (i32 (...)* @read_ana_window to i32 (double*, ...)*)(double* %10)
%12 = tail call i32 (i64, i8*, ...) bitcast (i32 (...)* @mem_alloc to i32 (i64, i8*, ...)*)(i64 8192, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%13 = sext i32 %12 to i64
%14 = inttoptr i64 %13 to [2 x [512 x double]]*
%15 = inttoptr i64 %13 to i8*
store [2 x [512 x double]]* %14, [2 x [512 x double]]** @window_subband.x
store i1 true, i1* @window_subband.init
br label %16
16: ; preds = %5, %7
%17 = phi [2 x [512 x double]]* [ %6, %5 ], [ %14, %7 ]
%18 = sext i32 %2 to i64
%19 = getelementptr inbounds [2 x i32], [2 x i32]* @window_subband.off, i64 0, i64 %18
%20 = load i32, i32* %19
%21 = load i16*, i16** %0
%22 = sext i32 %20 to i64
%23 = getelementptr i16, i16* %21, i64 32
%24 = bitcast i16* %21 to <2 x i16>*
%25 = load <2 x i16>, <2 x i16>* %24
%26 = sitofp <2 x i16> %25 to <2 x double>
%27 = fmul <2 x double> %26, <double 0x3F00000000000000, double 0x3F00000000000000>
%28 = add nsw i64 %22, 31
%29 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %28
%30 = shufflevector <2 x double> %27, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%31 = getelementptr inbounds double, double* %29, i64 -1
%32 = bitcast double* %31 to <2 x double>*
store <2 x double> %30, <2 x double>* %32
%33 = getelementptr i16, i16* %21, i64 2
%34 = bitcast i16* %33 to <2 x i16>*
%35 = load <2 x i16>, <2 x i16>* %34
%36 = sitofp <2 x i16> %35 to <2 x double>
%37 = fmul <2 x double> %36, <double 0x3F00000000000000, double 0x3F00000000000000>
%38 = add nsw i64 %22, 29
%39 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %38
%40 = shufflevector <2 x double> %37, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%41 = getelementptr inbounds double, double* %39, i64 -1
%42 = bitcast double* %41 to <2 x double>*
store <2 x double> %40, <2 x double>* %42
%43 = getelementptr i16, i16* %21, i64 4
%44 = bitcast i16* %43 to <2 x i16>*
%45 = load <2 x i16>, <2 x i16>* %44
%46 = sitofp <2 x i16> %45 to <2 x double>
%47 = fmul <2 x double> %46, <double 0x3F00000000000000, double 0x3F00000000000000>
%48 = add nsw i64 %22, 27
%49 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %48
%50 = shufflevector <2 x double> %47, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%51 = getelementptr inbounds double, double* %49, i64 -1
%52 = bitcast double* %51 to <2 x double>*
store <2 x double> %50, <2 x double>* %52
%53 = getelementptr i16, i16* %21, i64 6
%54 = bitcast i16* %53 to <2 x i16>*
%55 = load <2 x i16>, <2 x i16>* %54
%56 = sitofp <2 x i16> %55 to <2 x double>
%57 = fmul <2 x double> %56, <double 0x3F00000000000000, double 0x3F00000000000000>
%58 = add nsw i64 %22, 25
%59 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %58
%60 = shufflevector <2 x double> %57, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%61 = getelementptr inbounds double, double* %59, i64 -1
%62 = bitcast double* %61 to <2 x double>*
store <2 x double> %60, <2 x double>* %62
%63 = getelementptr i16, i16* %21, i64 8
%64 = bitcast i16* %63 to <2 x i16>*
%65 = load <2 x i16>, <2 x i16>* %64
%66 = sitofp <2 x i16> %65 to <2 x double>
%67 = fmul <2 x double> %66, <double 0x3F00000000000000, double 0x3F00000000000000>
%68 = add nsw i64 %22, 23
%69 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %68
%70 = shufflevector <2 x double> %67, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%71 = getelementptr inbounds double, double* %69, i64 -1
%72 = bitcast double* %71 to <2 x double>*
store <2 x double> %70, <2 x double>* %72
%73 = getelementptr i16, i16* %21, i64 10
%74 = bitcast i16* %73 to <2 x i16>*
%75 = load <2 x i16>, <2 x i16>* %74
%76 = sitofp <2 x i16> %75 to <2 x double>
%77 = fmul <2 x double> %76, <double 0x3F00000000000000, double 0x3F00000000000000>
%78 = add nsw i64 %22, 21
%79 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %78
%80 = shufflevector <2 x double> %77, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%81 = getelementptr inbounds double, double* %79, i64 -1
%82 = bitcast double* %81 to <2 x double>*
store <2 x double> %80, <2 x double>* %82
%83 = getelementptr i16, i16* %21, i64 12
%84 = bitcast i16* %83 to <2 x i16>*
%85 = load <2 x i16>, <2 x i16>* %84
%86 = sitofp <2 x i16> %85 to <2 x double>
%87 = fmul <2 x double> %86, <double 0x3F00000000000000, double 0x3F00000000000000>
%88 = add nsw i64 %22, 19
%89 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %88
%90 = shufflevector <2 x double> %87, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%91 = getelementptr inbounds double, double* %89, i64 -1
%92 = bitcast double* %91 to <2 x double>*
store <2 x double> %90, <2 x double>* %92
%93 = getelementptr i16, i16* %21, i64 14
%94 = bitcast i16* %93 to <2 x i16>*
%95 = load <2 x i16>, <2 x i16>* %94
%96 = sitofp <2 x i16> %95 to <2 x double>
%97 = fmul <2 x double> %96, <double 0x3F00000000000000, double 0x3F00000000000000>
%98 = add nsw i64 %22, 17
%99 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %98
%100 = shufflevector <2 x double> %97, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%101 = getelementptr inbounds double, double* %99, i64 -1
%102 = bitcast double* %101 to <2 x double>*
store <2 x double> %100, <2 x double>* %102
%103 = getelementptr i16, i16* %21, i64 16
%104 = bitcast i16* %103 to <2 x i16>*
%105 = load <2 x i16>, <2 x i16>* %104
%106 = sitofp <2 x i16> %105 to <2 x double>
%107 = fmul <2 x double> %106, <double 0x3F00000000000000, double 0x3F00000000000000>
%108 = add nsw i64 %22, 15
%109 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %108
%110 = shufflevector <2 x double> %107, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%111 = getelementptr inbounds double, double* %109, i64 -1
%112 = bitcast double* %111 to <2 x double>*
store <2 x double> %110, <2 x double>* %112
%113 = getelementptr i16, i16* %21, i64 18
%114 = bitcast i16* %113 to <2 x i16>*
%115 = load <2 x i16>, <2 x i16>* %114
%116 = sitofp <2 x i16> %115 to <2 x double>
%117 = fmul <2 x double> %116, <double 0x3F00000000000000, double 0x3F00000000000000>
%118 = add nsw i64 %22, 13
%119 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %118
%120 = shufflevector <2 x double> %117, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%121 = getelementptr inbounds double, double* %119, i64 -1
%122 = bitcast double* %121 to <2 x double>*
store <2 x double> %120, <2 x double>* %122
%123 = getelementptr i16, i16* %21, i64 20
%124 = bitcast i16* %123 to <2 x i16>*
%125 = load <2 x i16>, <2 x i16>* %124
%126 = sitofp <2 x i16> %125 to <2 x double>
%127 = fmul <2 x double> %126, <double 0x3F00000000000000, double 0x3F00000000000000>
%128 = add nsw i64 %22, 11
%129 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %128
%130 = shufflevector <2 x double> %127, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%131 = getelementptr inbounds double, double* %129, i64 -1
%132 = bitcast double* %131 to <2 x double>*
store <2 x double> %130, <2 x double>* %132
%133 = getelementptr i16, i16* %21, i64 22
%134 = bitcast i16* %133 to <2 x i16>*
%135 = load <2 x i16>, <2 x i16>* %134
%136 = sitofp <2 x i16> %135 to <2 x double>
%137 = fmul <2 x double> %136, <double 0x3F00000000000000, double 0x3F00000000000000>
%138 = add nsw i64 %22, 9
%139 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %138
%140 = shufflevector <2 x double> %137, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%141 = getelementptr inbounds double, double* %139, i64 -1
%142 = bitcast double* %141 to <2 x double>*
store <2 x double> %140, <2 x double>* %142
%143 = getelementptr i16, i16* %21, i64 24
%144 = bitcast i16* %143 to <2 x i16>*
%145 = load <2 x i16>, <2 x i16>* %144
%146 = sitofp <2 x i16> %145 to <2 x double>
%147 = fmul <2 x double> %146, <double 0x3F00000000000000, double 0x3F00000000000000>
%148 = add nsw i64 %22, 7
%149 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %148
%150 = shufflevector <2 x double> %147, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%151 = getelementptr inbounds double, double* %149, i64 -1
%152 = bitcast double* %151 to <2 x double>*
store <2 x double> %150, <2 x double>* %152
%153 = getelementptr i16, i16* %21, i64 26
%154 = bitcast i16* %153 to <2 x i16>*
%155 = load <2 x i16>, <2 x i16>* %154
%156 = sitofp <2 x i16> %155 to <2 x double>
%157 = fmul <2 x double> %156, <double 0x3F00000000000000, double 0x3F00000000000000>
%158 = add nsw i64 %22, 5
%159 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %158
%160 = shufflevector <2 x double> %157, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%161 = getelementptr inbounds double, double* %159, i64 -1
%162 = bitcast double* %161 to <2 x double>*
store <2 x double> %160, <2 x double>* %162
%163 = getelementptr i16, i16* %21, i64 28
%164 = bitcast i16* %163 to <2 x i16>*
%165 = load <2 x i16>, <2 x i16>* %164
%166 = sitofp <2 x i16> %165 to <2 x double>
%167 = fmul <2 x double> %166, <double 0x3F00000000000000, double 0x3F00000000000000>
%168 = add nsw i64 %22, 3
%169 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %168
%170 = shufflevector <2 x double> %167, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%171 = getelementptr inbounds double, double* %169, i64 -1
%172 = bitcast double* %171 to <2 x double>*
store <2 x double> %170, <2 x double>* %172
%173 = getelementptr i16, i16* %21, i64 30
%174 = bitcast i16* %173 to <2 x i16>*
%175 = load <2 x i16>, <2 x i16>* %174
%176 = sitofp <2 x i16> %175 to <2 x double>
%177 = fmul <2 x double> %176, <double 0x3F00000000000000, double 0x3F00000000000000>
%178 = shufflevector <2 x double> %177, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%179 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %22
%180 = bitcast double* %179 to <2 x double>*
store <2 x double> %178, <2 x double>* %180
store i16* %23, i16** %0
%181 = load double*, double** @window_subband.c
%182 = trunc i32 %20 to i9
%183 = icmp eq i9 %182, 0
br i1 %183, label %185, label %184
184: ; preds = %185, %16
br label %249
185: ; preds = %16
%186 = getelementptr double, double* %1, i64 512
%187 = getelementptr double, double* %181, i64 512
%188 = and i32 %20, 511
%189 = zext i32 %188 to i64
%190 = getelementptr [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %189
%191 = add nsw i64 %18, 1
%192 = getelementptr [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %191, i64 %189
%193 = icmp ugt double* %187, %1
%194 = icmp ult double* %181, %186
%195 = and i1 %193, %194
%196 = icmp ugt double* %192, %1
%197 = icmp ult double* %190, %186
%198 = and i1 %196, %197
%199 = or i1 %195, %198
br i1 %199, label %184, label %200
200: ; preds = %185, %200
%201 = phi i64 [ %247, %200 ], [ 0, %185 ]
%202 = trunc i64 %201 to i32
%203 = add i32 %20, %202
%204 = and i32 %203, 511
%205 = zext i32 %204 to i64
%206 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %205
%207 = bitcast double* %206 to <2 x double>*
%208 = load <2 x double>, <2 x double>* %207
%209 = getelementptr inbounds double, double* %206, i64 2
%210 = bitcast double* %209 to <2 x double>*
%211 = load <2 x double>, <2 x double>* %210
%212 = getelementptr inbounds double, double* %181, i64 %201
%213 = bitcast double* %212 to <2 x double>*
%214 = load <2 x double>, <2 x double>* %213
%215 = getelementptr inbounds double, double* %212, i64 2
%216 = bitcast double* %215 to <2 x double>*
%217 = load <2 x double>, <2 x double>* %216
%218 = fmul <2 x double> %208, %214
%219 = fmul <2 x double> %211, %217
%220 = getelementptr inbounds double, double* %1, i64 %201
%221 = bitcast double* %220 to <2 x double>*
store <2 x double> %218, <2 x double>* %221
%222 = getelementptr inbounds double, double* %220, i64 2
%223 = bitcast double* %222 to <2 x double>*
store <2 x double> %219, <2 x double>* %223
%224 = or i64 %201, 4
%225 = trunc i64 %224 to i32
%226 = add i32 %20, %225
%227 = and i32 %226, 511
%228 = zext i32 %227 to i64
%229 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %228
%230 = bitcast double* %229 to <2 x double>*
%231 = load <2 x double>, <2 x double>* %230
%232 = getelementptr inbounds double, double* %229, i64 2
%233 = bitcast double* %232 to <2 x double>*
%234 = load <2 x double>, <2 x double>* %233
%235 = getelementptr inbounds double, double* %181, i64 %224
%236 = bitcast double* %235 to <2 x double>*
%237 = load <2 x double>, <2 x double>* %236
%238 = getelementptr inbounds double, double* %235, i64 2
%239 = bitcast double* %238 to <2 x double>*
%240 = load <2 x double>, <2 x double>* %239
%241 = fmul <2 x double> %231, %237
%242 = fmul <2 x double> %234, %240
%243 = getelementptr inbounds double, double* %1, i64 %224
%244 = bitcast double* %243 to <2 x double>*
store <2 x double> %241, <2 x double>* %244
%245 = getelementptr inbounds double, double* %243, i64 2
%246 = bitcast double* %245 to <2 x double>*
store <2 x double> %242, <2 x double>* %246
%247 = add nuw nsw i64 %201, 8
%248 = icmp eq i64 %247, 512
br i1 %248, label %274, label %200
249: ; preds = %249, %184
%250 = phi i64 [ 0, %184 ], [ %272, %249 ]
%251 = trunc i64 %250 to i32
%252 = add i32 %20, %251
%253 = and i32 %252, 511
%254 = zext i32 %253 to i64
%255 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %254
%256 = load double, double* %255
%257 = getelementptr inbounds double, double* %181, i64 %250
%258 = load double, double* %257
%259 = fmul double %256, %258
%260 = getelementptr inbounds double, double* %1, i64 %250
store double %259, double* %260
%261 = or i64 %250, 1
%262 = trunc i64 %261 to i32
%263 = add i32 %20, %262
%264 = and i32 %263, 511
%265 = zext i32 %264 to i64
%266 = getelementptr inbounds [2 x [512 x double]], [2 x [512 x double]]* %17, i64 0, i64 %18, i64 %265
%267 = load double, double* %266
%268 = getelementptr inbounds double, double* %181, i64 %261
%269 = load double, double* %268
%270 = fmul double %267, %269
%271 = getelementptr inbounds double, double* %1, i64 %261
store double %270, double* %271
%272 = add nuw nsw i64 %250, 2
%273 = icmp eq i64 %272, 512
br i1 %273, label %274, label %249
274: ; preds = %200, %249
%275 = add nsw i32 %20, 480
%276 = and i32 %275, 511
store i32 %276, i32* %19
ret void
}