Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / lib / filter / gr_fir_sysconfig_x86.cc @ 95ccbf47

History | View | Annotate | Download (12.2 kB)

1 5d69a524 jcorgan
/* -*- c++ -*- */
2 5d69a524 jcorgan
/*
3 5d69a524 jcorgan
 * Copyright 2002 Free Software Foundation, Inc.
4 5d69a524 jcorgan
 * 
5 5d69a524 jcorgan
 * This file is part of GNU Radio
6 5d69a524 jcorgan
 * 
7 5d69a524 jcorgan
 * GNU Radio is free software; you can redistribute it and/or modify
8 5d69a524 jcorgan
 * it under the terms of the GNU General Public License as published by
9 937b719d eb
 * the Free Software Foundation; either version 3, or (at your option)
10 5d69a524 jcorgan
 * any later version.
11 5d69a524 jcorgan
 * 
12 5d69a524 jcorgan
 * GNU Radio is distributed in the hope that it will be useful,
13 5d69a524 jcorgan
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 5d69a524 jcorgan
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 5d69a524 jcorgan
 * GNU General Public License for more details.
16 5d69a524 jcorgan
 * 
17 5d69a524 jcorgan
 * You should have received a copy of the GNU General Public License
18 5d69a524 jcorgan
 * along with GNU Radio; see the file COPYING.  If not, write to
19 86f5c924 eb
 * the Free Software Foundation, Inc., 51 Franklin Street,
20 86f5c924 eb
 * Boston, MA 02110-1301, USA.
21 5d69a524 jcorgan
 */
22 5d69a524 jcorgan
#ifdef HAVE_CONFIG_H
23 5d69a524 jcorgan
#include <config.h>
24 5d69a524 jcorgan
#endif
25 5d69a524 jcorgan
#include <gr_fir_sysconfig_x86.h>
26 5d69a524 jcorgan
#include <gr_cpu.h>
27 5d69a524 jcorgan
28 5d69a524 jcorgan
#include <gr_fir_ccf.h>
29 5d69a524 jcorgan
#include <gr_fir_ccf_generic.h>
30 5d69a524 jcorgan
#include <gr_fir_ccf_x86.h>
31 5d69a524 jcorgan
#include <gr_fir_fcc.h>
32 5d69a524 jcorgan
#include <gr_fir_fcc_generic.h>
33 5d69a524 jcorgan
#include <gr_fir_fcc_x86.h>
34 5d69a524 jcorgan
#include <gr_fir_fff.h>
35 5d69a524 jcorgan
#include <gr_fir_fff_generic.h>
36 5d69a524 jcorgan
#include <gr_fir_fff_x86.h>
37 5d69a524 jcorgan
#include <gr_fir_fsf.h>
38 5d69a524 jcorgan
#include <gr_fir_fsf_generic.h>
39 5d69a524 jcorgan
#include <gr_fir_fsf_x86.h>
40 5d69a524 jcorgan
#include <gr_fir_ccc.h>
41 5d69a524 jcorgan
#include <gr_fir_ccc_generic.h>
42 5d69a524 jcorgan
#include <gr_fir_ccc_x86.h>
43 5d69a524 jcorgan
#include <gr_fir_scc.h>
44 5d69a524 jcorgan
#include <gr_fir_scc_generic.h>
45 5d69a524 jcorgan
#include <gr_fir_scc_x86.h>
46 5d69a524 jcorgan
// #include <gr_fir_sss.h>
47 5d69a524 jcorgan
// #include <gr_fir_sss_generic.h>
48 5d69a524 jcorgan
// #include <gr_fir_sss_mmx.h>
49 5d69a524 jcorgan
// #include <gr_fir_sss_sse2.h>
50 5d69a524 jcorgan
51 5d69a524 jcorgan
#include <iostream>
52 5d69a524 jcorgan
using std::cerr;
53 5d69a524 jcorgan
54 5d69a524 jcorgan
/*
55 5d69a524 jcorgan
 * ----------------------------------------------------------------
56 5d69a524 jcorgan
 * static functions that serve as constructors...
57 5d69a524 jcorgan
 * Is it possible to take the address of a normal constructor?
58 5d69a524 jcorgan
 * ----------------------------------------------------------------
59 5d69a524 jcorgan
 */
