annotate src/fftw-3.3.5/rdft/simd/common/hc2cbdftv_12.c @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 2cd0e3b3e1fd
children
rev   line source
Chris@42 1 /*
Chris@42 2 * Copyright (c) 2003, 2007-14 Matteo Frigo
Chris@42 3 * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
Chris@42 4 *
Chris@42 5 * This program is free software; you can redistribute it and/or modify
Chris@42 6 * it under the terms of the GNU General Public License as published by
Chris@42 7 * the Free Software Foundation; either version 2 of the License, or
Chris@42 8 * (at your option) any later version.
Chris@42 9 *
Chris@42 10 * This program is distributed in the hope that it will be useful,
Chris@42 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@42 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@42 13 * GNU General Public License for more details.
Chris@42 14 *
Chris@42 15 * You should have received a copy of the GNU General Public License
Chris@42 16 * along with this program; if not, write to the Free Software
Chris@42 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Chris@42 18 *
Chris@42 19 */
Chris@42 20
Chris@42 21 /* This file was automatically generated --- DO NOT EDIT */
Chris@42 22 /* Generated on Sat Jul 30 16:52:44 EDT 2016 */
Chris@42 23
Chris@42 24 #include "codelet-rdft.h"
Chris@42 25
Chris@42 26 #ifdef HAVE_FMA
Chris@42 27
Chris@42 28 /* Generated by: ../../../genfft/gen_hc2cdft_c.native -fma -reorder-insns -schedule-for-pipeline -simd -compact -variables 4 -pipeline-latency 8 -trivial-stores -variables 32 -no-generate-bytw -n 12 -dif -sign 1 -name hc2cbdftv_12 -include hc2cbv.h */
Chris@42 29
Chris@42 30 /*
Chris@42 31 * This function contains 71 FP additions, 51 FP multiplications,
Chris@42 32 * (or, 45 additions, 25 multiplications, 26 fused multiply/add),
Chris@42 33 * 88 stack variables, 2 constants, and 24 memory accesses
Chris@42 34 */
Chris@42 35 #include "hc2cbv.h"
Chris@42 36
Chris@42 37 static void hc2cbdftv_12(R *Rp, R *Ip, R *Rm, R *Im, const R *W, stride rs, INT mb, INT me, INT ms)
Chris@42 38 {
Chris@42 39 DVK(KP866025403, +0.866025403784438646763723170752936183471402627);
Chris@42 40 DVK(KP500000000, +0.500000000000000000000000000000000000000000000);
Chris@42 41 {
Chris@42 42 INT m;
Chris@42 43 for (m = mb, W = W + ((mb - 1) * ((TWVL / VL) * 22)); m < me; m = m + VL, Rp = Rp + (VL * ms), Ip = Ip + (VL * ms), Rm = Rm - (VL * ms), Im = Im - (VL * ms), W = W + (TWVL * 22), MAKE_VOLATILE_STRIDE(48, rs)) {
Chris@42 44 V Tz, TT, T1, T1j, TN, TF, TP, TL, Tx, T15, TJ, T1b, T1g, T1l, T18;
Chris@42 45 V T12, TO, TC, TK, Tl, T16, TQ, TU, TG, T1c, TM, T1k, Ty, T19, T1a;
Chris@42 46 V T13, T14, T1h, T1i, TS, TR, T1m, T1n, TI, TH;
Chris@42 47 {
Chris@42 48 V T2, Tm, T7, Tp, T8, Tq, T9, Tu, T5, Tr, Tg, Tn, Tj, Ta, T3;
Chris@42 49 V T4, Te, Tf, Th, Ti, TV, T6, TW, Tk, TD, Tt, TB, T11, T1f, Tw;
Chris@42 50 V TE, TX, Tc, Ts, T10, TZ, To, Tb, Tv, T17, T1d, T1e, TY, TA, Td;
Chris@42 51 T2 = LD(&(Rp[0]), ms, &(Rp[0]));
Chris@42 52 Tm = LD(&(Rp[WS(rs, 3)]), ms, &(Rp[WS(rs, 1)]));
Chris@42 53 T7 = LD(&(Rm[WS(rs, 5)]), -ms, &(Rm[WS(rs, 1)]));
Chris@42 54 Tp = LD(&(Rm[WS(rs, 2)]), -ms, &(Rm[0]));
Chris@42 55 T3 = LD(&(Rp[WS(rs, 4)]), ms, &(Rp[0]));
Chris@42 56 T4 = LD(&(Rm[WS(rs, 3)]), -ms, &(Rm[WS(rs, 1)]));
Chris@42 57 Te = LD(&(Rp[WS(rs, 1)]), ms, &(Rp[WS(rs, 1)]));
Chris@42 58 Tf = LD(&(Rp[WS(rs, 5)]), ms, &(Rp[WS(rs, 1)]));
Chris@42 59 Th = LD(&(Rm[0]), -ms, &(Rm[0]));
Chris@42 60 Ti = LD(&(Rm[WS(rs, 4)]), -ms, &(Rm[0]));
Chris@42 61 T8 = VCONJ(T7);
Chris@42 62 Tq = VCONJ(Tp);
Chris@42 63 T9 = LD(&(Rp[WS(rs, 2)]), ms, &(Rp[0]));
Chris@42 64 Tu = VFNMSCONJ(T4, T3);
Chris@42 65 T5 = VFMACONJ(T4, T3);
Chris@42 66 Tr = VADD(Te, Tf);
Chris@42 67 Tg = VSUB(Te, Tf);
Chris@42 68 Tn = VADD(Ti, Th);
Chris@42 69 Tj = VSUB(Th, Ti);
Chris@42 70 Ta = LD(&(Rm[WS(rs, 1)]), -ms, &(Rm[WS(rs, 1)]));
Chris@42 71 TV = LDW(&(W[TWVL * 4]));
Chris@42 72 Tz = LDW(&(W[TWVL * 18]));
Chris@42 73 T6 = VFNMS(LDK(KP500000000), T5, T2);
Chris@42 74 TW = VADD(T2, T5);
Chris@42 75 Ts = VFNMS(LDK(KP500000000), Tr, Tq);
Chris@42 76 T10 = VFMACONJ(Tp, Tr);
Chris@42 77 TZ = VFMACONJ(Tn, Tm);
Chris@42 78 To = VFNMS(LDK(KP500000000), VCONJ(Tn), Tm);
Chris@42 79 Tk = VFMACONJ(Tj, Tg);
Chris@42 80 TD = VFNMSCONJ(Tj, Tg);
Chris@42 81 Tb = VFMACONJ(Ta, T9);
Chris@42 82 Tv = VFMSCONJ(Ta, T9);
Chris@42 83 TT = LDW(&(W[TWVL * 2]));
Chris@42 84 T1 = LDW(&(W[TWVL * 20]));
Chris@42 85 Tt = VSUB(To, Ts);
Chris@42 86 TB = VADD(To, Ts);
Chris@42 87 T11 = VSUB(TZ, T10);
Chris@42 88 T1f = VADD(TZ, T10);
Chris@42 89 Tw = VSUB(Tu, Tv);
Chris@42 90 TE = VADD(Tu, Tv);
Chris@42 91 TX = VFMACONJ(T7, Tb);
Chris@42 92 Tc = VFNMS(LDK(KP500000000), Tb, T8);
Chris@42 93 T1j = LDW(&(W[0]));
Chris@42 94 T17 = LDW(&(W[TWVL * 16]));
Chris@42 95 T1d = LDW(&(W[TWVL * 10]));
Chris@42 96 TN = LDW(&(W[TWVL * 6]));
Chris@42 97 TF = VMUL(LDK(KP866025403), VSUB(TD, TE));
Chris@42 98 TP = VMUL(LDK(KP866025403), VADD(TE, TD));
Chris@42 99 TL = VFNMS(LDK(KP866025403), Tw, Tt);
Chris@42 100 Tx = VFMA(LDK(KP866025403), Tw, Tt);
Chris@42 101 T1e = VADD(TW, TX);
Chris@42 102 TY = VSUB(TW, TX);
Chris@42 103 TA = VADD(T6, Tc);
Chris@42 104 Td = VSUB(T6, Tc);
Chris@42 105 T15 = LDW(&(W[TWVL * 14]));
Chris@42 106 TJ = LDW(&(W[TWVL * 8]));
Chris@42 107 T1b = LDW(&(W[TWVL * 12]));
Chris@42 108 T1g = VZMUL(T1d, VSUB(T1e, T1f));
Chris@42 109 T1l = VADD(T1e, T1f);
Chris@42 110 T18 = VZMULI(T17, VFMAI(T11, TY));
Chris@42 111 T12 = VZMULI(TV, VFNMSI(T11, TY));
Chris@42 112 TO = VADD(TA, TB);
Chris@42 113 TC = VSUB(TA, TB);
Chris@42 114 TK = VFNMS(LDK(KP866025403), Tk, Td);
Chris@42 115 Tl = VFMA(LDK(KP866025403), Tk, Td);
Chris@42 116 }
Chris@42 117 T16 = VZMUL(T15, VFNMSI(TP, TO));
Chris@42 118 TQ = VZMUL(TN, VFMAI(TP, TO));
Chris@42 119 TU = VZMUL(TT, VFMAI(TF, TC));
Chris@42 120 TG = VZMUL(Tz, VFNMSI(TF, TC));
Chris@42 121 T1c = VZMULI(T1b, VFNMSI(TL, TK));
Chris@42 122 TM = VZMULI(TJ, VFMAI(TL, TK));
Chris@42 123 T1k = VZMULI(T1j, VFMAI(Tx, Tl));
Chris@42 124 Ty = VZMULI(T1, VFNMSI(Tx, Tl));
Chris@42 125 T19 = VCONJ(VSUB(T16, T18));
Chris@42 126 T1a = VADD(T16, T18);
Chris@42 127 T13 = VCONJ(VSUB(TU, T12));
Chris@42 128 T14 = VADD(TU, T12);
Chris@42 129 T1h = VADD(T1c, T1g);
Chris@42 130 T1i = VCONJ(VSUB(T1g, T1c));
Chris@42 131 TS = VCONJ(VSUB(TQ, TM));
Chris@42 132 TR = VADD(TM, TQ);
Chris@42 133 T1m = VADD(T1k, T1l);
Chris@42 134 T1n = VCONJ(VSUB(T1l, T1k));
Chris@42 135 TI = VCONJ(VSUB(TG, Ty));
Chris@42 136 TH = VADD(Ty, TG);
Chris@42 137 ST(&(Rm[WS(rs, 4)]), T19, -ms, &(Rm[0]));
Chris@42 138 ST(&(Rp[WS(rs, 4)]), T1a, ms, &(Rp[0]));
Chris@42 139 ST(&(Rm[WS(rs, 1)]), T13, -ms, &(Rm[WS(rs, 1)]));
Chris@42 140 ST(&(Rp[WS(rs, 1)]), T14, ms, &(Rp[WS(rs, 1)]));
Chris@42 141 ST(&(Rp[WS(rs, 3)]), T1h, ms, &(Rp[WS(rs, 1)]));
Chris@42 142 ST(&(Rm[WS(rs, 3)]), T1i, -ms, &(Rm[WS(rs, 1)]));
Chris@42 143 ST(&(Rm[WS(rs, 2)]), TS, -ms, &(Rm[0]));
Chris@42 144 ST(&(Rp[WS(rs, 2)]), TR, ms, &(Rp[0]));
Chris@42 145 ST(&(Rp[0]), T1m, ms, &(Rp[0]));
Chris@42 146 ST(&(Rm[0]), T1n, -ms, &(Rm[0]));
Chris@42 147 ST(&(Rm[WS(rs, 5)]), TI, -ms, &(Rm[WS(rs, 1)]));
Chris@42 148 ST(&(Rp[WS(rs, 5)]), TH, ms, &(Rp[WS(rs, 1)]));
Chris@42 149 }
Chris@42 150 }
Chris@42 151 VLEAVE();
Chris@42 152 }
Chris@42 153
Chris@42 154 static const tw_instr twinstr[] = {
Chris@42 155 VTW(1, 1),
Chris@42 156 VTW(1, 2),
Chris@42 157 VTW(1, 3),
Chris@42 158 VTW(1, 4),
Chris@42 159 VTW(1, 5),
Chris@42 160 VTW(1, 6),
Chris@42 161 VTW(1, 7),
Chris@42 162 VTW(1, 8),
Chris@42 163 VTW(1, 9),
Chris@42 164 VTW(1, 10),
Chris@42 165 VTW(1, 11),
Chris@42 166 {TW_NEXT, VL, 0}
Chris@42 167 };
Chris@42 168
Chris@42 169 static const hc2c_desc desc = { 12, XSIMD_STRING("hc2cbdftv_12"), twinstr, &GENUS, {45, 25, 26, 0} };
Chris@42 170
Chris@42 171 void XSIMD(codelet_hc2cbdftv_12) (planner *p) {
Chris@42 172 X(khc2c_register) (p, hc2cbdftv_12, &desc, HC2C_VIA_DFT);
Chris@42 173 }
Chris@42 174 #else /* HAVE_FMA */
Chris@42 175
Chris@42 176 /* Generated by: ../../../genfft/gen_hc2cdft_c.native -simd -compact -variables 4 -pipeline-latency 8 -trivial-stores -variables 32 -no-generate-bytw -n 12 -dif -sign 1 -name hc2cbdftv_12 -include hc2cbv.h */
Chris@42 177
Chris@42 178 /*
Chris@42 179 * This function contains 71 FP additions, 30 FP multiplications,
Chris@42 180 * (or, 67 additions, 26 multiplications, 4 fused multiply/add),
Chris@42 181 * 90 stack variables, 2 constants, and 24 memory accesses
Chris@42 182 */
Chris@42 183 #include "hc2cbv.h"
Chris@42 184
Chris@42 185 static void hc2cbdftv_12(R *Rp, R *Ip, R *Rm, R *Im, const R *W, stride rs, INT mb, INT me, INT ms)
Chris@42 186 {
Chris@42 187 DVK(KP866025403, +0.866025403784438646763723170752936183471402627);
Chris@42 188 DVK(KP500000000, +0.500000000000000000000000000000000000000000000);
Chris@42 189 {
Chris@42 190 INT m;
Chris@42 191 for (m = mb, W = W + ((mb - 1) * ((TWVL / VL) * 22)); m < me; m = m + VL, Rp = Rp + (VL * ms), Ip = Ip + (VL * ms), Rm = Rm - (VL * ms), Im = Im - (VL * ms), W = W + (TWVL * 22), MAKE_VOLATILE_STRIDE(48, rs)) {
Chris@42 192 V TY, TZ, Tf, TC, Tq, TG, Tm, TF, Ty, TD, T13, T1h, T2, T9, T3;
Chris@42 193 V T5, T6, Tc, Tb, Td, T8, T4, Ta, T7, Te, To, Tp, Tr, Tv, Ti;
Chris@42 194 V Ts, Tl, Tw, Tu, Tg, Th, Tj, Tk, Tt, Tx, T11, T12;
Chris@42 195 T2 = LD(&(Rp[0]), ms, &(Rp[0]));
Chris@42 196 T8 = LD(&(Rm[WS(rs, 5)]), -ms, &(Rm[WS(rs, 1)]));
Chris@42 197 T9 = VCONJ(T8);
Chris@42 198 T3 = LD(&(Rp[WS(rs, 4)]), ms, &(Rp[0]));
Chris@42 199 T4 = LD(&(Rm[WS(rs, 3)]), -ms, &(Rm[WS(rs, 1)]));
Chris@42 200 T5 = VCONJ(T4);
Chris@42 201 T6 = VADD(T3, T5);
Chris@42 202 Tc = LD(&(Rp[WS(rs, 2)]), ms, &(Rp[0]));
Chris@42 203 Ta = LD(&(Rm[WS(rs, 1)]), -ms, &(Rm[WS(rs, 1)]));
Chris@42 204 Tb = VCONJ(Ta);
Chris@42 205 Td = VADD(Tb, Tc);
Chris@42 206 TY = VADD(T2, T6);
Chris@42 207 TZ = VADD(T9, Td);
Chris@42 208 T7 = VFNMS(LDK(KP500000000), T6, T2);
Chris@42 209 Te = VFNMS(LDK(KP500000000), Td, T9);
Chris@42 210 Tf = VSUB(T7, Te);
Chris@42 211 TC = VADD(T7, Te);
Chris@42 212 To = VSUB(T3, T5);
Chris@42 213 Tp = VSUB(Tb, Tc);
Chris@42 214 Tq = VMUL(LDK(KP866025403), VSUB(To, Tp));
Chris@42 215 TG = VADD(To, Tp);
Chris@42 216 Tr = LD(&(Rp[WS(rs, 3)]), ms, &(Rp[WS(rs, 1)]));
Chris@42 217 Tu = LD(&(Rm[WS(rs, 2)]), -ms, &(Rm[0]));
Chris@42 218 Tv = VCONJ(Tu);
Chris@42 219 Tg = LD(&(Rm[WS(rs, 4)]), -ms, &(Rm[0]));
Chris@42 220 Th = LD(&(Rm[0]), -ms, &(Rm[0]));
Chris@42 221 Ti = VCONJ(VSUB(Tg, Th));
Chris@42 222 Ts = VCONJ(VADD(Tg, Th));
Chris@42 223 Tj = LD(&(Rp[WS(rs, 1)]), ms, &(Rp[WS(rs, 1)]));
Chris@42 224 Tk = LD(&(Rp[WS(rs, 5)]), ms, &(Rp[WS(rs, 1)]));
Chris@42 225 Tl = VSUB(Tj, Tk);
Chris@42 226 Tw = VADD(Tj, Tk);
Chris@42 227 Tm = VMUL(LDK(KP866025403), VSUB(Ti, Tl));
Chris@42 228 TF = VADD(Ti, Tl);
Chris@42 229 Tt = VFNMS(LDK(KP500000000), Ts, Tr);
Chris@42 230 Tx = VFNMS(LDK(KP500000000), Tw, Tv);
Chris@42 231 Ty = VSUB(Tt, Tx);
Chris@42 232 TD = VADD(Tt, Tx);
Chris@42 233 T11 = VADD(Tr, Ts);
Chris@42 234 T12 = VADD(Tv, Tw);
Chris@42 235 T13 = VBYI(VSUB(T11, T12));
Chris@42 236 T1h = VADD(T11, T12);
Chris@42 237 {
Chris@42 238 V T1n, T1i, T14, T1a, TA, T1m, TS, T18, TO, T1e, TI, TW, T1g, T1f, T10;
Chris@42 239 V TX, T19, Tn, Tz, T1, T1l, TQ, TR, TP, T17, TM, TN, TL, T1d, TE;
Chris@42 240 V TH, TB, TV, TJ, T1p, T1k, TT, T1o, TK, TU, T1j, T1b, T16, T1c, T15;
Chris@42 241 T1g = VADD(TY, TZ);
Chris@42 242 T1n = VADD(T1g, T1h);
Chris@42 243 T1f = LDW(&(W[TWVL * 10]));
Chris@42 244 T1i = VZMUL(T1f, VSUB(T1g, T1h));
Chris@42 245 T10 = VSUB(TY, TZ);
Chris@42 246 TX = LDW(&(W[TWVL * 4]));
Chris@42 247 T14 = VZMULI(TX, VSUB(T10, T13));
Chris@42 248 T19 = LDW(&(W[TWVL * 16]));
Chris@42 249 T1a = VZMULI(T19, VADD(T10, T13));
Chris@42 250 Tn = VSUB(Tf, Tm);
Chris@42 251 Tz = VBYI(VADD(Tq, Ty));
Chris@42 252 T1 = LDW(&(W[TWVL * 20]));
Chris@42 253 TA = VZMULI(T1, VSUB(Tn, Tz));
Chris@42 254 T1l = LDW(&(W[0]));
Chris@42 255 T1m = VZMULI(T1l, VADD(Tn, Tz));
Chris@42 256 TQ = VBYI(VMUL(LDK(KP866025403), VADD(TG, TF)));
Chris@42 257 TR = VADD(TC, TD);
Chris@42 258 TP = LDW(&(W[TWVL * 6]));
Chris@42 259 TS = VZMUL(TP, VADD(TQ, TR));
Chris@42 260 T17 = LDW(&(W[TWVL * 14]));
Chris@42 261 T18 = VZMUL(T17, VSUB(TR, TQ));
Chris@42 262 TM = VADD(Tf, Tm);
Chris@42 263 TN = VBYI(VSUB(Ty, Tq));
Chris@42 264 TL = LDW(&(W[TWVL * 8]));
Chris@42 265 TO = VZMULI(TL, VADD(TM, TN));
Chris@42 266 T1d = LDW(&(W[TWVL * 12]));
Chris@42 267 T1e = VZMULI(T1d, VSUB(TM, TN));
Chris@42 268 TE = VSUB(TC, TD);
Chris@42 269 TH = VBYI(VMUL(LDK(KP866025403), VSUB(TF, TG)));
Chris@42 270 TB = LDW(&(W[TWVL * 18]));
Chris@42 271 TI = VZMUL(TB, VSUB(TE, TH));
Chris@42 272 TV = LDW(&(W[TWVL * 2]));
Chris@42 273 TW = VZMUL(TV, VADD(TH, TE));
Chris@42 274 TJ = VADD(TA, TI);
Chris@42 275 ST(&(Rp[WS(rs, 5)]), TJ, ms, &(Rp[WS(rs, 1)]));
Chris@42 276 T1p = VCONJ(VSUB(T1n, T1m));
Chris@42 277 ST(&(Rm[0]), T1p, -ms, &(Rm[0]));
Chris@42 278 T1k = VCONJ(VSUB(T1i, T1e));
Chris@42 279 ST(&(Rm[WS(rs, 3)]), T1k, -ms, &(Rm[WS(rs, 1)]));
Chris@42 280 TT = VADD(TO, TS);
Chris@42 281 ST(&(Rp[WS(rs, 2)]), TT, ms, &(Rp[0]));
Chris@42 282 T1o = VADD(T1m, T1n);
Chris@42 283 ST(&(Rp[0]), T1o, ms, &(Rp[0]));
Chris@42 284 TK = VCONJ(VSUB(TI, TA));
Chris@42 285 ST(&(Rm[WS(rs, 5)]), TK, -ms, &(Rm[WS(rs, 1)]));
Chris@42 286 TU = VCONJ(VSUB(TS, TO));
Chris@42 287 ST(&(Rm[WS(rs, 2)]), TU, -ms, &(Rm[0]));
Chris@42 288 T1j = VADD(T1e, T1i);
Chris@42 289 ST(&(Rp[WS(rs, 3)]), T1j, ms, &(Rp[WS(rs, 1)]));
Chris@42 290 T1b = VCONJ(VSUB(T18, T1a));
Chris@42 291 ST(&(Rm[WS(rs, 4)]), T1b, -ms, &(Rm[0]));
Chris@42 292 T16 = VADD(TW, T14);
Chris@42 293 ST(&(Rp[WS(rs, 1)]), T16, ms, &(Rp[WS(rs, 1)]));
Chris@42 294 T1c = VADD(T18, T1a);
Chris@42 295 ST(&(Rp[WS(rs, 4)]), T1c, ms, &(Rp[0]));
Chris@42 296 T15 = VCONJ(VSUB(TW, T14));
Chris@42 297 ST(&(Rm[WS(rs, 1)]), T15, -ms, &(Rm[WS(rs, 1)]));
Chris@42 298 }
Chris@42 299 }
Chris@42 300 }
Chris@42 301 VLEAVE();
Chris@42 302 }
Chris@42 303
Chris@42 304 static const tw_instr twinstr[] = {
Chris@42 305 VTW(1, 1),
Chris@42 306 VTW(1, 2),
Chris@42 307 VTW(1, 3),
Chris@42 308 VTW(1, 4),
Chris@42 309 VTW(1, 5),
Chris@42 310 VTW(1, 6),
Chris@42 311 VTW(1, 7),
Chris@42 312 VTW(1, 8),
Chris@42 313 VTW(1, 9),
Chris@42 314 VTW(1, 10),
Chris@42 315 VTW(1, 11),
Chris@42 316 {TW_NEXT, VL, 0}
Chris@42 317 };
Chris@42 318
Chris@42 319 static const hc2c_desc desc = { 12, XSIMD_STRING("hc2cbdftv_12"), twinstr, &GENUS, {67, 26, 4, 0} };
Chris@42 320
Chris@42 321 void XSIMD(codelet_hc2cbdftv_12) (planner *p) {
Chris@42 322 X(khc2c_register) (p, hc2cbdftv_12, &desc, HC2C_VIA_DFT);
Chris@42 323 }
Chris@42 324 #endif /* HAVE_FMA */