Changeset 8970
- Timestamp:
- 07/21/08 21:57:22
- Files:
-
- gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_cpu.h (modified) (1 diff)
- gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_cpu_powerpc.cc (modified) (1 diff)
- gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_cpu_x86.cc (modified) (1 diff)
- gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.cc (modified) (7 diffs)
- gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h (modified) (3 diffs)
- gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.cc (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_cpu.h
r8959 r8970 30 30 static bool has_3dnow (); 31 31 static bool has_3dnowext (); 32 static bool has_ vmx();32 static bool has_altivec (); 33 33 }; 34 34 gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_cpu_powerpc.cc
r8959 r8970 54 54 55 55 bool 56 gr_cpu::has_ vmx()56 gr_cpu::has_altivec () 57 57 { 58 58 return true; // FIXME assume we've always got it gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_cpu_x86.cc
r8959 r8970 108 108 109 109 bool 110 gr_cpu::has_ vmx()110 gr_cpu::has_altivec () 111 111 { 112 112 return false; gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.cc
r8969 r8970 35 35 36 36 float 37 dotprod_fff_ vmx(const float *a, const float *b, size_t n)37 dotprod_fff_altivec(const float *a, const float *b, size_t n) 38 38 { 39 39 float sum = 0; … … 53 53 */ 54 54 float 55 dotprod_fff_ vmx(const float *_a, const float *_b, size_t n)55 dotprod_fff_altivec(const float *_a, const float *_b, size_t n) 56 56 { 57 57 const vector float *a = (const vector float *) _a; … … 160 160 } 161 161 162 gr_fir_fff_ vmx::gr_fir_fff_vmx()162 gr_fir_fff_altivec::gr_fir_fff_altivec() 163 163 : gr_fir_fff_generic(), 164 164 d_naligned_taps(0), d_aligned_taps(0) … … 166 166 } 167 167 168 gr_fir_fff_ vmx::gr_fir_fff_vmx(const std::vector<float> &new_taps)168 gr_fir_fff_altivec::gr_fir_fff_altivec (const std::vector<float> &new_taps) 169 169 : gr_fir_fff_generic(new_taps), 170 170 d_naligned_taps(0), d_aligned_taps(0) … … 173 173 } 174 174 175 gr_fir_fff_ vmx::~gr_fir_fff_vmx()175 gr_fir_fff_altivec::~gr_fir_fff_altivec() 176 176 { 177 177 if (d_aligned_taps){ … … 182 182 183 183 void 184 gr_fir_fff_ vmx::set_taps(const std::vector<float> &inew_taps)184 gr_fir_fff_altivec::set_taps(const std::vector<float> &inew_taps) 185 185 { 186 186 gr_fir_fff_generic::set_taps(inew_taps); // call superclass … … 204 204 205 205 float 206 gr_fir_fff_ vmx::filter (const float input[])206 gr_fir_fff_altivec::filter (const float input[]) 207 207 { 208 208 if (d_naligned_taps == 0) 209 209 return 0.0; 210 210 211 return dotprod_fff_ vmx(input, d_aligned_taps, d_naligned_taps);212 } 211 return dotprod_fff_altivec(input, d_aligned_taps, d_naligned_taps); 212 } gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
r8969 r8970 19 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 20 */ 21 #ifndef INCLUDED_GR_FIR_FFF_ VMX_H22 #define INCLUDED_GR_FIR_FFF_ VMX_H21 #ifndef INCLUDED_GR_FIR_FFF_ALTIVEC_H 22 #define INCLUDED_GR_FIR_FFF_ALTIVEC_H 23 23 24 24 #include <gr_fir_fff_generic.h> 25 25 26 26 /*! 27 * \brief VMXversion of gr_fir_fff27 * \brief altivec version of gr_fir_fff 28 28 */ 29 class gr_fir_fff_ vmx: public gr_fir_fff_generic29 class gr_fir_fff_altivec : public gr_fir_fff_generic 30 30 { 31 31 protected: … … 35 35 36 36 public: 37 gr_fir_fff_ vmx();38 gr_fir_fff_ vmx(const std::vector<float> &taps);39 ~gr_fir_fff_ vmx();37 gr_fir_fff_altivec(); 38 gr_fir_fff_altivec(const std::vector<float> &taps); 39 ~gr_fir_fff_altivec(); 40 40 41 41 virtual void set_taps (const std::vector<float> &taps); … … 43 43 }; 44 44 45 #endif /* INCLUDED_GR_FIR_FFF_ VMX_H */45 #endif /* INCLUDED_GR_FIR_FFF_ALTIVEC_H */ gnuradio/branches/developers/eb/vmx/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.cc
r8969 r8970 28 28 #include <gr_fir_ccf.h> 29 29 #include <gr_fir_ccf_generic.h> 30 //#include <gr_fir_ccf_ vmx.h>30 //#include <gr_fir_ccf_altivec.h> 31 31 #include <gr_fir_fcc.h> 32 32 #include <gr_fir_fcc_generic.h> 33 //#include <gr_fir_fcc_ vmx.h>33 //#include <gr_fir_fcc_altivec.h> 34 34 #include <gr_fir_fff.h> 35 35 #include <gr_fir_fff_generic.h> … … 40 40 #include <gr_fir_ccc.h> 41 41 #include <gr_fir_ccc_generic.h> 42 //#include <gr_fir_ccc_ vmx.h>42 //#include <gr_fir_ccc_altivec.h> 43 43 #include <gr_fir_scc.h> 44 44 #include <gr_fir_scc_generic.h> 45 //#include <gr_fir_scc_ vmx.h>45 //#include <gr_fir_scc_altivec.h> 46 46 47 47 #include <iostream> … … 56 56 #if 0 57 57 static gr_fir_ccf * 58 make_gr_fir_ccf_ vmx(const std::vector<float> &taps)59 { 60 return new gr_fir_ccf_ vmx(taps);58 make_gr_fir_ccf_altivec(const std::vector<float> &taps) 59 { 60 return new gr_fir_ccf_altivec(taps); 61 61 } 62 62 63 63 static gr_fir_fcc * 64 make_gr_fir_fcc_ vmx(const std::vector<gr_complex> &taps)65 { 66 return new gr_fir_fcc_ vmx(taps);64 make_gr_fir_fcc_altivec(const std::vector<gr_complex> &taps) 65 { 66 return new gr_fir_fcc_altivec(taps); 67 67 } 68 68 69 69 static gr_fir_ccc * 70 make_gr_fir_ccc_ vmx(const std::vector<gr_complex> &taps)71 { 72 return new gr_fir_ccc_ vmx(taps);70 make_gr_fir_ccc_altivec (const std::vector<gr_complex> &taps) 71 { 72 return new gr_fir_ccc_altivec (taps); 73 73 } 74 74 #endif 75 75 76 76 static gr_fir_fff * 77 make_gr_fir_fff_ vmx(const std::vector<float> &taps)78 { 79 return new gr_fir_fff_ vmx(taps);77 make_gr_fir_fff_altivec (const std::vector<float> &taps) 78 { 79 return new gr_fir_fff_altivec (taps); 80 80 } 81 81 82 82 #if 0 83 83 static gr_fir_fsf * 84 make_gr_fir_fsf_ vmx(const std::vector<float> &taps)85 { 86 return new gr_fir_fsf_ vmx(taps);84 make_gr_fir_fsf_altivec (const std::vector<float> &taps) 85 { 86 return new gr_fir_fsf_altivec (taps); 87 87 } 88 88 89 89 static gr_fir_scc * 90 make_gr_fir_scc_ vmx(const std::vector<gr_complex> &taps)91 { 92 return new gr_fir_scc_ vmx(taps);90 make_gr_fir_scc_altivec(const std::vector<gr_complex> &taps) 91 { 92 return new gr_fir_scc_altivec(taps); 93 93 } 94 94 #endif … … 98 98 * Return instances of the fastest powerpc versions of these classes. 99 99 * 100 * check CPUID, if has VMX, return VMXversion,100 * check CPUID, if has altivec, return altivec version, 101 101 * else return generic version. 102 102 * ---------------------------------------------------------------- … … 109 109 110 110 #if 0 111 if (gr_cpu::has_ vmx()){112 if (first){ 113 cerr << ">>> gr_fir_ccf: using VMX\n";114 first = false; 115 } 116 return make_gr_fir_ccf_ vmx(taps);117 } 118 #endif 119 120 if ( first){111 if (gr_cpu::has_altivec ()){ 112 if (first){ 113 cerr << ">>> gr_fir_ccf: using altivec\n"; 114 first = false; 115 } 116 return make_gr_fir_ccf_altivec (taps); 117 } 118 #endif 119 120 if (0 && first){ 121 121 cerr << ">>> gr_fir_ccf: handing off to parent class\n"; 122 122 first = false; … … 131 131 132 132 #if 0 133 if (gr_cpu::has_ vmx()){134 if (first){ 135 cerr << ">>> gr_fir_fcc: using VMX\n";136 first = false; 137 } 138 return make_gr_fir_fcc_ vmx(taps);139 } 140 #endif 141 142 if ( first){133 if (gr_cpu::has_altivec ()){ 134 if (first){ 135 cerr << ">>> gr_fir_fcc: using altivec\n"; 136 first = false; 137 } 138 return make_gr_fir_fcc_altivec (taps); 139 } 140 #endif 141 142 if (0 && first){ 143 143 cerr << ">>> gr_fir_fcc: handing off to parent class\n"; 144 144 first = false; … … 153 153 154 154 #if 0 155 if (gr_cpu::has_ vmx()){156 if (first){ 157 cerr << ">>> gr_fir_ccc: using VMX\n";158 first = false; 159 } 160 return make_gr_fir_ccc_ vmx(taps);155 if (gr_cpu::has_altivec ()){ 156 if (first){ 157 cerr << ">>> gr_fir_ccc: using altivec\n"; 158 first = false; 159 } 160 return make_gr_fir_ccc_altivec (taps); 161 161 } 162 162 #endif 163 163 164 if ( first){164 if (0 && first){ 165 165 cerr << ">>> gr_fir_ccc: handing off to parent class\n"; 166 166 first = false; … … 174 174 static bool first = true; 175 175 176 if (gr_cpu::has_ vmx()){177 if (first){ 178 cerr << ">>> gr_fir_fff: using VMX\n";179 first = false; 180 } 181 return make_gr_fir_fff_ vmx(taps);176 if (gr_cpu::has_altivec ()){ 177 if (first){ 178 cerr << ">>> gr_fir_fff: using altivec\n"; 179 first = false; 180 } 181 return make_gr_fir_fff_altivec (taps); 182 182 } 183 183 184 if ( first){184 if (0 && first){ 185 185 cerr << ">>> gr_fir_fff: handing off to parent class\n"; 186 186 first = false; … … 195 195 196 196 #if 0 197 if (gr_cpu::has_ vmx()){198 if (first){ 199 cerr << ">>> gr_fir_fsf: using VMX\n";200 first = false; 201 } 202 return make_gr_fir_fsf_ vmx(taps);197 if (gr_cpu::has_altivec ()){ 198 if (first){ 199 cerr << ">>> gr_fir_fsf: using altivec\n"; 200 first = false; 201 } 202 return make_gr_fir_fsf_altivec (taps); 203 203 } 204 204 #endif 205 205 206 if ( first){206 if (0 && first){ 207 207 cerr << ">>> gr_fir_fsf: handing off to parent class\n"; 208 208 first = false; … … 218 218 219 219 #if 0 220 if (gr_cpu::has_ vmx()){221 if (first){ 222 cerr << ">>> gr_fir_scc: using VMX\n";223 first = false; 224 } 225 return make_gr_fir_scc_ vmx(taps);226 } 227 #endif 228 229 if ( first){220 if (gr_cpu::has_altivec ()){ 221 if (first){ 222 cerr << ">>> gr_fir_scc: using altivec\n"; 223 first = false; 224 } 225 return make_gr_fir_scc_altivec (taps); 226 } 227 #endif 228 229 if (0 && first){ 230 230 cerr << ">>> gr_fir_scc: handing off to parent class\n"; 231 231 first = false; … … 249 249 // add our stuff... 250 250 gr_fir_ccf_info t; 251 if (gr_cpu::has_ vmx()){252 t.name = " VMX";253 t.create = make_gr_fir_ccf_ vmx;251 if (gr_cpu::has_altivec ()){ 252 t.name = "altivec"; 253 t.create = make_gr_fir_ccf_altivec; 254 254 (*info).push_back (t); 255 255 } … … 266 266 // add our stuff... 267 267 gr_fir_fcc_info t; 268 if (gr_cpu::has_ vmx()){269 t.name = " VMX";270 t.create = make_gr_fir_fcc_ vmx;268 if (gr_cpu::has_altivec ()){ 269 t.name = "altivec"; 270 t.create = make_gr_fir_fcc_altivec; 271 271 (*info).push_back (t); 272 272 } … … 283 283 // add our stuff... 284 284 gr_fir_ccc_info t; 285 if (gr_cpu::has_ vmx()){286 t.name = " VMX";287 t.create = make_gr_fir_ccc_ vmx;285 if (gr_cpu::has_altivec ()){ 286 t.name = "altivec"; 287 t.create = make_gr_fir_ccc_altivec; 288 288 (*info).push_back (t); 289 289 } … … 299 299 // add our stuff... 300 300 gr_fir_fff_info t; 301 if (gr_cpu::has_ vmx()){302 t.name = " VMX";303 t.create = make_gr_fir_fff_ vmx;301 if (gr_cpu::has_altivec ()){ 302 t.name = "altivec"; 303 t.create = make_gr_fir_fff_altivec; 304 304 (*info).push_back (t); 305 305 } … … 315 315 // add our stuff... 316 316 gr_fir_fsf_info t; 317 if (gr_cpu::has_ vmx()){318 t.name = " VMX";319 t.create = make_gr_fir_fsf_ vmx;317 if (gr_cpu::has_altivec ()){ 318 t.name = "altivec"; 319 t.create = make_gr_fir_fsf_altivec; 320 320 (*info).push_back (t); 321 321 } … … 332 332 // add our stuff... 333 333 gr_fir_scc_info t; 334 if (gr_cpu::has_ vmx()){335 t.name = " VMX";336 t.create = make_gr_fir_scc_ vmx;337 (*info).push_back (t); 338 } 339 #endif 340 } 334 if (gr_cpu::has_altivec ()){ 335 t.name = "altivec"; 336 t.create = make_gr_fir_scc_altivec; 337 (*info).push_back (t); 338 } 339 #endif 340 }