60 5d69a524 jcorgan
61 5d69a524 jcorgan
static gr_fir_ccf *
62 5d69a524 jcorgan
make_gr_fir_ccf_3dnow(const std::vector<float> &taps)
63 5d69a524 jcorgan
{
64 5d69a524 jcorgan
  return new gr_fir_ccf_3dnow(taps);
65 5d69a524 jcorgan
}
66 5d69a524 jcorgan
67 5d69a524 jcorgan
static gr_fir_ccf *
68 5d69a524 jcorgan
make_gr_fir_ccf_sse(const std::vector<float> &taps)
69 5d69a524 jcorgan
{
70 5d69a524 jcorgan
  return new gr_fir_ccf_sse(taps);
71 5d69a524 jcorgan
}
72 5d69a524 jcorgan
73 5d69a524 jcorgan
static gr_fir_fcc *
74 5d69a524 jcorgan
make_gr_fir_fcc_3dnow(const std::vector<gr_complex> &taps)
75 5d69a524 jcorgan
{
76 5d69a524 jcorgan
  return new gr_fir_fcc_3dnow(taps);
77 5d69a524 jcorgan
}
78 5d69a524 jcorgan
79 5d69a524 jcorgan
static gr_fir_fcc *
80 5d69a524 jcorgan
make_gr_fir_fcc_sse(const std::vector<gr_complex> &taps)
81 5d69a524 jcorgan
{
82 5d69a524 jcorgan
  return new gr_fir_fcc_sse(taps);
83 5d69a524 jcorgan
}
84 5d69a524 jcorgan
85 5d69a524 jcorgan
static gr_fir_ccc *
86 5d69a524 jcorgan
make_gr_fir_ccc_3dnow (const std::vector<gr_complex> &taps)
87 5d69a524 jcorgan
{
88 5d69a524 jcorgan
  return new gr_fir_ccc_3dnow (taps);
89 5d69a524 jcorgan
}
90 5d69a524 jcorgan
91 5d69a524 jcorgan
static gr_fir_ccc *
92 5d69a524 jcorgan
make_gr_fir_ccc_3dnowext (const std::vector<gr_complex> &taps)
93 5d69a524 jcorgan
{
94 5d69a524 jcorgan
  return new gr_fir_ccc_3dnowext (taps);
95 5d69a524 jcorgan
}
96 5d69a524 jcorgan
97 5d69a524 jcorgan
static gr_fir_ccc *
98 5d69a524 jcorgan
make_gr_fir_ccc_sse (const std::vector<gr_complex> &taps)
99 5d69a524 jcorgan
{
100 5d69a524 jcorgan
  return new gr_fir_ccc_sse (taps);
101 5d69a524 jcorgan
}
102 5d69a524 jcorgan
103 5d69a524 jcorgan
static gr_fir_fff *
104 5d69a524 jcorgan
make_gr_fir_fff_3dnow (const std::vector<float> &taps)
105 5d69a524 jcorgan
{
106 5d69a524 jcorgan
  return new gr_fir_fff_3dnow (taps);
107 5d69a524 jcorgan
}
108 5d69a524 jcorgan
109 5d69a524 jcorgan
static gr_fir_fff *
110 5d69a524 jcorgan
make_gr_fir_fff_sse (const std::vector<float> &taps)
111 5d69a524 jcorgan
{
112 5d69a524 jcorgan
  return new gr_fir_fff_sse (taps);
113 5d69a524 jcorgan
}
114 5d69a524 jcorgan
115 5d69a524 jcorgan
static gr_fir_fsf *
116 5d69a524 jcorgan
make_gr_fir_fsf_3dnow (const std::vector<float> &taps)
117 5d69a524 jcorgan
{
118 5d69a524 jcorgan
  return new gr_fir_fsf_3dnow (taps);
119 5d69a524 jcorgan
}
120 5d69a524 jcorgan
121 5d69a524 jcorgan
static gr_fir_fsf *
122 5d69a524 jcorgan
make_gr_fir_fsf_sse (const std::vector<float> &taps)
123 5d69a524 jcorgan
{
124 5d69a524 jcorgan
  return new gr_fir_fsf_sse (taps);
125 5d69a524 jcorgan
}
126 5d69a524 jcorgan
127 5d69a524 jcorgan
#if 0
128 5d69a524 jcorgan
static gr_fir_sss *
129 5d69a524 jcorgan
make_gr_fir_sss_mmx (const std::vector<short> &taps)
130 5d69a524 jcorgan
{
131 5d69a524 jcorgan
  return new gr_fir_sss_mmx (taps);
132 5d69a524 jcorgan
}
133 5d69a524 jcorgan
134 5d69a524 jcorgan
static gr_fir_sss *
135 5d69a524 jcorgan
make_gr_fir_sss_sse2 (const std::vector<short> &taps)
136 5d69a524 jcorgan
{
137 5d69a524 jcorgan
  return new gr_fir_sss_sse2 (taps);
138 5d69a524 jcorgan
}
139 5d69a524 jcorgan
#endif
140 5d69a524 jcorgan
141 5d69a524 jcorgan
static gr_fir_scc *
142 5d69a524 jcorgan
make_gr_fir_scc_3dnow(const std::vector<gr_complex> &taps)
143 5d69a524 jcorgan
{
144 5d69a524 jcorgan
  return new gr_fir_scc_3dnow(taps);
145 5d69a524 jcorgan
}
146 5d69a524 jcorgan
147 5d69a524 jcorgan
static gr_fir_scc *
148 5d69a524 jcorgan
make_gr_fir_scc_3dnowext(const std::vector<gr_complex> &taps)
149 5d69a524 jcorgan
{
150 5d69a524 jcorgan
  return new gr_fir_scc_3dnowext(taps);
151 5d69a524 jcorgan
}
152 5d69a524 jcorgan
153 5d69a524 jcorgan
static gr_fir_scc *
154 5d69a524 jcorgan
make_gr_fir_scc_sse(const std::vector<gr_complex> &taps)
155 5d69a524 jcorgan
{
156 5d69a524 jcorgan
  return new gr_fir_scc_sse(taps);
157 5d69a524 jcorgan
}
158 5d69a524 jcorgan
159 5d69a524 jcorgan
/*
160 5d69a524 jcorgan
 * ----------------------------------------------------------------
161 5d69a524 jcorgan
 * Return instances of the fastest x86 versions of these classes.
162 5d69a524 jcorgan
 *
163 5d69a524 jcorgan
 * check CPUID, if has 3DNowExt, return 3DNow!Ext version,
164 5d69a524 jcorgan
 *              else if 3DNow, return 3DNow! version,
165 5d69a524 jcorgan
 *              else if SSE2, return SSE2 version,
166 5d69a524 jcorgan
 *                else if SSE, return SSE version,
167 5d69a524 jcorgan
 *                else if MMX, return MMX version,
168 5d69a524 jcorgan
 *                else return generic version.
169 5d69a524 jcorgan
 *
170 5d69a524 jcorgan
 * FIXME: benchmark, store result, use stored result to
171 5d69a524 jcorgan
 *   select the fastest version.
172 5d69a524 jcorgan
 * ----------------------------------------------------------------
173 5d69a524 jcorgan
 */
