diff options
Diffstat (limited to 'recipes/gnuradio/gnuradio/gnuradio-neon.patch')
-rw-r--r-- | recipes/gnuradio/gnuradio/gnuradio-neon.patch | 943 |
1 files changed, 0 insertions, 943 deletions
diff --git a/recipes/gnuradio/gnuradio/gnuradio-neon.patch b/recipes/gnuradio/gnuradio/gnuradio-neon.patch deleted file mode 100644 index 3affda547f..0000000000 --- a/recipes/gnuradio/gnuradio/gnuradio-neon.patch +++ /dev/null @@ -1,943 +0,0 @@ -Index: gnuradio-core/src/lib/runtime/gr_dispatcher.cc -=================================================================== ---- gnuradio-core/src/lib/runtime/gr_dispatcher.cc (revision 9831) -+++ gnuradio-core/src/lib/runtime/gr_dispatcher.cc (working copy) -@@ -28,6 +28,7 @@ - #include <math.h> - #include <errno.h> - #include <stdio.h> -+#include <string.h> - - #ifdef HAVE_SELECT - # ifdef HAVE_SYS_SELECT_H -Index: gnuradio-core/src/lib/filter/dotprod_fff_cortex_a8.c -=================================================================== ---- gnuradio-core/src/lib/filter/dotprod_fff_cortex_a8.c (revision 0) -+++ gnuradio-core/src/lib/filter/dotprod_fff_cortex_a8.c (revision 0) -@@ -0,0 +1,85 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+#include <dotprod_fff_cortex_a8.h> -+ -+/*! -+ * \param x any value -+ * \param pow2 must be a power of 2 -+ * \returns \p x rounded down to a multiple of \p pow2. -+ */ -+static inline size_t -+gr_p2_round_down(size_t x, size_t pow2) -+{ -+ return x & -pow2; -+} -+ -+ -+#if 0 -+ -+float -+dotprod_fff_cortex_a8(const float *a, const float *b, size_t n) -+{ -+ float sum = 0; -+ size_t i; -+ for (i = 0; i < n; i++){ -+ sum += a[i] * b[i]; -+ } -+ return sum; -+} -+ -+#else -+ -+/* -+ * preconditions: -+ * -+ * n > 0 and a multiple of 4 -+ * a 4-byte aligned -+ * b 16-byte aligned -+ */ -+float -+dotprod_fff_cortex_a8(const float *a, const float *b, size_t n) -+{ -+ float s = 0; -+ -+ asm ("vmov.f32 q8, #0.0 \n\t" -+ "vmov.f32 q9, #0.0 \n\t" -+ "1: \n\t" -+ "subs %3, %3, #8 \n\t" -+ "vld1.32 {d0,d1,d2,d3}, [%1]! \n\t" -+ "vld1.32 {d4,d5,d6,d7}, [%2]! \n\t" -+ "vmla.f32 q8, q0, q2 \n\t" -+ "vmla.f32 q9, q1, q3 \n\t" -+ "bgt 1b \n\t" -+ "vadd.f32 q8, q8, q9 \n\t" -+ "vpadd.f32 d0, d16, d17 \n\t" -+ "vadd.f32 %0, s0, s1 \n\t" -+ : "=w"(s), "+r"(a), "+r"(b), "+r"(n) -+ :: "q0", "q1", "q2", "q3", "q8", "q9"); -+ -+ return s; -+ -+} -+ -+#endif -Index: gnuradio-core/src/lib/filter/dotprod_fff_cortex_a8.h -=================================================================== ---- gnuradio-core/src/lib/filter/dotprod_fff_cortex_a8.h (revision 0) -+++ gnuradio-core/src/lib/filter/dotprod_fff_cortex_a8.h (revision 0) -@@ -0,0 +1,49 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ */ -+#ifndef INCLUDED_DOTPROD_FFF_CORTEX_A8_H -+#define INCLUDED_DOTPROD_FFF_CORTEX_A8_H -+ -+#include <stddef.h> -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/*! -+ * <pre> -+ * -+ * preconditions: -+ * -+ * n > 0 and a multiple of 4 -+ * a 4-byte aligned -+ * b 16-byte aligned -+ * -+ * </pre> -+ */ -+float -+dotprod_fff_cortex_a8(const float *a, const float *b, size_t n); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+ -+#endif /* INCLUDED_DOTPROD_FFF_CORTEX_A8_H */ -Index: gnuradio-core/src/lib/filter/Makefile.am -=================================================================== ---- gnuradio-core/src/lib/filter/Makefile.am (revision 9831) -+++ gnuradio-core/src/lib/filter/Makefile.am (working copy) -@@ -177,7 +177,16 @@ - powerpc_qa_CODE = \ - qa_dotprod_powerpc.cc - -+cortex_a8_CODE = \ -+ sysconfig_cortex_a8.cc \ -+ gr_fir_sysconfig_cortex_a8.cc \ -+ gr_cpu_cortex_a8.cc \ -+ gr_fir_fff_cortex_a8.cc \ -+ dotprod_fff_cortex_a8.c - -+cortex_a8_qa_CODE = \ -+ qa_dotprod_cortex_a8.cc -+ - # - # include each <foo>_CODE entry here... - # -@@ -189,7 +198,9 @@ - $(x86_64_SUBCODE) \ - $(x86_qa_CODE) \ - $(powerpc_CODE) \ -- $(powerpc_qa_CODE) -+ $(powerpc_qa_CODE) \ -+ $(cortex_a8_CODE) \ -+ $(cortex_a8_qa_CODE) - - - EXTRA_DIST = \ -@@ -254,7 +265,12 @@ - libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(powerpc_qa_CODE) - endif - -+if MD_CPU_cortex_a8 -+libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(cortex_a8_CODE) -+libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(cortex_a8_qa_CODE) -+endif - -+ - grinclude_HEADERS = \ - $(GENERATED_H) \ - complex_dotprod_generic.h \ -@@ -296,6 +312,7 @@ - noinst_HEADERS = \ - assembly.h \ - dotprod_fff_altivec.h \ -+ dotprod_fff_cortex_a8.h \ - gr_fir_scc_simd.h \ - gr_fir_scc_x86.h \ - gr_fir_fcc_simd.h \ -@@ -305,6 +322,7 @@ - gr_fir_ccc_simd.h \ - gr_fir_ccc_x86.h \ - gr_fir_fff_altivec.h \ -+ gr_fir_fff_cortex_a8.h \ - gr_fir_fff_simd.h \ - gr_fir_fff_x86.h \ - gr_fir_fsf_simd.h \ -Index: gnuradio-core/src/lib/filter/gr_fir_sysconfig_cortex_a8.cc -=================================================================== ---- gnuradio-core/src/lib/filter/gr_fir_sysconfig_cortex_a8.cc (revision 0) -+++ gnuradio-core/src/lib/filter/gr_fir_sysconfig_cortex_a8.cc (revision 0) -@@ -0,0 +1,340 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2002,2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with GNU Radio; see the file COPYING. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, -+ * Boston, MA 02110-1301, USA. -+ */ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+#include <gr_fir_sysconfig_cortex_a8.h> -+#include <gr_cpu.h> -+ -+#include <gr_fir_ccf.h> -+#include <gr_fir_ccf_generic.h> -+//#include <gr_fir_ccf_altivec.h> -+#include <gr_fir_fcc.h> -+#include <gr_fir_fcc_generic.h> -+//#include <gr_fir_fcc_altivec.h> -+#include <gr_fir_fff.h> -+#include <gr_fir_fff_generic.h> -+#include <gr_fir_fff_cortex_a8.h> -+#include <gr_fir_fsf.h> -+#include <gr_fir_fsf_generic.h> -+//#include <gr_fir_fsf_powerpc.h> -+#include <gr_fir_ccc.h> -+#include <gr_fir_ccc_generic.h> -+//#include <gr_fir_ccc_altivec.h> -+#include <gr_fir_scc.h> -+#include <gr_fir_scc_generic.h> -+//#include <gr_fir_scc_altivec.h> -+ -+#include <iostream> -+using std::cerr; -+ -+/* -+ * ---------------------------------------------------------------- -+ * static functions that serve as constructors... -+ * ---------------------------------------------------------------- -+ */ -+ -+#if 0 -+static gr_fir_ccf * -+make_gr_fir_ccf_altivec(const std::vector<float> &taps) -+{ -+ return new gr_fir_ccf_altivec(taps); -+} -+ -+static gr_fir_fcc * -+make_gr_fir_fcc_altivec(const std::vector<gr_complex> &taps) -+{ -+ return new gr_fir_fcc_altivec(taps); -+} -+ -+static gr_fir_ccc * -+make_gr_fir_ccc_altivec (const std::vector<gr_complex> &taps) -+{ -+ return new gr_fir_ccc_altivec (taps); -+} -+#endif -+ -+static gr_fir_fff * -+make_gr_fir_fff_cortex_a8 (const std::vector<float> &taps) -+{ -+ return new gr_fir_fff_cortex_a8 (taps); -+} -+ -+#if 0 -+static gr_fir_fsf * -+make_gr_fir_fsf_altivec (const std::vector<float> &taps) -+{ -+ return new gr_fir_fsf_altivec (taps); -+} -+ -+static gr_fir_scc * -+make_gr_fir_scc_altivec(const std::vector<gr_complex> &taps) -+{ -+ return new gr_fir_scc_altivec(taps); -+} -+#endif -+ -+/* -+ * ---------------------------------------------------------------- -+ * Return instances of the fastest powerpc versions of these classes. -+ * -+ * check CPUID, if has altivec, return altivec version, -+ * else return generic version. -+ * ---------------------------------------------------------------- -+ */ -+ -+gr_fir_ccf * -+gr_fir_sysconfig_cortex_a8::create_gr_fir_ccf (const std::vector<float> &taps) -+{ -+ static bool first = true; -+ -+#if 0 -+ if (gr_cpu::has_altivec ()){ -+ if (first){ -+ cerr << ">>> gr_fir_ccf: using altivec\n"; -+ first = false; -+ } -+ return make_gr_fir_ccf_altivec (taps); -+ } -+#endif -+ -+ if (0 && first){ -+ cerr << ">>> gr_fir_ccf: handing off to parent class\n"; -+ first = false; -+ } -+ return gr_fir_sysconfig_generic::create_gr_fir_ccf (taps); -+} -+ -+gr_fir_fcc * -+gr_fir_sysconfig_cortex_a8::create_gr_fir_fcc (const std::vector<gr_complex> &taps) -+{ -+ static bool first = true; -+ -+#if 0 -+ if (gr_cpu::has_altivec ()){ -+ if (first){ -+ cerr << ">>> gr_fir_fcc: using altivec\n"; -+ first = false; -+ } -+ return make_gr_fir_fcc_altivec (taps); -+ } -+#endif -+ -+ if (0 && first){ -+ cerr << ">>> gr_fir_fcc: handing off to parent class\n"; -+ first = false; -+ } -+ return gr_fir_sysconfig_generic::create_gr_fir_fcc (taps); -+} -+ -+gr_fir_ccc * -+gr_fir_sysconfig_cortex_a8::create_gr_fir_ccc (const std::vector<gr_complex> &taps) -+{ -+ static bool first = true; -+ -+#if 0 -+ if (gr_cpu::has_altivec ()){ -+ if (first){ -+ cerr << ">>> gr_fir_ccc: using altivec\n"; -+ first = false; -+ } -+ return make_gr_fir_ccc_altivec (taps); -+ } -+#endif -+ -+ if (0 && first){ -+ cerr << ">>> gr_fir_ccc: handing off to parent class\n"; -+ first = false; -+ } -+ return gr_fir_sysconfig_generic::create_gr_fir_ccc (taps); -+} -+ -+gr_fir_fff * -+gr_fir_sysconfig_cortex_a8::create_gr_fir_fff (const std::vector<float> &taps) -+{ -+ static bool first = true; -+ -+ if (gr_cpu::has_cortex_a8 ()){ -+ if (first){ -+ cerr << ">>> gr_fir_fff: using cortex_a8\n"; -+ first = false; -+ } -+ return make_gr_fir_fff_cortex_a8 (taps); -+ } -+ -+ if (0 && first){ -+ cerr << ">>> gr_fir_fff: handing off to parent class\n"; -+ first = false; -+ } -+ return gr_fir_sysconfig_generic::create_gr_fir_fff (taps); -+} -+ -+gr_fir_fsf * -+gr_fir_sysconfig_cortex_a8::create_gr_fir_fsf (const std::vector<float> &taps) -+{ -+ static bool first = true; -+ -+#if 0 -+ if (gr_cpu::has_altivec ()){ -+ if (first){ -+ cerr << ">>> gr_fir_fsf: using altivec\n"; -+ first = false; -+ } -+ return make_gr_fir_fsf_altivec (taps); -+ } -+#endif -+ -+ if (0 && first){ -+ cerr << ">>> gr_fir_fsf: handing off to parent class\n"; -+ first = false; -+ } -+ return gr_fir_sysconfig_generic::create_gr_fir_fsf (taps); -+} -+ -+ -+gr_fir_scc * -+gr_fir_sysconfig_cortex_a8::create_gr_fir_scc (const std::vector<gr_complex> &taps) -+{ -+ static bool first = true; -+ -+#if 0 -+ if (gr_cpu::has_altivec ()){ -+ if (first){ -+ cerr << ">>> gr_fir_scc: using altivec\n"; -+ first = false; -+ } -+ return make_gr_fir_scc_altivec (taps); -+ } -+#endif -+ -+ if (0 && first){ -+ cerr << ">>> gr_fir_scc: handing off to parent class\n"; -+ first = false; -+ } -+ return gr_fir_sysconfig_generic::create_gr_fir_scc (taps); -+} -+ -+/* -+ * ---------------------------------------------------------------- -+ * Return info about available implementations -+ * ---------------------------------------------------------------- -+ */ -+ -+void -+gr_fir_sysconfig_cortex_a8::get_gr_fir_ccf_info (std::vector<gr_fir_ccf_info> *info) -+{ -+ // invoke parent.. -+ gr_fir_sysconfig_generic::get_gr_fir_ccf_info (info); -+ -+#if 0 -+ // add our stuff... -+ gr_fir_ccf_info t; -+ if (gr_cpu::has_altivec ()){ -+ t.name = "altivec"; -+ t.create = make_gr_fir_ccf_altivec; -+ (*info).push_back (t); -+ } -+#endif -+} -+ -+void -+gr_fir_sysconfig_cortex_a8::get_gr_fir_fcc_info (std::vector<gr_fir_fcc_info> *info) -+{ -+ // invoke parent.. -+ gr_fir_sysconfig_generic::get_gr_fir_fcc_info (info); -+ -+#if 0 -+ // add our stuff... -+ gr_fir_fcc_info t; -+ if (gr_cpu::has_altivec ()){ -+ t.name = "altivec"; -+ t.create = make_gr_fir_fcc_altivec; -+ (*info).push_back (t); -+ } -+#endif -+} -+ -+void -+gr_fir_sysconfig_cortex_a8::get_gr_fir_ccc_info (std::vector<gr_fir_ccc_info> *info) -+{ -+ // invoke parent.. -+ gr_fir_sysconfig_generic::get_gr_fir_ccc_info (info); -+ -+#if 0 -+ // add our stuff... -+ gr_fir_ccc_info t; -+ if (gr_cpu::has_altivec ()){ -+ t.name = "altivec"; -+ t.create = make_gr_fir_ccc_altivec; -+ (*info).push_back (t); -+ } -+#endif -+} -+ -+void -+gr_fir_sysconfig_cortex_a8::get_gr_fir_fff_info (std::vector<gr_fir_fff_info> *info) -+{ -+ // invoke parent.. -+ gr_fir_sysconfig_generic::get_gr_fir_fff_info (info); -+ -+ // add our stuff... -+ gr_fir_fff_info t; -+ if (gr_cpu::has_cortex_a8 ()){ -+ t.name = "cortex_a8"; -+ t.create = make_gr_fir_fff_cortex_a8; -+ (*info).push_back (t); -+ } -+} -+ -+void -+gr_fir_sysconfig_cortex_a8::get_gr_fir_fsf_info (std::vector<gr_fir_fsf_info> *info) -+{ -+ // invoke parent.. -+ gr_fir_sysconfig_generic::get_gr_fir_fsf_info (info); -+ -+#if 0 -+ // add our stuff... -+ gr_fir_fsf_info t; -+ if (gr_cpu::has_altivec ()){ -+ t.name = "altivec"; -+ t.create = make_gr_fir_fsf_altivec; -+ (*info).push_back (t); -+ } -+#endif -+} -+ -+void -+gr_fir_sysconfig_cortex_a8::get_gr_fir_scc_info (std::vector<gr_fir_scc_info> *info) -+{ -+ // invoke parent.. -+ gr_fir_sysconfig_generic::get_gr_fir_scc_info (info); -+ -+#if 0 -+ // add our stuff... -+ gr_fir_scc_info t; -+ if (gr_cpu::has_altivec ()){ -+ t.name = "altivec"; -+ t.create = make_gr_fir_scc_altivec; -+ (*info).push_back (t); -+ } -+#endif -+} -Index: gnuradio-core/src/lib/filter/gr_cpu.h -=================================================================== ---- gnuradio-core/src/lib/filter/gr_cpu.h (revision 9831) -+++ gnuradio-core/src/lib/filter/gr_cpu.h (working copy) -@@ -34,6 +34,7 @@ - static bool has_3dnow (); - static bool has_3dnowext (); - static bool has_altivec (); -+ static bool has_cortex_a8 (); - }; - - #endif /* _GR_CPU_H_ */ -Index: gnuradio-core/src/lib/filter/gr_fir_fff_cortex_a8.h -=================================================================== ---- gnuradio-core/src/lib/filter/gr_fir_fff_cortex_a8.h (revision 0) -+++ gnuradio-core/src/lib/filter/gr_fir_fff_cortex_a8.h (revision 0) -@@ -0,0 +1,45 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ */ -+#ifndef INCLUDED_GR_FIR_FFF_CORTEX_A8_H -+#define INCLUDED_GR_FIR_FFF_CORTEX_A8_H -+ -+#include <gr_fir_fff_generic.h> -+ -+/*! -+ * \brief altivec version of gr_fir_fff -+ */ -+class gr_fir_fff_cortex_a8 : public gr_fir_fff_generic -+{ -+protected: -+ -+ size_t d_naligned_taps; // number of taps (multiple of 4) -+ float *d_aligned_taps; // 16-byte aligned, and zero padded to multiple of 4 -+ -+public: -+ gr_fir_fff_cortex_a8(); -+ gr_fir_fff_cortex_a8(const std::vector<float> &taps); -+ ~gr_fir_fff_cortex_a8(); -+ -+ virtual void set_taps (const std::vector<float> &taps); -+ virtual float filter (const float input[]); -+}; -+ -+#endif /* INCLUDED_GR_FIR_FFF_CORTEX_A*_H */ -Index: gnuradio-core/src/lib/filter/gr_cpu_x86.cc -=================================================================== ---- gnuradio-core/src/lib/filter/gr_cpu_x86.cc (revision 9831) -+++ gnuradio-core/src/lib/filter/gr_cpu_x86.cc (working copy) -@@ -111,3 +111,10 @@ - { - return false; - } -+ -+bool -+gr_cpu::has_cortex_a8 () -+{ -+ return false; -+} -+ -Index: gnuradio-core/src/lib/filter/gr_cpu_cortex_a8.cc -=================================================================== ---- gnuradio-core/src/lib/filter/gr_cpu_cortex_a8.cc (revision 0) -+++ gnuradio-core/src/lib/filter/gr_cpu_cortex_a8.cc (revision 0) -@@ -0,0 +1,59 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2002, 2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with GNU Radio; see the file COPYING. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#include <gr_cpu.h> -+ -+bool -+gr_cpu::has_mmx () -+{ -+ return false; -+} -+ -+bool -+gr_cpu::has_sse () -+{ -+ return false; -+} -+ -+bool -+gr_cpu::has_sse2 () -+{ -+ return false; -+} -+ -+bool -+gr_cpu::has_3dnow () -+{ -+ return false; -+} -+ -+bool -+gr_cpu::has_3dnowext () -+{ -+ return false; -+} -+ -+bool -+gr_cpu::has_cortex_a8 () -+{ -+ return true; -+} -Index: gnuradio-core/src/lib/filter/gr_fir_fff_cortex_a8.cc -=================================================================== ---- gnuradio-core/src/lib/filter/gr_fir_fff_cortex_a8.cc (revision 0) -+++ gnuradio-core/src/lib/filter/gr_fir_fff_cortex_a8.cc (revision 0) -@@ -0,0 +1,85 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+#include <gr_fir_fff_cortex_a8.h> -+#include <stdlib.h> -+#include <string.h> -+#include <stdexcept> -+#include <assert.h> -+#include <gr_math.h> -+#include <dotprod_fff_cortex_a8.h> -+ -+#define FLOATS_PER_VEC 8 -+ -+gr_fir_fff_cortex_a8::gr_fir_fff_cortex_a8() -+ : gr_fir_fff_generic(), -+ d_naligned_taps(0), d_aligned_taps(0) -+{ -+} -+ -+gr_fir_fff_cortex_a8::gr_fir_fff_cortex_a8 (const std::vector<float> &new_taps) -+ : gr_fir_fff_generic(new_taps), -+ d_naligned_taps(0), d_aligned_taps(0) -+{ -+ set_taps(new_taps); -+} -+ -+gr_fir_fff_cortex_a8::~gr_fir_fff_cortex_a8() -+{ -+ if (d_aligned_taps){ -+ free(d_aligned_taps); -+ d_aligned_taps = 0; -+ } -+} -+ -+void -+gr_fir_fff_cortex_a8::set_taps(const std::vector<float> &inew_taps) -+{ -+ gr_fir_fff_generic::set_taps(inew_taps); // call superclass -+ d_naligned_taps = gr_p2_round_up(ntaps(), FLOATS_PER_VEC); -+ -+ if (d_aligned_taps){ -+ free(d_aligned_taps); -+ d_aligned_taps = 0; -+ } -+ void *p; -+ int r = posix_memalign(&p, sizeof(float), d_naligned_taps * sizeof(d_aligned_taps[0])); -+ if (r != 0){ -+ throw std::bad_alloc(); -+ } -+ d_aligned_taps = (float *) p; -+ memcpy(d_aligned_taps, &d_taps[0], ntaps() * sizeof(d_aligned_taps[0])); -+ for (size_t i = ntaps(); i < d_naligned_taps; i++) -+ d_aligned_taps[i] = 0.0; -+} -+ -+ -+float -+gr_fir_fff_cortex_a8::filter (const float input[]) -+{ -+ if (d_naligned_taps == 0) -+ return 0.0; -+ -+ return dotprod_fff_cortex_a8(input, d_aligned_taps, d_naligned_taps); -+} -Index: gnuradio-core/src/lib/filter/qa_dotprod_cortex_a8.cc -=================================================================== ---- gnuradio-core/src/lib/filter/qa_dotprod_cortex_a8.cc (revision 0) -+++ gnuradio-core/src/lib/filter/qa_dotprod_cortex_a8.cc (revision 0) -@@ -0,0 +1,32 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2003 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with GNU Radio; see the file COPYING. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, -+ * Boston, MA 02110-1301, USA. -+ */ -+#include "qa_dotprod.h" -+ -+CppUnit::TestSuite * -+qa_dotprod_suite () -+{ -+ CppUnit::TestSuite *s = new CppUnit::TestSuite ("dotprod"); -+ -+ // empty test suite -+ -+ return s; -+} -Index: gnuradio-core/src/lib/filter/gr_fir_sysconfig_cortex_a8.h -=================================================================== ---- gnuradio-core/src/lib/filter/gr_fir_sysconfig_cortex_a8.h (revision 0) -+++ gnuradio-core/src/lib/filter/gr_fir_sysconfig_cortex_a8.h (revision 0) -@@ -0,0 +1,46 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2002,2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with GNU Radio; see the file COPYING. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, -+ * Boston, MA 02110-1301, USA. -+ */ -+#ifndef INCLUDED_GR_FIR_SYSCONFIG_CORTEX_A8_H -+#define INCLUDED_GR_FIR_SYSCONFIG_CORTEX_A8_H -+ -+#include <gr_fir_sysconfig_generic.h> -+ -+class gr_fir_sysconfig_cortex_a8 : public gr_fir_sysconfig_generic { -+public: -+ virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps); -+ virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps); -+ virtual gr_fir_fff *create_gr_fir_fff (const std::vector<float> &taps); -+ virtual gr_fir_fsf *create_gr_fir_fsf (const std::vector<float> &taps); -+ virtual gr_fir_scc *create_gr_fir_scc (const std::vector<gr_complex> &taps); -+ virtual gr_fir_ccc *create_gr_fir_ccc (const std::vector<gr_complex> &taps); -+//virtual gr_fir_sss *create_gr_fir_sss (const std::vector<short> &taps); -+ -+ virtual void get_gr_fir_ccf_info (std::vector<gr_fir_ccf_info> *info); -+ virtual void get_gr_fir_fcc_info (std::vector<gr_fir_fcc_info> *info); -+ virtual void get_gr_fir_fff_info (std::vector<gr_fir_fff_info> *info); -+ virtual void get_gr_fir_fsf_info (std::vector<gr_fir_fsf_info> *info); -+ virtual void get_gr_fir_scc_info (std::vector<gr_fir_scc_info> *info); -+ virtual void get_gr_fir_ccc_info (std::vector<gr_fir_ccc_info> *info); -+//virtual void get_gr_fir_sss_info (std::vector<gr_fir_sss_info> *info); -+}; -+ -+#endif -Index: gnuradio-core/src/lib/filter/sysconfig_cortex_a8.cc -=================================================================== ---- gnuradio-core/src/lib/filter/sysconfig_cortex_a8.cc (revision 0) -+++ gnuradio-core/src/lib/filter/sysconfig_cortex_a8.cc (revision 0) -@@ -0,0 +1,38 @@ -+/* -*- c++ -*- */ -+/* -+ * Copyright 2002,2008 Free Software Foundation, Inc. -+ * -+ * This file is part of GNU Radio -+ * -+ * GNU Radio is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 3, or (at your option) -+ * any later version. -+ * -+ * GNU Radio is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with GNU Radio; see the file COPYING. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+#include <gr_fir_sysconfig_cortex_a8.h> -+ -+gr_fir_sysconfig * -+gr_fir_sysconfig_singleton () -+{ -+ static gr_fir_sysconfig *singleton = 0; -+ -+ if (singleton) -+ return singleton; -+ -+ singleton = new gr_fir_sysconfig_cortex_a8 (); -+ return singleton; -+} -Index: config/gr_set_md_cpu.m4 -=================================================================== ---- config/gr_set_md_cpu.m4 (revision 9831) -+++ config/gr_set_md_cpu.m4 (working copy) -@@ -35,6 +35,7 @@ - case "$cf_with_md_cpu" in - x86 | i[[3-7]]86) MD_CPU=x86 MD_SUBCPU=x86 ;; - x86_64) MD_CPU=x86 MD_SUBCPU=x86_64 ;; -+ arm) MD_CPU=cortex_a8 ;; - powerpc*) MD_CPU=powerpc ;; - *) MD_CPU=generic ;; - esac -@@ -59,5 +60,6 @@ - AM_CONDITIONAL(MD_CPU_x86, test "$MD_CPU" = "x86") - AM_CONDITIONAL(MD_SUBCPU_x86_64, test "$MD_SUBCPU" = "x86_64") - AM_CONDITIONAL(MD_CPU_powerpc, test "$MD_CPU" = "powerpc") -+ AM_CONDITIONAL(MD_CPU_cortex_a8, test "$MD_CPU" = "cortex_a8") - AM_CONDITIONAL(MD_CPU_generic, test "$MD_CPU" = "generic") - ]) |