void revbin_permute_16(double _Complex *f) {
  {
    double _Complex t = f[1];
    f[1] = f[8];
    f[8] = t;
  };
  {
    double _Complex t = f[2];
    f[2] = f[4];
    f[4] = t;
  };
  {
    double _Complex t = f[3];
    f[3] = f[12];
    f[12] = t;
  };
  {
    double _Complex t = f[5];
    f[5] = f[10];
    f[10] = t;
  };
  {
    double _Complex t = f[7];
    f[7] = f[14];
    f[14] = t;
  };
  {
    double _Complex t = f[11];
    f[11] = f[13];
    f[13] = t;
  };
}


x86 assembly (clang, -O0):
<revbin_permute_16>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x80(%rax),%xmm1
movsd  0x88(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0x18(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x80(%rax)
movsd  %xmm0,0x88(%rax)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
movsd  0x48(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0x28(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x40(%rax)
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x38(%rbp)
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xc0(%rax),%xmm1
movsd  0xc8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0x38(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xc0(%rax)
movsd  %xmm0,0xc8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  0x58(%rax),%xmm0
movsd  %xmm1,-0x48(%rbp)
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xa0(%rax),%xmm1
movsd  0xa8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x50(%rax)
movsd  %xmm0,0x58(%rax)
movsd  -0x48(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xa0(%rax)
movsd  %xmm0,0xa8(%rax)
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  0x78(%rax),%xmm0
movsd  %xmm1,-0x58(%rbp)
movsd  %xmm0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xe0(%rax),%xmm1
movsd  0xe8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x70(%rax)
movsd  %xmm0,0x78(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xe0(%rax)
movsd  %xmm0,0xe8(%rax)
mov    -0x8(%rbp),%rax
movsd  0xb0(%rax),%xmm1
movsd  0xb8(%rax),%xmm0
movsd  %xmm1,-0x68(%rbp)
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xd0(%rax),%xmm1
movsd  0xd8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xb0(%rax)
movsd  %xmm0,0xb8(%rax)
movsd  -0x68(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0xd0(%rax)
movsd  %xmm0,0xd8(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<revbin_permute_16>:
movups 0x80(%rdi),%xmm0
movups 0x10(%rdi),%xmm1
movups 0x20(%rdi),%xmm2
movups 0x30(%rdi),%xmm3
movups 0x40(%rdi),%xmm4
movups %xmm0,0x10(%rdi)
movups %xmm1,0x80(%rdi)
movups %xmm4,0x20(%rdi)
movups %xmm2,0x40(%rdi)
movups 0xc0(%rdi),%xmm0
movups %xmm0,0x30(%rdi)
movups %xmm3,0xc0(%rdi)
movups 0x50(%rdi),%xmm0
movups 0xa0(%rdi),%xmm1
movups %xmm1,0x50(%rdi)
movups %xmm0,0xa0(%rdi)
movups 0x70(%rdi),%xmm0
movups 0xe0(%rdi),%xmm1
movups %xmm1,0x70(%rdi)
movups %xmm0,0xe0(%rdi)
movups 0xb0(%rdi),%xmm0
movups 0xd0(%rdi),%xmm1
movups %xmm1,0xb0(%rdi)
movups %xmm0,0xd0(%rdi)
ret

LLVM IR (-O0):
define void @revbin_permute_16({ double, double }* %0) {
%2 = alloca { double, double }*
%3 = alloca { double, double }
%4 = alloca { double, double }
%5 = alloca { double, double }
%6 = alloca { double, double }
%7 = alloca { double, double }
%8 = alloca { double, double }
store { double, double }* %0, { double, double }** %2
%9 = load { double, double }*, { double, double }** %2
%10 = getelementptr inbounds { double, double }, { double, double }* %9, i64 1
%11 = getelementptr inbounds { double, double }, { double, double }* %10, i32 0, i32 0
%12 = load double, double* %11
%13 = getelementptr inbounds { double, double }, { double, double }* %10, i32 0, i32 1
%14 = load double, double* %13
%15 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%16 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
store double %12, double* %15
store double %14, double* %16
%17 = load { double, double }*, { double, double }** %2
%18 = getelementptr inbounds { double, double }, { double, double }* %17, i64 8
%19 = getelementptr inbounds { double, double }, { double, double }* %18, i32 0, i32 0
%20 = load double, double* %19
%21 = getelementptr inbounds { double, double }, { double, double }* %18, i32 0, i32 1
%22 = load double, double* %21
%23 = load { double, double }*, { double, double }** %2
%24 = getelementptr inbounds { double, double }, { double, double }* %23, i64 1
%25 = getelementptr inbounds { double, double }, { double, double }* %24, i32 0, i32 0
%26 = getelementptr inbounds { double, double }, { double, double }* %24, i32 0, i32 1
store double %20, double* %25
store double %22, double* %26
%27 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%28 = load double, double* %27
%29 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%30 = load double, double* %29
%31 = load { double, double }*, { double, double }** %2
%32 = getelementptr inbounds { double, double }, { double, double }* %31, i64 8
%33 = getelementptr inbounds { double, double }, { double, double }* %32, i32 0, i32 0
%34 = getelementptr inbounds { double, double }, { double, double }* %32, i32 0, i32 1
store double %28, double* %33
store double %30, double* %34
%35 = load { double, double }*, { double, double }** %2
%36 = getelementptr inbounds { double, double }, { double, double }* %35, i64 2
%37 = getelementptr inbounds { double, double }, { double, double }* %36, i32 0, i32 0
%38 = load double, double* %37
%39 = getelementptr inbounds { double, double }, { double, double }* %36, i32 0, i32 1
%40 = load double, double* %39
%41 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 0
%42 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 1
store double %38, double* %41
store double %40, double* %42
%43 = load { double, double }*, { double, double }** %2
%44 = getelementptr inbounds { double, double }, { double, double }* %43, i64 4
%45 = getelementptr inbounds { double, double }, { double, double }* %44, i32 0, i32 0
%46 = load double, double* %45
%47 = getelementptr inbounds { double, double }, { double, double }* %44, i32 0, i32 1
%48 = load double, double* %47
%49 = load { double, double }*, { double, double }** %2
%50 = getelementptr inbounds { double, double }, { double, double }* %49, i64 2
%51 = getelementptr inbounds { double, double }, { double, double }* %50, i32 0, i32 0
%52 = getelementptr inbounds { double, double }, { double, double }* %50, i32 0, i32 1
store double %46, double* %51
store double %48, double* %52
%53 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 0
%54 = load double, double* %53
%55 = getelementptr inbounds { double, double }, { double, double }* %4, i32 0, i32 1
%56 = load double, double* %55
%57 = load { double, double }*, { double, double }** %2
%58 = getelementptr inbounds { double, double }, { double, double }* %57, i64 4
%59 = getelementptr inbounds { double, double }, { double, double }* %58, i32 0, i32 0
%60 = getelementptr inbounds { double, double }, { double, double }* %58, i32 0, i32 1
store double %54, double* %59
store double %56, double* %60
%61 = load { double, double }*, { double, double }** %2
%62 = getelementptr inbounds { double, double }, { double, double }* %61, i64 3
%63 = getelementptr inbounds { double, double }, { double, double }* %62, i32 0, i32 0
%64 = load double, double* %63
%65 = getelementptr inbounds { double, double }, { double, double }* %62, i32 0, i32 1
%66 = load double, double* %65
%67 = getelementptr inbounds { double, double }, { double, double }* %5, i32 0, i32 0
%68 = getelementptr inbounds { double, double }, { double, double }* %5, i32 0, i32 1
store double %64, double* %67
store double %66, double* %68
%69 = load { double, double }*, { double, double }** %2
%70 = getelementptr inbounds { double, double }, { double, double }* %69, i64 12
%71 = getelementptr inbounds { double, double }, { double, double }* %70, i32 0, i32 0
%72 = load double, double* %71
%73 = getelementptr inbounds { double, double }, { double, double }* %70, i32 0, i32 1
%74 = load double, double* %73
%75 = load { double, double }*, { double, double }** %2
%76 = getelementptr inbounds { double, double }, { double, double }* %75, i64 3
%77 = getelementptr inbounds { double, double }, { double, double }* %76, i32 0, i32 0
%78 = getelementptr inbounds { double, double }, { double, double }* %76, i32 0, i32 1
store double %72, double* %77
store double %74, double* %78
%79 = getelementptr inbounds { double, double }, { double, double }* %5, i32 0, i32 0
%80 = load double, double* %79
%81 = getelementptr inbounds { double, double }, { double, double }* %5, i32 0, i32 1
%82 = load double, double* %81
%83 = load { double, double }*, { double, double }** %2
%84 = getelementptr inbounds { double, double }, { double, double }* %83, i64 12
%85 = getelementptr inbounds { double, double }, { double, double }* %84, i32 0, i32 0
%86 = getelementptr inbounds { double, double }, { double, double }* %84, i32 0, i32 1
store double %80, double* %85
store double %82, double* %86
%87 = load { double, double }*, { double, double }** %2
%88 = getelementptr inbounds { double, double }, { double, double }* %87, i64 5
%89 = getelementptr inbounds { double, double }, { double, double }* %88, i32 0, i32 0
%90 = load double, double* %89
%91 = getelementptr inbounds { double, double }, { double, double }* %88, i32 0, i32 1
%92 = load double, double* %91
%93 = getelementptr inbounds { double, double }, { double, double }* %6, i32 0, i32 0
%94 = getelementptr inbounds { double, double }, { double, double }* %6, i32 0, i32 1
store double %90, double* %93
store double %92, double* %94
%95 = load { double, double }*, { double, double }** %2
%96 = getelementptr inbounds { double, double }, { double, double }* %95, i64 10
%97 = getelementptr inbounds { double, double }, { double, double }* %96, i32 0, i32 0
%98 = load double, double* %97
%99 = getelementptr inbounds { double, double }, { double, double }* %96, i32 0, i32 1
%100 = load double, double* %99
%101 = load { double, double }*, { double, double }** %2
%102 = getelementptr inbounds { double, double }, { double, double }* %101, i64 5
%103 = getelementptr inbounds { double, double }, { double, double }* %102, i32 0, i32 0
%104 = getelementptr inbounds { double, double }, { double, double }* %102, i32 0, i32 1
store double %98, double* %103
store double %100, double* %104
%105 = getelementptr inbounds { double, double }, { double, double }* %6, i32 0, i32 0
%106 = load double, double* %105
%107 = getelementptr inbounds { double, double }, { double, double }* %6, i32 0, i32 1
%108 = load double, double* %107
%109 = load { double, double }*, { double, double }** %2
%110 = getelementptr inbounds { double, double }, { double, double }* %109, i64 10
%111 = getelementptr inbounds { double, double }, { double, double }* %110, i32 0, i32 0
%112 = getelementptr inbounds { double, double }, { double, double }* %110, i32 0, i32 1
store double %106, double* %111
store double %108, double* %112
%113 = load { double, double }*, { double, double }** %2
%114 = getelementptr inbounds { double, double }, { double, double }* %113, i64 7
%115 = getelementptr inbounds { double, double }, { double, double }* %114, i32 0, i32 0
%116 = load double, double* %115
%117 = getelementptr inbounds { double, double }, { double, double }* %114, i32 0, i32 1
%118 = load double, double* %117
%119 = getelementptr inbounds { double, double }, { double, double }* %7, i32 0, i32 0
%120 = getelementptr inbounds { double, double }, { double, double }* %7, i32 0, i32 1
store double %116, double* %119
store double %118, double* %120
%121 = load { double, double }*, { double, double }** %2
%122 = getelementptr inbounds { double, double }, { double, double }* %121, i64 14
%123 = getelementptr inbounds { double, double }, { double, double }* %122, i32 0, i32 0
%124 = load double, double* %123
%125 = getelementptr inbounds { double, double }, { double, double }* %122, i32 0, i32 1
%126 = load double, double* %125
%127 = load { double, double }*, { double, double }** %2
%128 = getelementptr inbounds { double, double }, { double, double }* %127, i64 7
%129 = getelementptr inbounds { double, double }, { double, double }* %128, i32 0, i32 0
%130 = getelementptr inbounds { double, double }, { double, double }* %128, i32 0, i32 1
store double %124, double* %129
store double %126, double* %130
%131 = getelementptr inbounds { double, double }, { double, double }* %7, i32 0, i32 0
%132 = load double, double* %131
%133 = getelementptr inbounds { double, double }, { double, double }* %7, i32 0, i32 1
%134 = load double, double* %133
%135 = load { double, double }*, { double, double }** %2
%136 = getelementptr inbounds { double, double }, { double, double }* %135, i64 14
%137 = getelementptr inbounds { double, double }, { double, double }* %136, i32 0, i32 0
%138 = getelementptr inbounds { double, double }, { double, double }* %136, i32 0, i32 1
store double %132, double* %137
store double %134, double* %138
%139 = load { double, double }*, { double, double }** %2
%140 = getelementptr inbounds { double, double }, { double, double }* %139, i64 11
%141 = getelementptr inbounds { double, double }, { double, double }* %140, i32 0, i32 0
%142 = load double, double* %141
%143 = getelementptr inbounds { double, double }, { double, double }* %140, i32 0, i32 1
%144 = load double, double* %143
%145 = getelementptr inbounds { double, double }, { double, double }* %8, i32 0, i32 0
%146 = getelementptr inbounds { double, double }, { double, double }* %8, i32 0, i32 1
store double %142, double* %145
store double %144, double* %146
%147 = load { double, double }*, { double, double }** %2
%148 = getelementptr inbounds { double, double }, { double, double }* %147, i64 13
%149 = getelementptr inbounds { double, double }, { double, double }* %148, i32 0, i32 0
%150 = load double, double* %149
%151 = getelementptr inbounds { double, double }, { double, double }* %148, i32 0, i32 1
%152 = load double, double* %151
%153 = load { double, double }*, { double, double }** %2
%154 = getelementptr inbounds { double, double }, { double, double }* %153, i64 11
%155 = getelementptr inbounds { double, double }, { double, double }* %154, i32 0, i32 0
%156 = getelementptr inbounds { double, double }, { double, double }* %154, i32 0, i32 1
store double %150, double* %155
store double %152, double* %156
%157 = getelementptr inbounds { double, double }, { double, double }* %8, i32 0, i32 0
%158 = load double, double* %157
%159 = getelementptr inbounds { double, double }, { double, double }* %8, i32 0, i32 1
%160 = load double, double* %159
%161 = load { double, double }*, { double, double }** %2
%162 = getelementptr inbounds { double, double }, { double, double }* %161, i64 13
%163 = getelementptr inbounds { double, double }, { double, double }* %162, i32 0, i32 0
%164 = getelementptr inbounds { double, double }, { double, double }* %162, i32 0, i32 1
store double %158, double* %163
store double %160, double* %164
ret void
}

LLVM IR (-O2):
define void @revbin_permute_16({ double, double }* %0) {
%2 = getelementptr inbounds { double, double }, { double, double }* %0, i64 1, i32 0
%3 = bitcast double* %2 to <2 x double>*
%4 = load <2 x double>, <2 x double>* %3
%5 = getelementptr inbounds { double, double }, { double, double }* %0, i64 8, i32 0
%6 = bitcast double* %5 to <2 x double>*
%7 = load <2 x double>, <2 x double>* %6
%8 = bitcast double* %2 to <2 x double>*
store <2 x double> %7, <2 x double>* %8
%9 = bitcast double* %5 to <2 x double>*
store <2 x double> %4, <2 x double>* %9
%10 = getelementptr inbounds { double, double }, { double, double }* %0, i64 2, i32 0
%11 = bitcast double* %10 to <2 x double>*
%12 = load <2 x double>, <2 x double>* %11
%13 = getelementptr inbounds { double, double }, { double, double }* %0, i64 4, i32 0
%14 = bitcast double* %13 to <2 x double>*
%15 = load <2 x double>, <2 x double>* %14
%16 = bitcast double* %10 to <2 x double>*
store <2 x double> %15, <2 x double>* %16
%17 = bitcast double* %13 to <2 x double>*
store <2 x double> %12, <2 x double>* %17
%18 = getelementptr inbounds { double, double }, { double, double }* %0, i64 3, i32 0
%19 = bitcast double* %18 to <2 x double>*
%20 = load <2 x double>, <2 x double>* %19
%21 = getelementptr inbounds { double, double }, { double, double }* %0, i64 12, i32 0
%22 = bitcast double* %21 to <2 x double>*
%23 = load <2 x double>, <2 x double>* %22
%24 = bitcast double* %18 to <2 x double>*
store <2 x double> %23, <2 x double>* %24
%25 = bitcast double* %21 to <2 x double>*
store <2 x double> %20, <2 x double>* %25
%26 = getelementptr inbounds { double, double }, { double, double }* %0, i64 5, i32 0
%27 = bitcast double* %26 to <2 x double>*
%28 = load <2 x double>, <2 x double>* %27
%29 = getelementptr inbounds { double, double }, { double, double }* %0, i64 10, i32 0
%30 = bitcast double* %29 to <2 x double>*
%31 = load <2 x double>, <2 x double>* %30
%32 = bitcast double* %26 to <2 x double>*
store <2 x double> %31, <2 x double>* %32
%33 = bitcast double* %29 to <2 x double>*
store <2 x double> %28, <2 x double>* %33
%34 = getelementptr inbounds { double, double }, { double, double }* %0, i64 7, i32 0
%35 = bitcast double* %34 to <2 x double>*
%36 = load <2 x double>, <2 x double>* %35
%37 = getelementptr inbounds { double, double }, { double, double }* %0, i64 14, i32 0
%38 = bitcast double* %37 to <2 x double>*
%39 = load <2 x double>, <2 x double>* %38
%40 = bitcast double* %34 to <2 x double>*
store <2 x double> %39, <2 x double>* %40
%41 = bitcast double* %37 to <2 x double>*
store <2 x double> %36, <2 x double>* %41
%42 = getelementptr inbounds { double, double }, { double, double }* %0, i64 11, i32 0
%43 = bitcast double* %42 to <2 x double>*
%44 = load <2 x double>, <2 x double>* %43
%45 = getelementptr inbounds { double, double }, { double, double }* %0, i64 13, i32 0
%46 = bitcast double* %45 to <2 x double>*
%47 = load <2 x double>, <2 x double>* %46
%48 = bitcast double* %42 to <2 x double>*
store <2 x double> %47, <2 x double>* %48
%49 = bitcast double* %45 to <2 x double>*
store <2 x double> %44, <2 x double>* %49
ret void
}