174 5d69a524 jcorgan
175 5d69a524 jcorgan
gr_fir_ccf *
176 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_ccf (const std::vector<float> &taps)
177 5d69a524 jcorgan
{
178 5d69a524 jcorgan
  static bool first = true;
179 5d69a524 jcorgan
180 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
181 5d69a524 jcorgan
    if (first){
182 5d69a524 jcorgan
      cerr << ">>> gr_fir_ccf: using 3DNow!\n";
183 5d69a524 jcorgan
      first = false;
184 5d69a524 jcorgan
    }
185 5d69a524 jcorgan
    return make_gr_fir_ccf_3dnow (taps);
186 5d69a524 jcorgan
  }
187 5d69a524 jcorgan
188 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
189 5d69a524 jcorgan
    if (first){
190 5d69a524 jcorgan
      cerr << ">>> gr_fir_ccf: using SSE\n";
191 5d69a524 jcorgan
      first = false;
192 5d69a524 jcorgan
    }
193 5d69a524 jcorgan
    return make_gr_fir_ccf_sse (taps);
194 5d69a524 jcorgan
  }
195 5d69a524 jcorgan
196 5d69a524 jcorgan
  if (first){
197 5d69a524 jcorgan
    cerr << ">>> gr_fir_ccf: handing off to parent class\n";
198 5d69a524 jcorgan
    first = false;
199 5d69a524 jcorgan
  }
