| Chris@10 | 1 /* | 
| Chris@10 | 2  * Copyright (c) 2003, 2007-11 Matteo Frigo | 
| Chris@10 | 3  * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology | 
| Chris@10 | 4  * | 
| Chris@10 | 5  * This program is free software; you can redistribute it and/or modify | 
| Chris@10 | 6  * it under the terms of the GNU General Public License as published by | 
| Chris@10 | 7  * the Free Software Foundation; either version 2 of the License, or | 
| Chris@10 | 8  * (at your option) any later version. | 
| Chris@10 | 9  * | 
| Chris@10 | 10  * This program is distributed in the hope that it will be useful, | 
| Chris@10 | 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| Chris@10 | 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| Chris@10 | 13  * GNU General Public License for more details. | 
| Chris@10 | 14  * | 
| Chris@10 | 15  * You should have received a copy of the GNU General Public License | 
| Chris@10 | 16  * along with this program; if not, write to the Free Software | 
| Chris@10 | 17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | 
| Chris@10 | 18  * | 
| Chris@10 | 19  */ | 
| Chris@10 | 20 | 
| Chris@10 | 21 /* This file was automatically generated --- DO NOT EDIT */ | 
| Chris@10 | 22 /* Generated on Sun Nov 25 07:39:45 EST 2012 */ | 
| Chris@10 | 23 | 
| Chris@10 | 24 #include "codelet-rdft.h" | 
| Chris@10 | 25 | 
| Chris@10 | 26 #ifdef HAVE_FMA | 
| Chris@10 | 27 | 
| Chris@10 | 28 /* Generated by: ../../../genfft/gen_r2cf.native -fma -reorder-insns -schedule-for-pipeline -compact -variables 4 -pipeline-latency 4 -n 3 -name r2cf_3 -include r2cf.h */ | 
| Chris@10 | 29 | 
| Chris@10 | 30 /* | 
| Chris@10 | 31  * This function contains 4 FP additions, 2 FP multiplications, | 
| Chris@10 | 32  * (or, 3 additions, 1 multiplications, 1 fused multiply/add), | 
| Chris@10 | 33  * 7 stack variables, 2 constants, and 6 memory accesses | 
| Chris@10 | 34  */ | 
| Chris@10 | 35 #include "r2cf.h" | 
| Chris@10 | 36 | 
| Chris@10 | 37 static void r2cf_3(R *R0, R *R1, R *Cr, R *Ci, stride rs, stride csr, stride csi, INT v, INT ivs, INT ovs) | 
| Chris@10 | 38 { | 
| Chris@10 | 39      DK(KP500000000, +0.500000000000000000000000000000000000000000000); | 
| Chris@10 | 40      DK(KP866025403, +0.866025403784438646763723170752936183471402627); | 
| Chris@10 | 41      { | 
| Chris@10 | 42 	  INT i; | 
| Chris@10 | 43 	  for (i = v; i > 0; i = i - 1, R0 = R0 + ivs, R1 = R1 + ivs, Cr = Cr + ovs, Ci = Ci + ovs, MAKE_VOLATILE_STRIDE(12, rs), MAKE_VOLATILE_STRIDE(12, csr), MAKE_VOLATILE_STRIDE(12, csi)) { | 
| Chris@10 | 44 	       E T1, T2, T3, T4; | 
| Chris@10 | 45 	       T1 = R0[0]; | 
| Chris@10 | 46 	       T2 = R1[0]; | 
| Chris@10 | 47 	       T3 = R0[WS(rs, 1)]; | 
| Chris@10 | 48 	       Ci[WS(csi, 1)] = KP866025403 * (T3 - T2); | 
| Chris@10 | 49 	       T4 = T2 + T3; | 
| Chris@10 | 50 	       Cr[0] = T1 + T4; | 
| Chris@10 | 51 	       Cr[WS(csr, 1)] = FNMS(KP500000000, T4, T1); | 
| Chris@10 | 52 	  } | 
| Chris@10 | 53      } | 
| Chris@10 | 54 } | 
| Chris@10 | 55 | 
| Chris@10 | 56 static const kr2c_desc desc = { 3, "r2cf_3", {3, 1, 1, 0}, &GENUS }; | 
| Chris@10 | 57 | 
| Chris@10 | 58 void X(codelet_r2cf_3) (planner *p) { | 
| Chris@10 | 59      X(kr2c_register) (p, r2cf_3, &desc); | 
| Chris@10 | 60 } | 
| Chris@10 | 61 | 
| Chris@10 | 62 #else				/* HAVE_FMA */ | 
| Chris@10 | 63 | 
| Chris@10 | 64 /* Generated by: ../../../genfft/gen_r2cf.native -compact -variables 4 -pipeline-latency 4 -n 3 -name r2cf_3 -include r2cf.h */ | 
| Chris@10 | 65 | 
| Chris@10 | 66 /* | 
| Chris@10 | 67  * This function contains 4 FP additions, 2 FP multiplications, | 
| Chris@10 | 68  * (or, 3 additions, 1 multiplications, 1 fused multiply/add), | 
| Chris@10 | 69  * 7 stack variables, 2 constants, and 6 memory accesses | 
| Chris@10 | 70  */ | 
| Chris@10 | 71 #include "r2cf.h" | 
| Chris@10 | 72 | 
| Chris@10 | 73 static void r2cf_3(R *R0, R *R1, R *Cr, R *Ci, stride rs, stride csr, stride csi, INT v, INT ivs, INT ovs) | 
| Chris@10 | 74 { | 
| Chris@10 | 75      DK(KP866025403, +0.866025403784438646763723170752936183471402627); | 
| Chris@10 | 76      DK(KP500000000, +0.500000000000000000000000000000000000000000000); | 
| Chris@10 | 77      { | 
| Chris@10 | 78 	  INT i; | 
| Chris@10 | 79 	  for (i = v; i > 0; i = i - 1, R0 = R0 + ivs, R1 = R1 + ivs, Cr = Cr + ovs, Ci = Ci + ovs, MAKE_VOLATILE_STRIDE(12, rs), MAKE_VOLATILE_STRIDE(12, csr), MAKE_VOLATILE_STRIDE(12, csi)) { | 
| Chris@10 | 80 	       E T1, T2, T3, T4; | 
| Chris@10 | 81 	       T1 = R0[0]; | 
| Chris@10 | 82 	       T2 = R1[0]; | 
| Chris@10 | 83 	       T3 = R0[WS(rs, 1)]; | 
| Chris@10 | 84 	       T4 = T2 + T3; | 
| Chris@10 | 85 	       Cr[WS(csr, 1)] = FNMS(KP500000000, T4, T1); | 
| Chris@10 | 86 	       Ci[WS(csi, 1)] = KP866025403 * (T3 - T2); | 
| Chris@10 | 87 	       Cr[0] = T1 + T4; | 
| Chris@10 | 88 	  } | 
| Chris@10 | 89      } | 
| Chris@10 | 90 } | 
| Chris@10 | 91 | 
| Chris@10 | 92 static const kr2c_desc desc = { 3, "r2cf_3", {3, 1, 1, 0}, &GENUS }; | 
| Chris@10 | 93 | 
| Chris@10 | 94 void X(codelet_r2cf_3) (planner *p) { | 
| Chris@10 | 95      X(kr2c_register) (p, r2cf_3, &desc); | 
| Chris@10 | 96 } | 
| Chris@10 | 97 | 
| Chris@10 | 98 #endif				/* HAVE_FMA */ |