Mercurial > hg > sv-dependency-builds
comparison src/fftw-3.3.8/rdft/simd/common/hc2cbdftv_4.c @ 167:bd3cc4d1df30
Add FFTW 3.3.8 source, and a Linux build
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Tue, 19 Nov 2019 14:52:55 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
166:cbd6d7e562c7 | 167:bd3cc4d1df30 |
---|---|
1 /* | |
2 * Copyright (c) 2003, 2007-14 Matteo Frigo | |
3 * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology | |
4 * | |
5 * This program is free software; you can redistribute it and/or modify | |
6 * it under the terms of the GNU General Public License as published by | |
7 * the Free Software Foundation; either version 2 of the License, or | |
8 * (at your option) any later version. | |
9 * | |
10 * This program is distributed in the hope that it will be useful, | |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 * GNU General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU General Public License | |
16 * along with this program; if not, write to the Free Software | |
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
18 * | |
19 */ | |
20 | |
21 /* This file was automatically generated --- DO NOT EDIT */ | |
22 /* Generated on Thu May 24 08:08:11 EDT 2018 */ | |
23 | |
24 #include "rdft/codelet-rdft.h" | |
25 | |
26 #if defined(ARCH_PREFERS_FMA) || defined(ISA_EXTENSION_PREFERS_FMA) | |
27 | |
28 /* Generated by: ../../../genfft/gen_hc2cdft_c.native -fma -simd -compact -variables 4 -pipeline-latency 8 -trivial-stores -variables 32 -no-generate-bytw -n 4 -dif -sign 1 -name hc2cbdftv_4 -include rdft/simd/hc2cbv.h */ | |
29 | |
30 /* | |
31 * This function contains 15 FP additions, 12 FP multiplications, | |
32 * (or, 9 additions, 6 multiplications, 6 fused multiply/add), | |
33 * 20 stack variables, 0 constants, and 8 memory accesses | |
34 */ | |
35 #include "rdft/simd/hc2cbv.h" | |
36 | |
37 static void hc2cbdftv_4(R *Rp, R *Ip, R *Rm, R *Im, const R *W, stride rs, INT mb, INT me, INT ms) | |
38 { | |
39 { | |
40 INT m; | |
41 for (m = mb, W = W + ((mb - 1) * ((TWVL / VL) * 6)); m < me; m = m + VL, Rp = Rp + (VL * ms), Ip = Ip + (VL * ms), Rm = Rm - (VL * ms), Im = Im - (VL * ms), W = W + (TWVL * 6), MAKE_VOLATILE_STRIDE(16, rs)) { | |
42 V Th, Tg, T8, Tc, T4, Ta, T7, Tb, T2, T3, T5, T6, Tf, T1, T9; | |
43 V Td, Tj, Te, Ti; | |
44 T2 = LD(&(Rp[0]), ms, &(Rp[0])); | |
45 T3 = LD(&(Rm[WS(rs, 1)]), -ms, &(Rm[WS(rs, 1)])); | |
46 T4 = VFNMSCONJ(T3, T2); | |
47 Ta = VFMACONJ(T3, T2); | |
48 T5 = LD(&(Rp[WS(rs, 1)]), ms, &(Rp[WS(rs, 1)])); | |
49 T6 = LD(&(Rm[0]), -ms, &(Rm[0])); | |
50 T7 = VFNMSCONJ(T6, T5); | |
51 Tb = VFMACONJ(T6, T5); | |
52 Th = VADD(Ta, Tb); | |
53 Tf = LDW(&(W[0])); | |
54 Tg = VZMULI(Tf, VFMAI(T7, T4)); | |
55 T1 = LDW(&(W[TWVL * 4])); | |
56 T8 = VZMULI(T1, VFNMSI(T7, T4)); | |
57 T9 = LDW(&(W[TWVL * 2])); | |
58 Tc = VZMUL(T9, VSUB(Ta, Tb)); | |
59 Td = VADD(T8, Tc); | |
60 ST(&(Rp[WS(rs, 1)]), Td, ms, &(Rp[WS(rs, 1)])); | |
61 Tj = VCONJ(VSUB(Th, Tg)); | |
62 ST(&(Rm[0]), Tj, -ms, &(Rm[0])); | |
63 Te = VCONJ(VSUB(Tc, T8)); | |
64 ST(&(Rm[WS(rs, 1)]), Te, -ms, &(Rm[WS(rs, 1)])); | |
65 Ti = VADD(Tg, Th); | |
66 ST(&(Rp[0]), Ti, ms, &(Rp[0])); | |
67 } | |
68 } | |
69 VLEAVE(); | |
70 } | |
71 | |
72 static const tw_instr twinstr[] = { | |
73 VTW(1, 1), | |
74 VTW(1, 2), | |
75 VTW(1, 3), | |
76 {TW_NEXT, VL, 0} | |
77 }; | |
78 | |
79 static const hc2c_desc desc = { 4, XSIMD_STRING("hc2cbdftv_4"), twinstr, &GENUS, {9, 6, 6, 0} }; | |
80 | |
81 void XSIMD(codelet_hc2cbdftv_4) (planner *p) { | |
82 X(khc2c_register) (p, hc2cbdftv_4, &desc, HC2C_VIA_DFT); | |
83 } | |
84 #else | |
85 | |
86 /* Generated by: ../../../genfft/gen_hc2cdft_c.native -simd -compact -variables 4 -pipeline-latency 8 -trivial-stores -variables 32 -no-generate-bytw -n 4 -dif -sign 1 -name hc2cbdftv_4 -include rdft/simd/hc2cbv.h */ | |
87 | |
88 /* | |
89 * This function contains 15 FP additions, 6 FP multiplications, | |
90 * (or, 15 additions, 6 multiplications, 0 fused multiply/add), | |
91 * 22 stack variables, 0 constants, and 8 memory accesses | |
92 */ | |
93 #include "rdft/simd/hc2cbv.h" | |
94 | |
95 static void hc2cbdftv_4(R *Rp, R *Ip, R *Rm, R *Im, const R *W, stride rs, INT mb, INT me, INT ms) | |
96 { | |
97 { | |
98 INT m; | |
99 for (m = mb, W = W + ((mb - 1) * ((TWVL / VL) * 6)); m < me; m = m + VL, Rp = Rp + (VL * ms), Ip = Ip + (VL * ms), Rm = Rm - (VL * ms), Im = Im - (VL * ms), W = W + (TWVL * 6), MAKE_VOLATILE_STRIDE(16, rs)) { | |
100 V T5, Tc, T9, Td, T2, T4, T3, T6, T8, T7, Tj, Ti, Th, Tk, Tl; | |
101 V Ta, Te, T1, Tb, Tf, Tg; | |
102 T2 = LD(&(Rp[0]), ms, &(Rp[0])); | |
103 T3 = LD(&(Rm[WS(rs, 1)]), -ms, &(Rm[WS(rs, 1)])); | |
104 T4 = VCONJ(T3); | |
105 T5 = VSUB(T2, T4); | |
106 Tc = VADD(T2, T4); | |
107 T6 = LD(&(Rp[WS(rs, 1)]), ms, &(Rp[WS(rs, 1)])); | |
108 T7 = LD(&(Rm[0]), -ms, &(Rm[0])); | |
109 T8 = VCONJ(T7); | |
110 T9 = VBYI(VSUB(T6, T8)); | |
111 Td = VADD(T6, T8); | |
112 Tj = VADD(Tc, Td); | |
113 Th = LDW(&(W[0])); | |
114 Ti = VZMULI(Th, VADD(T5, T9)); | |
115 Tk = VADD(Ti, Tj); | |
116 ST(&(Rp[0]), Tk, ms, &(Rp[0])); | |
117 Tl = VCONJ(VSUB(Tj, Ti)); | |
118 ST(&(Rm[0]), Tl, -ms, &(Rm[0])); | |
119 T1 = LDW(&(W[TWVL * 4])); | |
120 Ta = VZMULI(T1, VSUB(T5, T9)); | |
121 Tb = LDW(&(W[TWVL * 2])); | |
122 Te = VZMUL(Tb, VSUB(Tc, Td)); | |
123 Tf = VADD(Ta, Te); | |
124 ST(&(Rp[WS(rs, 1)]), Tf, ms, &(Rp[WS(rs, 1)])); | |
125 Tg = VCONJ(VSUB(Te, Ta)); | |
126 ST(&(Rm[WS(rs, 1)]), Tg, -ms, &(Rm[WS(rs, 1)])); | |
127 } | |
128 } | |
129 VLEAVE(); | |
130 } | |
131 | |
132 static const tw_instr twinstr[] = { | |
133 VTW(1, 1), | |
134 VTW(1, 2), | |
135 VTW(1, 3), | |
136 {TW_NEXT, VL, 0} | |
137 }; | |
138 | |
139 static const hc2c_desc desc = { 4, XSIMD_STRING("hc2cbdftv_4"), twinstr, &GENUS, {15, 6, 0, 0} }; | |
140 | |
141 void XSIMD(codelet_hc2cbdftv_4) (planner *p) { | |
142 X(khc2c_register) (p, hc2cbdftv_4, &desc, HC2C_VIA_DFT); | |
143 } | |
144 #endif |