200 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_ccf (taps);
201 5d69a524 jcorgan
}
202 5d69a524 jcorgan
203 5d69a524 jcorgan
gr_fir_fcc *
204 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_fcc (const std::vector<gr_complex> &taps)
205 5d69a524 jcorgan
{
206 5d69a524 jcorgan
  static bool first = true;
207 5d69a524 jcorgan
208 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
209 5d69a524 jcorgan
    if (first){
210 5d69a524 jcorgan
      cerr << ">>> gr_fir_fcc: using 3DNow!\n";
211 5d69a524 jcorgan
      first = false;
212 5d69a524 jcorgan
    }
213 5d69a524 jcorgan
    return make_gr_fir_fcc_3dnow (taps);
214 5d69a524 jcorgan
  }
215 5d69a524 jcorgan
216 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
217 5d69a524 jcorgan
    if (first){
218 5d69a524 jcorgan
      cerr << ">>> gr_fir_fcc: using SSE\n";
219 5d69a524 jcorgan
      first = false;
220 5d69a524 jcorgan
    }
221 5d69a524 jcorgan
    return make_gr_fir_fcc_sse (taps);
222 5d69a524 jcorgan
  }
223 5d69a524 jcorgan
224 5d69a524 jcorgan
  if (first){
225 5d69a524 jcorgan
    cerr << ">>> gr_fir_fcc: handing off to parent class\n";
226 5d69a524 jcorgan
    first = false;
227 5d69a524 jcorgan
  }
228 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_fcc (taps);
229 5d69a524 jcorgan
}
230 5d69a524 jcorgan
231 5d69a524 jcorgan
gr_fir_ccc *
232 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_ccc (const std::vector<gr_complex> &taps)
233 5d69a524 jcorgan
{
234 5d69a524 jcorgan
  static bool first = true;
235 5d69a524 jcorgan
236 5d69a524 jcorgan
  if (gr_cpu::has_3dnowext ()){
237 5d69a524 jcorgan
    if (first) {
238 5d69a524 jcorgan
      cerr << ">>> gr_fir_ccc: using 3DNow!Ext\n";
239 5d69a524 jcorgan
      first = false;
240 5d69a524 jcorgan
    }
241 5d69a524 jcorgan
    return make_gr_fir_ccc_3dnowext (taps);
242 5d69a524 jcorgan
  }
243 5d69a524 jcorgan
244 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
245 5d69a524 jcorgan
    if (first) {
246 5d69a524 jcorgan
      cerr << ">>> gr_fir_ccc: using 3DNow!\n";
247 5d69a524 jcorgan
      first = false;
248 5d69a524 jcorgan
    }
249 5d69a524 jcorgan
    return make_gr_fir_ccc_3dnow (taps);
250 5d69a524 jcorgan
  }
251 5d69a524 jcorgan
252 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
253 5d69a524 jcorgan
    if (first){
254 5d69a524 jcorgan
      cerr << ">>> gr_fir_ccc: using SSE\n";
255 5d69a524 jcorgan
      first = false;
256 5d69a524 jcorgan
    }
257 5d69a524 jcorgan
    return make_gr_fir_ccc_sse (taps);
258 5d69a524 jcorgan
  }
259 5d69a524 jcorgan
  
260 5d69a524 jcorgan
  if (first){
261 5d69a524 jcorgan
    cerr << ">>> gr_fir_ccc: handing off to parent class\n";
262 5d69a524 jcorgan
    first = false;
263 5d69a524 jcorgan
  }
264 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_ccc (taps);
265 5d69a524 jcorgan
}
266 5d69a524 jcorgan
267 5d69a524 jcorgan
gr_fir_fff *
268 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_fff (const std::vector<float> &taps)
269 5d69a524 jcorgan
{
270 5d69a524 jcorgan
  static bool first = true;
271 5d69a524 jcorgan
272 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
273 5d69a524 jcorgan
    if (first) {
274 5d69a524 jcorgan
      cerr << ">>> gr_fir_fff: using 3DNow!\n";
275 5d69a524 jcorgan
      first = false;
276 5d69a524 jcorgan
    }
277 5d69a524 jcorgan
    return make_gr_fir_fff_3dnow (taps);
278 5d69a524 jcorgan
  }
279 5d69a524 jcorgan
280 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
281 5d69a524 jcorgan
    if (first){
282 5d69a524 jcorgan
      cerr << ">>> gr_fir_fff: using SSE\n";
283 5d69a524 jcorgan
      first = false;
284 5d69a524 jcorgan
    }
285 5d69a524 jcorgan
    return make_gr_fir_fff_sse (taps);
286 5d69a524 jcorgan
  }
287 5d69a524 jcorgan
  
288 5d69a524 jcorgan
  if (first){
289 5d69a524 jcorgan
    cerr << ">>> gr_fir_fff: handing off to parent class\n";
290 5d69a524 jcorgan
    first = false;
291 5d69a524 jcorgan
  }
292 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_fff (taps);
293 5d69a524 jcorgan
}
294 5d69a524 jcorgan
295 5d69a524 jcorgan
gr_fir_fsf *
296 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_fsf (const std::vector<float> &taps)
297 5d69a524 jcorgan
{
298 5d69a524 jcorgan
  static bool first = true;
299 5d69a524 jcorgan
300 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
301 5d69a524 jcorgan
    if (first) {
302 5d69a524 jcorgan
      cerr << ">>> gr_fir_fsf: using 3DNow!\n";
303 5d69a524 jcorgan
      first = false;
304 5d69a524 jcorgan
    }
305 5d69a524 jcorgan
    return make_gr_fir_fsf_3dnow (taps);
306 5d69a524 jcorgan
  }
307 5d69a524 jcorgan
308 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
309 5d69a524 jcorgan
    if (first){
310 5d69a524 jcorgan
      cerr << ">>> gr_fir_fsf: using SSE\n";
311 5d69a524 jcorgan
      first = false;
312 5d69a524 jcorgan
    }
313 5d69a524 jcorgan
    return make_gr_fir_fsf_sse (taps);
314 5d69a524 jcorgan
  }
315 5d69a524 jcorgan
  
316 5d69a524 jcorgan
  if (first){
317 5d69a524 jcorgan
    cerr << ">>> gr_fir_fsf: handing off to parent class\n";
318 5d69a524 jcorgan
    first = false;
319 5d69a524 jcorgan
  }
320 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_fsf (taps);
321 5d69a524 jcorgan
}
322 5d69a524 jcorgan
323 5d69a524 jcorgan
#if 0
324 5d69a524 jcorgan
gr_fir_sss *
325 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_sss (const std::vector<short> &taps)
326 5d69a524 jcorgan
{
327 5d69a524 jcorgan
  // FIXME -- probably want to figure out best answer for Athlon and code
328 5d69a524 jcorgan
  // add code to select it here...
329 5d69a524 jcorgan
330 5d69a524 jcorgan
  if (gr_cpu::has_sse2 ()){
331 5d69a524 jcorgan
    cerr << ">>> gr_fir_sss: using SSE2\n";
332 5d69a524 jcorgan
    return make_gr_fir_sss_sse2 (taps);
333 5d69a524 jcorgan
  }
334 5d69a524 jcorgan
  
335 5d69a524 jcorgan
  if (gr_cpu::has_mmx ()){
336 5d69a524 jcorgan
    cerr << ">>> gr_fir_sss: using MMX\n";
337 5d69a524 jcorgan
    return make_gr_fir_sss_mmx (taps);
338 5d69a524 jcorgan
  }
339 5d69a524 jcorgan
  
340 5d69a524 jcorgan
  cerr << ">>> gr_fir_sss: handing off to parent class\n";
341 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_sss (taps);
342 5d69a524 jcorgan
}
343 5d69a524 jcorgan
#endif
344 5d69a524 jcorgan
345 5d69a524 jcorgan
gr_fir_scc *
346 5d69a524 jcorgan
gr_fir_sysconfig_x86::create_gr_fir_scc (const std::vector<gr_complex> &taps)
347 5d69a524 jcorgan
{
348 5d69a524 jcorgan
  static bool first = true;
349 5d69a524 jcorgan
350 5d69a524 jcorgan
  if (gr_cpu::has_3dnowext ()){
351 5d69a524 jcorgan
    if (first){
352 5d69a524 jcorgan
      cerr << ">>> gr_fir_scc: using 3DNow!Ext\n";
353 5d69a524 jcorgan
      first = false;
354 5d69a524 jcorgan
    }
355 5d69a524 jcorgan
    return make_gr_fir_scc_3dnowext (taps);
356 5d69a524 jcorgan
  }
357 5d69a524 jcorgan
358 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
359 5d69a524 jcorgan
    if (first){
360 5d69a524 jcorgan
      cerr << ">>> gr_fir_scc: using 3DNow!\n";
361 5d69a524 jcorgan
      first = false;
362 5d69a524 jcorgan
    }
363 5d69a524 jcorgan
    return make_gr_fir_scc_3dnow (taps);
364 5d69a524 jcorgan
  }
365 5d69a524 jcorgan
366 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
367 5d69a524 jcorgan
    if (first){
368 5d69a524 jcorgan
      cerr << ">>> gr_fir_scc: using SSE\n";
369 5d69a524 jcorgan
      first = false;
370 5d69a524 jcorgan
    }
371 5d69a524 jcorgan
    return make_gr_fir_scc_sse (taps);
372 5d69a524 jcorgan
  }
373 5d69a524 jcorgan
374 5d69a524 jcorgan
  if (first){
375 5d69a524 jcorgan
    cerr << ">>> gr_fir_scc: handing off to parent class\n";
376 5d69a524 jcorgan
    first = false;
377 5d69a524 jcorgan
  }
378 5d69a524 jcorgan
  return gr_fir_sysconfig_generic::create_gr_fir_scc (taps);
379 5d69a524 jcorgan
}
380 5d69a524 jcorgan
381 5d69a524 jcorgan
/*
382 5d69a524 jcorgan
 * ----------------------------------------------------------------
383 5d69a524 jcorgan
 *         Return info about available implementations
384 5d69a524 jcorgan
 * ----------------------------------------------------------------
385 5d69a524 jcorgan
 */
386 5d69a524 jcorgan
387 5d69a524 jcorgan
void 
388 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_ccf_info (std::vector<gr_fir_ccf_info> *info)
389 5d69a524 jcorgan
{
390 5d69a524 jcorgan
  gr_fir_ccf_info        t;
391 5d69a524 jcorgan
392 5d69a524 jcorgan
  // invoke parent..
393 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_ccf_info (info);
394 5d69a524 jcorgan
395 5d69a524 jcorgan
  // add our stuff...
396 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
397 5d69a524 jcorgan
    t.name = "3DNow!";
398 5d69a524 jcorgan
    t.create = make_gr_fir_ccf_3dnow;
399 5d69a524 jcorgan
    (*info).push_back (t);
400 5d69a524 jcorgan
  }
401 5d69a524 jcorgan
402 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
403 5d69a524 jcorgan
    t.name = "SSE";
404 5d69a524 jcorgan
    t.create = make_gr_fir_ccf_sse;
405 5d69a524 jcorgan
    (*info).push_back (t);
406 5d69a524 jcorgan
  }
407 5d69a524 jcorgan
}
408 5d69a524 jcorgan
409 5d69a524 jcorgan
void 
410 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_fcc_info (std::vector<gr_fir_fcc_info> *info)
411 5d69a524 jcorgan
{
412 5d69a524 jcorgan
  gr_fir_fcc_info        t;
413 5d69a524 jcorgan
414 5d69a524 jcorgan
  // invoke parent..
415 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_fcc_info (info);
416 5d69a524 jcorgan
417 5d69a524 jcorgan
  // add our stuff...
418 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
419 5d69a524 jcorgan
    t.name = "3DNow!";
420 5d69a524 jcorgan
    t.create = make_gr_fir_fcc_3dnow;
421 5d69a524 jcorgan
    (*info).push_back (t);
422 5d69a524 jcorgan
  }
423 5d69a524 jcorgan
424 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
425 5d69a524 jcorgan
    t.name = "SSE";
426 5d69a524 jcorgan
    t.create = make_gr_fir_fcc_sse;
427 5d69a524 jcorgan
    (*info).push_back (t);
428 5d69a524 jcorgan
  }
429 5d69a524 jcorgan
}
430 5d69a524 jcorgan
431 5d69a524 jcorgan
void 
432 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_ccc_info (std::vector<gr_fir_ccc_info> *info)
433 5d69a524 jcorgan
{
434 5d69a524 jcorgan
  gr_fir_ccc_info        t;
435 5d69a524 jcorgan
  
436 5d69a524 jcorgan
  // invoke parent..
437 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_ccc_info (info);
438 5d69a524 jcorgan
439 5d69a524 jcorgan
  // add our stuff...
440 5d69a524 jcorgan
  if (gr_cpu::has_3dnowext ()){
441 5d69a524 jcorgan
    t.name = "3DNow!Ext";
442 5d69a524 jcorgan
    t.create = make_gr_fir_ccc_3dnowext;
443 5d69a524 jcorgan
    (*info).push_back (t);
444 5d69a524 jcorgan
  }
445 5d69a524 jcorgan
446 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
447 5d69a524 jcorgan
    t.name = "3DNow!";
448 5d69a524 jcorgan
    t.create = make_gr_fir_ccc_3dnow;
449 5d69a524 jcorgan
    (*info).push_back (t);
450 5d69a524 jcorgan
  }
451 5d69a524 jcorgan
452 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
453 5d69a524 jcorgan
    t.name = "SSE";
454 5d69a524 jcorgan
    t.create = make_gr_fir_ccc_sse;
455 5d69a524 jcorgan
    (*info).push_back (t);
456 5d69a524 jcorgan
  }
457 5d69a524 jcorgan
}
458 5d69a524 jcorgan
459 5d69a524 jcorgan
void 
460 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_fff_info (std::vector<gr_fir_fff_info> *info)
461 5d69a524 jcorgan
{
462 5d69a524 jcorgan
  gr_fir_fff_info        t;
463 5d69a524 jcorgan
  
464 5d69a524 jcorgan
  // invoke parent..
465 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_fff_info (info);
466 5d69a524 jcorgan
467 5d69a524 jcorgan
  // add our stuff...
468 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
469 5d69a524 jcorgan
    t.name = "3DNow!";
470 5d69a524 jcorgan
    t.create = make_gr_fir_fff_3dnow;
471 5d69a524 jcorgan
    (*info).push_back (t);
472 5d69a524 jcorgan
  }
473 5d69a524 jcorgan
474 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
475 5d69a524 jcorgan
    t.name = "SSE";
476 5d69a524 jcorgan
    t.create = make_gr_fir_fff_sse;
477 5d69a524 jcorgan
    (*info).push_back (t);
478 5d69a524 jcorgan
  }
479 5d69a524 jcorgan
}
480 5d69a524 jcorgan
481 5d69a524 jcorgan
void 
482 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_fsf_info (std::vector<gr_fir_fsf_info> *info)
483 5d69a524 jcorgan
{
484 5d69a524 jcorgan
  gr_fir_fsf_info        t;
485 5d69a524 jcorgan
  
486 5d69a524 jcorgan
  // invoke parent..
487 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_fsf_info (info);
488 5d69a524 jcorgan
489 5d69a524 jcorgan
  // add our stuff...
490 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
491 5d69a524 jcorgan
    t.name = "3DNow!";
492 5d69a524 jcorgan
    t.create = make_gr_fir_fsf_3dnow;
493 5d69a524 jcorgan
    (*info).push_back (t);
494 5d69a524 jcorgan
  }
495 5d69a524 jcorgan
496 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
497 5d69a524 jcorgan
    t.name = "SSE";
498 5d69a524 jcorgan
    t.create = make_gr_fir_fsf_sse;
499 5d69a524 jcorgan
    (*info).push_back (t);
500 5d69a524 jcorgan
  }
501 5d69a524 jcorgan
}
502 5d69a524 jcorgan
503 5d69a524 jcorgan
void 
504 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_scc_info (std::vector<gr_fir_scc_info> *info)
505 5d69a524 jcorgan
{
506 5d69a524 jcorgan
  gr_fir_scc_info        t;
507 5d69a524 jcorgan
508 5d69a524 jcorgan
  // invoke parent..
509 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_scc_info (info);
510 5d69a524 jcorgan
511 5d69a524 jcorgan
  // add our stuff...
512 5d69a524 jcorgan
  if (gr_cpu::has_3dnowext ()){
513 5d69a524 jcorgan
    t.name = "3DNow!Ext";
514 5d69a524 jcorgan
    t.create = make_gr_fir_scc_3dnowext;
515 5d69a524 jcorgan
    (*info).push_back (t);
516 5d69a524 jcorgan
  }
517 5d69a524 jcorgan
518 5d69a524 jcorgan
  if (gr_cpu::has_3dnow ()){
519 5d69a524 jcorgan
    t.name = "3DNow!";
520 5d69a524 jcorgan
    t.create = make_gr_fir_scc_3dnow;
521 5d69a524 jcorgan
    (*info).push_back (t);
522 5d69a524 jcorgan
  }
523 5d69a524 jcorgan
524 5d69a524 jcorgan
  if (gr_cpu::has_sse ()){
525 5d69a524 jcorgan
    t.name = "SSE";
526 5d69a524 jcorgan
    t.create = make_gr_fir_scc_sse;
527 5d69a524 jcorgan
    (*info).push_back (t);
528 5d69a524 jcorgan
  }
529 5d69a524 jcorgan
}
530 5d69a524 jcorgan
531 5d69a524 jcorgan
#if 0
532 5d69a524 jcorgan
void 
533 5d69a524 jcorgan
gr_fir_sysconfig_x86::get_gr_fir_sss_info (std::vector<gr_fir_sss_info> *info)
534 5d69a524 jcorgan
{
535 5d69a524 jcorgan
  gr_fir_sss_info        t;
536 5d69a524 jcorgan
  
537 5d69a524 jcorgan
  // invoke parent..
538 5d69a524 jcorgan
  gr_fir_sysconfig_generic::get_gr_fir_sss_info (info);
539 5d69a524 jcorgan
540 5d69a524 jcorgan
  // add our stuff...
541 5d69a524 jcorgan
  if (gr_cpu::has_mmx ()){
542 5d69a524 jcorgan
    t.name = "MMX";
543 5d69a524 jcorgan
    t.create = make_gr_fir_sss_mmx;
544 5d69a524 jcorgan
    (*info).push_back (t);
545 5d69a524 jcorgan
  }
546 5d69a524 jcorgan
547 5d69a524 jcorgan
  if (gr_cpu::has_sse2 ()){
548 5d69a524 jcorgan
    t.name = "SSE2";
549 5d69a524 jcorgan
    t.create = make_gr_fir_sss_sse2;
550 5d69a524 jcorgan
    (*info).push_back (t);
551 5d69a524 jcorgan
  }
552 5d69a524 jcorgan
}
553 5d69a524 jcorgan
#endif