[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r9829 - in gnuradio/branches/developers/eb/gcell-wip:
From: |
eb |
Subject: |
[Commit-gnuradio] r9829 - in gnuradio/branches/developers/eb/gcell-wip: . config gcell/apps gcell/apps/spu gcell/include/gcell gcell/include/gcell/spu gcell/lib/general/spu gcell/lib/runtime gcell/lib/runtime/spu gcell/lib/spu gcell/lib/wrapper gcell/lib/wrapper/spu gr-gcell/src |
Date: |
Wed, 22 Oct 2008 14:14:31 -0600 (MDT) |
Author: eb
Date: 2008-10-22 14:14:29 -0600 (Wed, 22 Oct 2008)
New Revision: 9829
Added:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_aligned_alloc.h
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_job_manager.h
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gcp_fft_1d_r2.h
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d.h
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d_r2.h
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/gc_spu_macs.h
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/libfft.h
Removed:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/gc_spu_macs.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/libfft.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.h
Modified:
gnuradio/branches/developers/eb/gcell-wip/Makefile.common
gnuradio/branches/developers/eb/gcell-wip/config/grc_gcell.m4
gnuradio/branches/developers/eb/gcell-wip/config/grc_gr_gcell.m4
gnuradio/branches/developers/eb/gcell-wip/config/lf_warnings.m4
gnuradio/branches/developers/eb/gcell-wip/gcell/apps/Makefile.am
gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_dma.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_nop.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/apps/spu/benchmark_procs.c
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/Makefile.am
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/Makefile.am
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/memset.S
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/qa_memset.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/Makefile.am
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_queue.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_stack.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_queue.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_stack.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_job_manager.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_delay.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_logging.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_main.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_random.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_config.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_jd_queue.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gcell_runtime_qa.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/spu_buffers.c
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/spu/Makefile.am
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/Makefile.am
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcell_general.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.cc
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c
gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell.i
gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell_fft_vcc.cc
gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/qa_fft.py
Log:
Rearranged include hierarchy so that all non-private includes come out
of gcell/*.h or gcell/spu/*.h. Passes make check.
Modified: gnuradio/branches/developers/eb/gcell-wip/Makefile.common
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/Makefile.common 2008-10-22
18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/Makefile.common 2008-10-22
20:14:29 UTC (rev 9829)
@@ -101,7 +101,7 @@
GCELL_SPU_LA = @gcell_spu_LA@
# libtool aware wrapper for ppu-embedspu
-GCELL_EMBEDSPU_LIBTOOL =
@abs_top_srcdir@/gcell/src/lib/runtime/gcell-embedspu-libtool
+GCELL_EMBEDSPU_LIBTOOL =
@abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool
# This used to be set in configure.ac but is now defined here for all
# Makefiles when this fragment is included.
Modified: gnuradio/branches/developers/eb/gcell-wip/config/grc_gcell.m4
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/config/grc_gcell.m4
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/config/grc_gcell.m4
2008-10-22 20:14:29 UTC (rev 9829)
@@ -55,8 +55,7 @@
-I\${abs_top_srcdir}/gcell/lib/general \
-I\${abs_top_srcdir}/gcell/lib/wrapper"
gcell_LA="\${abs_top_builddir}/gcell/lib/libgcell.la"
- gcell_spu_INCLUDES="-I\${abs_top_srcdir}/gcell/include/spu \
- -I\${abs_top_srcdir}/gcell/include \
+ gcell_spu_INCLUDES="-I\${abs_top_srcdir}/gcell/include \
-I\${abs_top_srcdir}/gcell/lib/runtime/spu \
-I\${abs_top_srcdir}/gcell/lib/general/spu \
-I\${abs_top_srcdir}/gcell/lib/wrapper/spu"
@@ -64,16 +63,11 @@
AC_SUBST(gcell_spu_INCLUDES)
AC_SUBST(gcell_spu_LA)
- dnl kludge up initial swig dependency files
- AC_CONFIG_COMMANDS([swig_gcell_deps], [
- touch gr-gcell/src/gcell.d
- ])
fi
AC_CONFIG_FILES([ \
gcell/Makefile \
gcell/gcell.pc \
- gcell/Makefile \
gcell/include/Makefile \
gcell/include/gcell/Makefile \
gcell/include/gcell/spu/Makefile \
Modified: gnuradio/branches/developers/eb/gcell-wip/config/grc_gr_gcell.m4
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/config/grc_gr_gcell.m4
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/config/grc_gr_gcell.m4
2008-10-22 20:14:29 UTC (rev 9829)
@@ -31,6 +31,12 @@
gr-gcell/src/run_tests \
])
+ dnl kludge up initial swig dependency files
+ AC_CONFIG_COMMANDS([swig_gcell_deps], [
+ touch gr-gcell/src/gcell.d
+ ])
+
+
GRC_BUILD_CONDITIONAL(gr-gcell,[
dnl run_tests is created from run_tests.in. Make it executable.
AC_CONFIG_COMMANDS([run_tests_gcell], [chmod +x gr-gcell/src/run_tests])
Modified: gnuradio/branches/developers/eb/gcell-wip/config/lf_warnings.m4
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/config/lf_warnings.m4
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/config/lf_warnings.m4
2008-10-22 20:14:29 UTC (rev 9829)
@@ -115,7 +115,7 @@
dnl Warnings for the two main compilers
dnl add -Wextra when you're got time to fix a bunch of them ;-)
- cc_warning_flags="-Wall $lf_warnings_as_errors"
+ cc_warning_flags="-Wall -Werror-implicit-function-declaration
$lf_warnings_as_errors"
cxx_warning_flags="-Wall -Woverloaded-virtual $lf_warnings_as_errors"
if test -n "${CC}"
then
Modified: gnuradio/branches/developers/eb/gcell-wip/gcell/apps/Makefile.am
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/apps/Makefile.am
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/apps/Makefile.am
2008-10-22 20:14:29 UTC (rev 9829)
@@ -26,7 +26,7 @@
$(GCELL_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES)
-GCELL_QA_LA = $(top_builddir)/gcell/src/lib/libgcell-qa.la
+GCELL_QA_LA = $(top_builddir)/gcell/lib/libgcell-qa.la
TESTS = test_all
Modified: gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_dma.cc
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_dma.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_dma.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -22,7 +22,7 @@
#if defined(HAVE_CONFIG_H)
#include <config.h>
#endif
-#include "gc_job_manager.h"
+#include <gcell/gc_job_manager.h>
#include <omni_time.h>
#include <getopt.h>
#include <stdlib.h>
Modified: gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_nop.cc
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_nop.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/apps/benchmark_nop.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -22,7 +22,7 @@
#if defined(HAVE_CONFIG_H)
#include <config.h>
#endif
-#include "gc_job_manager.h"
+#include <gcell/gc_job_manager.h>
#include <omni_time.h>
#include <getopt.h>
#include <stdlib.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/apps/spu/benchmark_procs.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/apps/spu/benchmark_procs.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/apps/spu/benchmark_procs.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_delay.h>
-#include <gc_declare_proc.h>
+#include <gcell/gc_declare_proc.h>
+#include <gcell/spu/gc_delay.h>
#include <string.h>
static void
Property changes on:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell
___________________________________________________________________
Name: svn:ignore
+ Makefile
Makefile.in
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/Makefile.am
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/Makefile.am
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/Makefile.am
2008-10-22 20:14:29 UTC (rev 9829)
@@ -24,9 +24,11 @@
gcellinclude_HEADERS = \
compiler.h \
+ gc_aligned_alloc.h \
gc_atomic.h \
gc_cdefs.h \
gc_declare_proc.h \
+ gc_job_manager.h \
gc_jd_queue_data.h \
gc_jd_queue.h \
gc_jd_stack.h \
@@ -36,4 +38,5 @@
gc_mbox.h \
gc_spu_args.h \
gc_types.h \
+ gcp_fft_1d_r2.h \
memory_barrier.h
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_aligned_alloc.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.h)
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_aligned_alloc.h
(rev 0)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_aligned_alloc.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,52 @@
+/* -*- 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_GC_ALIGNED_ALLOC_H
+#define INCLUDED_GC_ALIGNED_ALLOC_H
+
+#include <boost/shared_ptr.hpp>
+
+/*!
+ * \brief Return pointer to chunk of storage of size size bytes.
+ * The allocation will be aligned to an \p alignment boundary.
+ *
+ * \param size is the number of bytes to allocate
+ * \param alignment is the minimum storage alignment in bytes; must be a power
of 2.
+ *
+ * Throws if can't allocate memory. The storage should be freed
+ * with "free" when done. The memory is initialized to zero.
+ */
+void *
+gc_aligned_alloc(size_t size, size_t alignment = 128);
+
+/*!
+ * \brief Return boost::shared_ptr to chunk of storage of size size bytes.
+ * The allocation will be aligned to an \p alignment boundary.
+ *
+ * \param size is the number of bytes to allocate
+ * \param alignment is the minimum storage alignment in bytes; must be a power
of 2.
+ *
+ * Throws if can't allocate memory. The storage should be freed
+ * with "free" when done. The memory is initialized to zero.
+ */
+boost::shared_ptr<void>
+gc_aligned_alloc_sptr(size_t size, size_t alignment = 128);
+
+#endif /* INCLUDED_GC_ALIGNED_ALLOC_H */
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_job_manager.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.h)
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_job_manager.h
(rev 0)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gc_job_manager.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,286 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007,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_GC_JOB_MANAGER_H
+#define INCLUDED_GC_JOB_MANAGER_H
+
+#include <boost/utility.hpp>
+#include <boost/shared_ptr.hpp>
+#include <vector>
+#include <string>
+#include <stdexcept>
+#include <libspe2.h>
+#include "gc_job_desc.h"
+
+class gc_job_manager;
+typedef boost::shared_ptr<gc_job_manager> gc_job_manager_sptr;
+typedef boost::shared_ptr<spe_program_handle_t> spe_program_handle_sptr;
+typedef boost::shared_ptr<gc_job_desc> gc_job_desc_sptr;
+
+/*!
+ * \brief Return a boost::shared_ptr to an spe_program_handle_t
+ *
+ * \param filename is the name of the SPE ELF executable to open.
+ *
+ * Calls spe_image_open to open the file. If successful returns a
+ * boost::shared_ptr that will call spe_image_close when it's time to
+ * free the object.
+ *
+ * Returns the equivalent of the NULL pointer if the file cannot be
+ * opened, or if it's not an SPE ELF object file.
+ *
+ * \sa gc_program_handle_from_address
+ */
+spe_program_handle_sptr
+gc_program_handle_from_filename(const std::string &filename);
+
+/*!
+ * \brief Return a boost::shared_ptr to an spe_program_handle_t
+ *
+ * \param handle is a non-zero pointer to an embedded SPE image.
+ *
+ * If successful returns a boost::shared_ptr that does nothing when
+ * it's time to free the object.
+ *
+ * \sa gc_program_handle_from_filename
+ */
+spe_program_handle_sptr
+gc_program_handle_from_address(spe_program_handle_t *handle);
+
+/*!
+ * \brief map gc_job_status_t into a string
+ */
+const std::string
+gc_job_status_string(gc_job_status_t status);
+
+/*
+ * \brief Options that configure the job_manager.
+ * The default values are reasonable.
+ */
+struct gc_jm_options {
+ unsigned int max_jobs; // max # of job descriptors in system
+ unsigned int max_client_threads; // max # of client threads of job manager
+ unsigned int nspes; // how many SPEs shall we use? 0 -> all of
them
+ bool gang_schedule; // shall we gang schedule?
+ bool use_affinity; // shall we try for affinity (FIXME not
implmented)
+ bool enable_logging; // shall we log SPE events?
+ uint32_t log2_nlog_entries; // log2 of number of log entries
(default is 12 == 4k)
+ spe_program_handle_sptr program_handle; // program to load into SPEs
+
+ gc_jm_options() :
+ max_jobs(0), max_client_threads(0), nspes(0),
+ gang_schedule(false), use_affinity(false),
+ enable_logging(false), log2_nlog_entries(12)
+ {
+ }
+
+ gc_jm_options(spe_program_handle_sptr program_handle_,
+ unsigned int nspes_ = 0) :
+ max_jobs(0), max_client_threads(0), nspes(nspes_),
+ gang_schedule(false), use_affinity(false),
+ enable_logging(false), log2_nlog_entries(12),
+ program_handle(program_handle_)
+ {
+ }
+};
+
+enum gc_wait_mode {
+ GC_WAIT_ANY,
+ GC_WAIT_ALL,
+};
+
+/*
+ * exception classes
+ */
+class gc_exception : public std::runtime_error
+{
+public:
+ gc_exception(const std::string &msg);
+};
+
+class gc_unknown_proc : public gc_exception
+{
+public:
+ gc_unknown_proc(const std::string &msg);
+};
+
+class gc_bad_alloc : public gc_exception
+{
+public:
+ gc_bad_alloc(const std::string &msg);
+};
+
+class gc_bad_align : public gc_exception
+{
+public:
+ gc_bad_align(const std::string &msg);
+};
+
+class gc_bad_submit : public gc_exception
+{
+public:
+ gc_bad_submit(const std::string &name, gc_job_status_t status);
+};
+
+/*
+ * \brief Create an instance of the job manager
+ */
+gc_job_manager_sptr
+gc_make_job_manager(const gc_jm_options *options = 0);
+
+
+/*!
+ * \brief Abstract class that manages SPE jobs.
+ *
+ * There is typically a single instance derived from this class.
+ * It is safe to call its methods from any thread.
+ */
+class gc_job_manager : boost::noncopyable
+{
+public:
+ gc_job_manager(const gc_jm_options *options = 0);
+
+ virtual ~gc_job_manager();
+
+ /*!
+ * Stop accepting new jobs. Wait for existing jobs to complete.
+ * Return all managed SPE's to the system.
+ */
+ virtual bool shutdown() = 0;
+
+ /*!
+ * \brief Return number of SPE's currently allocated to job manager.
+ */
+ virtual int nspes() const = 0;
+
+ /*!
+ * \brief Return a pointer to a properly aligned job descriptor,
+ * or throws gc_bad_alloc if there are none available.
+ */
+ virtual gc_job_desc *alloc_job_desc() = 0;
+
+ /*
+ *! Free a job descriptor previously allocated with alloc_job_desc()
+ *
+ * \param[in] jd pointer to job descriptor to free.
+ */
+ virtual void free_job_desc(gc_job_desc *jd) = 0;
+
+ /*!
+ * \brief Submit a job for asynchronous processing on an SPE.
+ *
+ * \param[in] jd pointer to job description
+ *
+ * The caller must not read or write the job description
+ * or any of the memory associated with any indirect arguments
+ * until after calling wait_job.
+ *
+ * \returns true iff the job was successfully enqueued.
+ * If submit_job returns false, check jd->status for additional info.
+ */
+ virtual bool submit_job(gc_job_desc *jd) = 0;
+
+ /*!
+ * \brief Wait for job to complete.
+ *
+ * A thread may only wait for jobs which it submitted.
+ *
+ * \returns true if sucessful, else false.
+ */
+ virtual bool
+ wait_job(gc_job_desc *jd) = 0;
+
+ /*!
+ * \brief wait for 1 or more jobs to complete.
+ *
+ * \param[input] njobs is the length of arrays \p jd and \p done.
+ * \param[input] jd are the jobs that are to be waited for.
+ * \param[output] done indicates whether the corresponding job is complete.
+ * \param[input] mode indicates whether to wait for ALL or ANY of the jobs
+ * in \p jd to complete.
+ *
+ * A thread may only wait for jobs which it submitted.
+ *
+ * \returns number of jobs completed, or -1 if error.
+ * The caller must examine the status field of each job to confirm
+ * successful completion of the job.
+ */
+ virtual int
+ wait_jobs(unsigned int njobs,
+ gc_job_desc *jd[], bool done[], gc_wait_mode mode) = 0;
+
+ /*!
+ * Return the maximum number of bytes of EA arguments that may be
+ * copied to or from the SPE in a single job. The limit applies
+ * independently to the "get" and "put" args.
+ * \sa gc_job_desc_t, gc_job_ea_args_t
+ */
+ virtual int ea_args_maxsize() = 0;
+
+ /*!
+ * Return gc_proc_id_t associated with spu procedure \p proc_name if one
+ * exists, otherwise throws gc_unknown_proc.
+ */
+ virtual gc_proc_id_t lookup_proc(const std::string &proc_name) = 0;
+
+ /*!
+ * Return a vector of all known spu procedure names.
+ */
+ virtual std::vector<std::string> proc_names() = 0;
+
+ virtual void set_debug(int debug);
+ virtual int debug();
+
+ /* ----- static methods ----- */
+
+ /*!
+ * \brief Set the singleton gc_job_manager instance.
+ * \param mgr is the job manager instance.
+ *
+ * The singleton is weakly held, thus the caller must maintain
+ * a reference to the mgr for the duration. (If we held the
+ * manager strongly, the destructor would never be called, and the
+ * resources (SPEs) would not be returned.) Bottom line: the
+ * caller is responsible for life-time management.
+ */
+ static void set_singleton(gc_job_manager_sptr mgr);
+
+ /*!
+ * \brief Retrieve the singleton gc_job_manager instance.
+ *
+ * Returns the singleton gc_job_manager instance or raises
+ * boost::bad_weak_ptr if the singleton is empty.
+ */
+ static gc_job_manager_sptr singleton();
+
+ /*!
+ * \brief return a boost::shared_ptr to a job descriptor.
+ */
+ static gc_job_desc_sptr make_jd_sptr(gc_job_manager_sptr mgr, gc_job_desc
*jd);
+
+ /*!
+ * \brief allocate a job descriptor and return a boost::shared_ptr to it.
+ */
+ static gc_job_desc_sptr alloc_job_desc(gc_job_manager_sptr mgr);
+};
+
+
+#endif /* INCLUDED_GC_JOB_MANAGER_H */
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gcp_fft_1d_r2.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.h)
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gcp_fft_1d_r2.h
(rev 0)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/gcp_fft_1d_r2.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,64 @@
+/* -*- 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_GCP_FFT_1D_R2_H
+#define INCLUDED_GCP_FFT_1D_R2_H
+
+#include <gcell/gc_job_manager.h>
+#include <complex>
+
+/*!
+ * \brief Submit a job that computes the forward or inverse FFT.
+ *
+ * \param mgr is the job manager instance
+ * \param log2_fft_length is the log2 of the fft_length (4 <= x <= 12).
+ * \param forward is true to compute the forward transform, else the inverse.
+ * \param shift indicates if an "fftshift" should be applied to the output data
+ * \param out is the fft_length output from FFT (must be 16-byte aligned).
+ * \param in is the fft_length input to FFT (must be 16-byte aligned).
+ * \param twiddle is fft_length/4 twiddle factor input to FFT (must be 16-byte
aligned).
+ * \param window is the window to be applied to the input data.
+ * The window length must be either 0 or fft_length (must be 16-byte
aligned).
+ *
+ * Returns a shared_ptr to a job descriptor which should be passed to
wait_job*.
+ * Throws an exception in the event of a problem.
+ * This uses the FFTW conventions for scaling. That is, neither the forward
nor inverse
+ * are scaled by 1/fft_length.
+ */
+gc_job_desc_sptr
+gcp_fft_1d_r2_submit(gc_job_manager_sptr mgr,
+ unsigned int log2_fft_length,
+ bool forward,
+ bool shift,
+ std::complex<float> *out,
+ const std::complex<float> *in,
+ const std::complex<float> *twiddle,
+ const float *window);
+
+/*!
+ * \brief Compute twiddle factors
+ *
+ * \param log2_fft_length is the log2 of the fft_length.
+ * \param W is fft_length/4 twiddle factor output (must be 16-byte aligned).
+ */
+void
+gcp_fft_1d_r2_twiddle(unsigned int log2_fft_length, std::complex<float> *W);
+
+#endif /* INCLUDED_GCP_FFT_1D_R2_H */
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/Makefile.am
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/Makefile.am
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/Makefile.am
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,6 +21,9 @@
include $(top_srcdir)/Makefile.common
gcellspuinclude_HEADERS = \
+ fft_1d.h \
+ fft_1d_r2.h \
gc_delay.h \
gc_jd_queue.h \
- gc_random.h
+ gc_random.h \
+ libfft.h
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d.h)
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d.h
(rev 0)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,103 @@
+/* -------------------------------------------------------------- */
+/* (C)Copyright 2001,2007, */
+/* International Business Machines Corporation, */
+/* Sony Computer Entertainment, Incorporated, */
+/* Toshiba Corporation, */
+/* */
+/* All Rights Reserved. */
+/* */
+/* Redistribution and use in source and binary forms, with or */
+/* without modification, are permitted provided that the */
+/* following conditions are met: */
+/* */
+/* - Redistributions of source code must retain the above copyright*/
+/* notice, this list of conditions and the following disclaimer. */
+/* */
+/* - Redistributions in binary form must reproduce the above */
+/* copyright notice, this list of conditions and the following */
+/* disclaimer in the documentation and/or other materials */
+/* provided with the distribution. */
+/* */
+/* - Neither the name of IBM Corporation nor the names of its */
+/* contributors may be used to endorse or promote products */
+/* derived from this software without specific prior written */
+/* permission. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */
+/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */
+/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
+/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
+/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
+/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */
+/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */
+/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */
+/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */
+/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */
+/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
+/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+/* -------------------------------------------------------------- */
+/* PROLOG END TAG zYx */
+#ifndef _FFT_1D_H_
+#define _FFT_1D_H_ 1
+
+#include <spu_intrinsics.h>
+
+/* BIT_SWAP - swaps up to 16 bits of the integer _i according to the
+ * pattern specified by _pat.
+ */
+#define BIT_SWAP(_i, _pat)
spu_extract(spu_gather(spu_shuffle(spu_maskb(_i), _pat, _pat)), 0)
+
+
+#ifndef MAX_FFT_1D_SIZE
+#define MAX_FFT_1D_SIZE 8192
+#endif
+
+#ifndef INV_SQRT_2
+#define INV_SQRT_2 0.7071067811865
+#endif
+
+
+/* The following macro, FFT_1D_BUTTERFLY, performs a 4 way SIMD basic
butterfly
+ * operation. The inputs are in parallel arrays (seperate real and imaginary
+ * vectors).
+ *
+ * p --------------------------> P = p + q*Wi
+ * \ /
+ * \ /
+ * \ /
+ * \/
+ * /\
+ * / \
+ * / \
+ * ____ / \
+ * q --| Wi |-----------------> Q = p - q*Wi
+ * ----
+ */
+
+#define FFT_1D_BUTTERFLY(_P_re, _P_im, _Q_re, _Q_im, _p_re, _p_im, _q_re,
_q_im, _W_re, _W_im) { \
+ vector float _qw_re, _qw_im;
\
+
\
+ _qw_re = spu_msub(_q_re, _W_re, spu_mul(_q_im, _W_im));
\
+ _qw_im = spu_madd(_q_re, _W_im, spu_mul(_q_im, _W_re));
\
+ _P_re = spu_add(_p_re, _qw_re);
\
+ _P_im = spu_add(_p_im, _qw_im);
\
+ _Q_re = spu_sub(_p_re, _qw_re);
\
+ _Q_im = spu_sub(_p_im, _qw_im);
\
+}
+
+
+/* FFT_1D_BUTTERFLY_HI is equivalent to FFT_1D_BUTTERFLY with twiddle factors
(W_im, -W_re)
+ */
+#define FFT_1D_BUTTERFLY_HI(_P_re, _P_im, _Q_re, _Q_im, _p_re, _p_im, _q_re,
_q_im, _W_re, _W_im) { \
+ vector float _qw_re, _qw_im;
\
+
\
+ _qw_re = spu_madd(_q_re, _W_im, spu_mul(_q_im, _W_re));
\
+ _qw_im = spu_msub(_q_im, _W_im, spu_mul(_q_re, _W_re));
\
+ _P_re = spu_add(_p_re, _qw_re);
\
+ _P_im = spu_add(_p_im, _qw_im);
\
+ _Q_re = spu_sub(_p_re, _qw_re);
\
+ _Q_im = spu_sub(_p_im, _qw_im);
\
+}
+
+#endif /* _FFT_1D_H_ */
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d_r2.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.h)
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d_r2.h
(rev 0)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/fft_1d_r2.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,529 @@
+/* -------------------------------------------------------------- */
+/* (C)Copyright 2001,2007, */
+/* International Business Machines Corporation, */
+/* Sony Computer Entertainment, Incorporated, */
+/* Toshiba Corporation, */
+/* */
+/* All Rights Reserved. */
+/* */
+/* Redistribution and use in source and binary forms, with or */
+/* without modification, are permitted provided that the */
+/* following conditions are met: */
+/* */
+/* - Redistributions of source code must retain the above copyright*/
+/* notice, this list of conditions and the following disclaimer. */
+/* */
+/* - Redistributions in binary form must reproduce the above */
+/* copyright notice, this list of conditions and the following */
+/* disclaimer in the documentation and/or other materials */
+/* provided with the distribution. */
+/* */
+/* - Neither the name of IBM Corporation nor the names of its */
+/* contributors may be used to endorse or promote products */
+/* derived from this software without specific prior written */
+/* permission. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */
+/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */
+/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
+/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
+/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
+/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */
+/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */
+/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */
+/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */
+/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */
+/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
+/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+/* -------------------------------------------------------------- */
+/* PROLOG END TAG zYx */
+#ifndef _FFT_1D_R2_H_
+#define _FFT_1D_R2_H_ 1
+
+#include "fft_1d.h"
+
+/* fft_1d_r2
+ * ---------
+ * Performs a single precision, complex Fast Fourier Transform using
+ * the DFT (Discrete Fourier Transform) with radix-2 decimation in time.
+ * The input <in> is an array of complex numbers of length (1<<log2_size)
+ * entries. The result is returned in the array of complex numbers specified
+ * by <out>. Note: This routine can support an in-place transformation
+ * by specifying <in> and <out> to be the same array.
+ *
+ * This implementation utilizes the Cooley-Tukey algorithm consisting
+ * of <log2_size> stages. The basic operation is the butterfly.
+ *
+ * p --------------------------> P = p + q*Wi
+ * \ /
+ * \ /
+ * \ /
+ * \/
+ * /\
+ * / \
+ * / \
+ * ____ / \
+ * q --| Wi |-----------------> Q = p - q*Wi
+ * ----
+ *
+ * This routine also requires pre-computed twiddle values, W. W is an
+ * array of single precision complex numbers of length 1<<(log2_size-2)
+ * and is computed as follows:
+ *
+ * for (i=0; i<n/4; i++)
+ * W[i].real = cos(i * 2*PI/n);
+ * W[i].imag = -sin(i * 2*PI/n);
+ * }
+ *
+ * This array actually only contains the first half of the twiddle
+ * factors. Due for symmetry, the second half of the twiddle factors
+ * are implied and equal:
+ *
+ * for (i=0; i<n/4; i++)
+ * W[i+n/4].real = W[i].imag = sin(i * 2*PI/n);
+ * W[i+n/4].imag = -W[i].real = -cos(i * 2*PI/n);
+ * }
+ *
+ * Further symmetry allows one to generate the twiddle factor table
+ * using half the number of trig computations as follows:
+ *
+ * W[0].real = 1.0;
+ * W[0].imag = 0.0;
+ * for (i=1; i<n/4; i++)
+ * W[i].real = cos(i * 2*PI/n);
+ * W[n/4 - i].imag = -W[i].real;
+ * }
+ *
+ * The complex numbers are packed into quadwords as follows:
+ *
+ * quadword complex
+ * array element array elements
+ * -----------------------------------------------------
+ * i | real 2*i | imag 2*i | real 2*i+1 | imag 2*i+1 |
+ * -----------------------------------------------------
+ *
+ */
+
+
+static __inline void _fft_1d_r2(vector float *out, vector float *in, vector
float *W, int log2_size)
+{
+ int i, j, k;
+ int stage, offset;
+ int i_rev;
+ int n, n_2, n_4, n_8, n_16, n_3_16;
+ int w_stride, w_2stride, w_3stride, w_4stride;
+ int stride, stride_2, stride_4, stride_3_4;
+ vector float *W0, *W1, *W2, *W3;
+ vector float *re0, *re1, *re2, *re3;
+ vector float *im0, *im1, *im2, *im3;
+ vector float *in0, *in1, *in2, *in3, *in4, *in5, *in6, *in7;
+ vector float *out0, *out1, *out2, *out3;
+ vector float tmp0, tmp1;
+ vector float w0_re, w0_im, w1_re, w1_im;
+ vector float w0, w1, w2, w3;
+ vector float src_lo0, src_lo1, src_lo2, src_lo3;
+ vector float src_hi0, src_hi1, src_hi2, src_hi3;
+ vector float dst_lo0, dst_lo1, dst_lo2, dst_lo3;
+ vector float dst_hi0, dst_hi1, dst_hi2, dst_hi3;
+ vector float out_re_lo0, out_re_lo1, out_re_lo2, out_re_lo3;
+ vector float out_im_lo0, out_im_lo1, out_im_lo2, out_im_lo3;
+ vector float out_re_hi0, out_re_hi1, out_re_hi2, out_re_hi3;
+ vector float out_im_hi0, out_im_hi1, out_im_hi2, out_im_hi3;
+ vector float re_lo0, re_lo1, re_lo2, re_lo3;
+ vector float im_lo0, im_lo1, im_lo2, im_lo3;
+ vector float re_hi0, re_hi1, re_hi2, re_hi3;
+ vector float im_hi0, im_hi1, im_hi2, im_hi3;
+ vector float pq_lo0, pq_lo1, pq_lo2, pq_lo3;
+ vector float pq_hi0, pq_hi1, pq_hi2, pq_hi3;
+ vector float re[MAX_FFT_1D_SIZE/4], im[MAX_FFT_1D_SIZE/4]; /* real &
imaginary working arrays */
+ vector float ppmm = (vector float) { 1.0f, 1.0f, -1.0f, -1.0f};
+ vector float pmmp = (vector float) { 1.0f, -1.0f, -1.0f, 1.0f};
+ vector unsigned char reverse;
+ vector unsigned char shuf_lo = (vector unsigned char) {
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 16,17,18,19, 20,21,22,23};
+ vector unsigned char shuf_hi = (vector unsigned char) {
+ 8, 9,10,11, 12,13,14,15,
+ 24,25,26,27, 28,29,30,31};
+ vector unsigned char shuf_0202 = (vector unsigned char) {
+ 0, 1, 2, 3, 8, 9,10,11,
+ 0, 1, 2, 3, 8, 9,10,11};
+ vector unsigned char shuf_1313 = (vector unsigned char) {
+ 4, 5, 6, 7, 12,13,14,15,
+ 4, 5, 6, 7, 12,13,14,15};
+ vector unsigned char shuf_0303 = (vector unsigned char) {
+ 0, 1, 2, 3, 12,13,14,15,
+ 0, 1, 2, 3, 12,13,14,15};
+ vector unsigned char shuf_1212 = (vector unsigned char) {
+ 4, 5, 6, 7, 8, 9,10,11,
+ 4, 5, 6, 7, 8, 9,10,11};
+ vector unsigned char shuf_0415 = (vector unsigned char) {
+ 0, 1, 2, 3, 16,17,18,19,
+ 4, 5, 6, 7, 20,21,22,23};
+ vector unsigned char shuf_2637 = (vector unsigned char) {
+ 8, 9,10,11, 24,25,26,27,
+ 12,13,14,15,28,29,30,31};
+ vector unsigned char shuf_0246 = (vector unsigned char) {
+ 0, 1, 2, 3, 8, 9,10,11,
+ 16,17,18,19,24,25,26,27};
+ vector unsigned char shuf_1357 = (vector unsigned char) {
+ 4, 5, 6, 7, 12,13,14,15,
+ 20,21,22,23,28,29,30,31};
+
+ n = 1 << log2_size;
+ n_2 = n >> 1;
+ n_4 = n >> 2;
+ n_8 = n >> 3;
+ n_16 = n >> 4;
+
+ n_3_16 = n_8 + n_16;
+
+ /* Compute a byte reverse shuffle pattern to be used to produce
+ * an address bit swap.
+ */
+ reverse = spu_or(spu_slqwbyte(spu_splats((unsigned char)0x80), log2_size),
+ spu_rlmaskqwbyte(((vec_uchar16){15,14,13,12, 11,10,9,8,
+ 7, 6, 5, 4, 3, 2,1,0}),
+ log2_size-16));
+
+ /* Perform the first 3 stages of the FFT. These stages differs from
+ * other stages in that the inputs are unscrambled and the data is
+ * reformated into parallel arrays (ie, seperate real and imaginary
+ * arrays). The term "unscramble" means the bit address reverse the
+ * data array. In addition, the first three stages have simple twiddle
+ * weighting factors.
+ * stage 1: (1, 0)
+ * stage 2: (1, 0) and (0, -1)
+ * stage 3: (1, 0), (0.707, -0.707), (0, -1), (-0.707, -0.707)
+ *
+ * The arrays are processed as two halves, simultaneously. The lo (first
+ * half) and hi (second half). This is done because the scramble
+ * shares source value between each half of the output arrays.
+ */
+ i = 0;
+ i_rev = 0;
+
+ in0 = in;
+ in1 = in + n_8;
+ in2 = in + n_16;
+ in3 = in + n_3_16;
+
+ in4 = in + n_4;
+ in5 = in1 + n_4;
+ in6 = in2 + n_4;
+ in7 = in3 + n_4;
+
+ re0 = re;
+ re1 = re + n_8;
+ im0 = im;
+ im1 = im + n_8;
+
+ w0_re = (vector float) { 1.0f, INV_SQRT_2, 0.0f, -INV_SQRT_2};
+ w0_im = (vector float) { 0.0f, -INV_SQRT_2, -1.0f, -INV_SQRT_2};
+
+ do {
+ src_lo0 = in0[i_rev];
+ src_lo1 = in1[i_rev];
+ src_lo2 = in2[i_rev];
+ src_lo3 = in3[i_rev];
+
+ src_hi0 = in4[i_rev];
+ src_hi1 = in5[i_rev];
+ src_hi2 = in6[i_rev];
+ src_hi3 = in7[i_rev];
+
+ /* Perform scramble.
+ */
+ dst_lo0 = spu_shuffle(src_lo0, src_hi0, shuf_lo);
+ dst_hi0 = spu_shuffle(src_lo0, src_hi0, shuf_hi);
+ dst_lo1 = spu_shuffle(src_lo1, src_hi1, shuf_lo);
+ dst_hi1 = spu_shuffle(src_lo1, src_hi1, shuf_hi);
+ dst_lo2 = spu_shuffle(src_lo2, src_hi2, shuf_lo);
+ dst_hi2 = spu_shuffle(src_lo2, src_hi2, shuf_hi);
+ dst_lo3 = spu_shuffle(src_lo3, src_hi3, shuf_lo);
+ dst_hi3 = spu_shuffle(src_lo3, src_hi3, shuf_hi);
+
+ /* Perform the stage 1 butterfly. The multiplier constant, ppmm,
+ * is used to control the sign of the operands since a single
+ * quadword contains both of P and Q valule of the butterfly.
+ */
+ pq_lo0 = spu_madd(ppmm, dst_lo0, spu_rlqwbyte(dst_lo0, 8));
+ pq_hi0 = spu_madd(ppmm, dst_hi0, spu_rlqwbyte(dst_hi0, 8));
+ pq_lo1 = spu_madd(ppmm, dst_lo1, spu_rlqwbyte(dst_lo1, 8));
+ pq_hi1 = spu_madd(ppmm, dst_hi1, spu_rlqwbyte(dst_hi1, 8));
+ pq_lo2 = spu_madd(ppmm, dst_lo2, spu_rlqwbyte(dst_lo2, 8));
+ pq_hi2 = spu_madd(ppmm, dst_hi2, spu_rlqwbyte(dst_hi2, 8));
+ pq_lo3 = spu_madd(ppmm, dst_lo3, spu_rlqwbyte(dst_lo3, 8));
+ pq_hi3 = spu_madd(ppmm, dst_hi3, spu_rlqwbyte(dst_hi3, 8));
+
+ /* Perfrom the stage 2 butterfly. For this stage, the
+ * inputs pq are still interleaved (p.real, p.imag, q.real,
+ * q.imag), so we must first re-order the data into
+ * parallel arrays as well as perform the reorder
+ * associated with the twiddle W[n/4], which equals
+ * (0, -1).
+ *
+ * ie. (A, B) * (0, -1) => (B, -A)
+ */
+ re_lo0 = spu_madd(ppmm,
+ spu_shuffle(pq_lo1, pq_lo1, shuf_0303),
+ spu_shuffle(pq_lo0, pq_lo0, shuf_0202));
+ im_lo0 = spu_madd(pmmp,
+ spu_shuffle(pq_lo1, pq_lo1, shuf_1212),
+ spu_shuffle(pq_lo0, pq_lo0, shuf_1313));
+
+ re_lo1 = spu_madd(ppmm,
+ spu_shuffle(pq_lo3, pq_lo3, shuf_0303),
+ spu_shuffle(pq_lo2, pq_lo2, shuf_0202));
+ im_lo1 = spu_madd(pmmp,
+ spu_shuffle(pq_lo3, pq_lo3, shuf_1212),
+ spu_shuffle(pq_lo2, pq_lo2, shuf_1313));
+
+
+ re_hi0 = spu_madd(ppmm,
+ spu_shuffle(pq_hi1, pq_hi1, shuf_0303),
+ spu_shuffle(pq_hi0, pq_hi0, shuf_0202));
+ im_hi0 = spu_madd(pmmp,
+ spu_shuffle(pq_hi1, pq_hi1, shuf_1212),
+ spu_shuffle(pq_hi0, pq_hi0, shuf_1313));
+
+ re_hi1 = spu_madd(ppmm,
+ spu_shuffle(pq_hi3, pq_hi3, shuf_0303),
+ spu_shuffle(pq_hi2, pq_hi2, shuf_0202));
+ im_hi1 = spu_madd(pmmp,
+ spu_shuffle(pq_hi3, pq_hi3, shuf_1212),
+ spu_shuffle(pq_hi2, pq_hi2, shuf_1313));
+
+
+ /* Perform stage 3 butterfly.
+ */
+ FFT_1D_BUTTERFLY(re0[0], im0[0], re0[1], im0[1], re_lo0, im_lo0, re_lo1,
im_lo1, w0_re, w0_im);
+ FFT_1D_BUTTERFLY(re1[0], im1[0], re1[1], im1[1], re_hi0, im_hi0, re_hi1,
im_hi1, w0_re, w0_im);
+
+ re0 += 2;
+ re1 += 2;
+ im0 += 2;
+ im1 += 2;
+
+ i += 8;
+ i_rev = BIT_SWAP(i, reverse) / 2;
+ } while (i < n_2);
+
+ /* Process stages 4 to log2_size-2
+ */
+ for (stage=4, stride=4; stage<log2_size-1; stage++, stride += stride) {
+ w_stride = n_2 >> stage;
+ w_2stride = n >> stage;
+ w_3stride = w_stride + w_2stride;
+ w_4stride = w_2stride + w_2stride;
+
+ W0 = W;
+ W1 = W + w_stride;
+ W2 = W + w_2stride;
+ W3 = W + w_3stride;
+
+ stride_2 = stride >> 1;
+ stride_4 = stride >> 2;
+ stride_3_4 = stride_2 + stride_4;
+
+ re0 = re; im0 = im;
+ re1 = re + stride_2; im1 = im + stride_2;
+ re2 = re + stride_4; im2 = im + stride_4;
+ re3 = re + stride_3_4; im3 = im + stride_3_4;
+
+ for (i=0, offset=0; i<stride_4; i++, offset += w_4stride) {
+ /* Compute the twiddle factors
+ */
+ w0 = W0[offset];
+ w1 = W1[offset];
+ w2 = W2[offset];
+ w3 = W3[offset];
+
+ tmp0 = spu_shuffle(w0, w2, shuf_0415);
+ tmp1 = spu_shuffle(w1, w3, shuf_0415);
+
+ w0_re = spu_shuffle(tmp0, tmp1, shuf_0415);
+ w0_im = spu_shuffle(tmp0, tmp1, shuf_2637);
+
+ j = i;
+ k = i + stride;
+ do {
+ re_lo0 = re0[j]; im_lo0 = im0[j];
+ re_lo1 = re1[j]; im_lo1 = im1[j];
+
+ re_hi0 = re2[j]; im_hi0 = im2[j];
+ re_hi1 = re3[j]; im_hi1 = im3[j];
+
+ re_lo2 = re0[k]; im_lo2 = im0[k];
+ re_lo3 = re1[k]; im_lo3 = im1[k];
+
+ re_hi2 = re2[k]; im_hi2 = im2[k];
+ re_hi3 = re3[k]; im_hi3 = im3[k];
+
+ FFT_1D_BUTTERFLY (re0[j], im0[j], re1[j], im1[j], re_lo0, im_lo0,
re_lo1, im_lo1, w0_re, w0_im);
+ FFT_1D_BUTTERFLY_HI(re2[j], im2[j], re3[j], im3[j], re_hi0, im_hi0,
re_hi1, im_hi1, w0_re, w0_im);
+
+ FFT_1D_BUTTERFLY (re0[k], im0[k], re1[k], im1[k], re_lo2, im_lo2,
re_lo3, im_lo3, w0_re, w0_im);
+ FFT_1D_BUTTERFLY_HI(re2[k], im2[k], re3[k], im3[k], re_hi2, im_hi2,
re_hi3, im_hi3, w0_re, w0_im);
+
+ j += 2 * stride;
+ k += 2 * stride;
+ } while (j < n_4);
+ }
+ }
+
+ /* Process stage log2_size-1. This is identical to the stage processing above
+ * except for this stage the inner loop is only executed once so it is
removed
+ * entirely.
+ */
+ w_stride = n_2 >> stage;
+ w_2stride = n >> stage;
+ w_3stride = w_stride + w_2stride;
+ w_4stride = w_2stride + w_2stride;
+
+ stride_2 = stride >> 1;
+ stride_4 = stride >> 2;
+
+ stride_3_4 = stride_2 + stride_4;
+
+ re0 = re; im0 = im;
+ re1 = re + stride_2; im1 = im + stride_2;
+ re2 = re + stride_4; im2 = im + stride_4;
+ re3 = re + stride_3_4; im3 = im + stride_3_4;
+
+ for (i=0, offset=0; i<stride_4; i++, offset += w_4stride) {
+ /* Compute the twiddle factors
+ */
+ w0 = W[offset];
+ w1 = W[offset + w_stride];
+ w2 = W[offset + w_2stride];
+ w3 = W[offset + w_3stride];
+
+ tmp0 = spu_shuffle(w0, w2, shuf_0415);
+ tmp1 = spu_shuffle(w1, w3, shuf_0415);
+
+ w0_re = spu_shuffle(tmp0, tmp1, shuf_0415);
+ w0_im = spu_shuffle(tmp0, tmp1, shuf_2637);
+
+ j = i;
+ k = i + stride;
+
+ re_lo0 = re0[j]; im_lo0 = im0[j];
+ re_lo1 = re1[j]; im_lo1 = im1[j];
+
+ re_hi0 = re2[j]; im_hi0 = im2[j];
+ re_hi1 = re3[j]; im_hi1 = im3[j];
+
+ re_lo2 = re0[k]; im_lo2 = im0[k];
+ re_lo3 = re1[k]; im_lo3 = im1[k];
+
+ re_hi2 = re2[k]; im_hi2 = im2[k];
+ re_hi3 = re3[k]; im_hi3 = im3[k];
+
+ FFT_1D_BUTTERFLY (re0[j], im0[j], re1[j], im1[j], re_lo0, im_lo0,
re_lo1, im_lo1, w0_re, w0_im);
+ FFT_1D_BUTTERFLY_HI(re2[j], im2[j], re3[j], im3[j], re_hi0, im_hi0,
re_hi1, im_hi1, w0_re, w0_im);
+
+ FFT_1D_BUTTERFLY (re0[k], im0[k], re1[k], im1[k], re_lo2, im_lo2,
re_lo3, im_lo3, w0_re, w0_im);
+ FFT_1D_BUTTERFLY_HI(re2[k], im2[k], re3[k], im3[k], re_hi2, im_hi2,
re_hi3, im_hi3, w0_re, w0_im);
+ }
+
+
+ /* Process the final stage (stage log2_size). For this stage,
+ * reformat the data from parallel arrays back into
+ * interleaved arrays,storing the result into <in>.
+ *
+ * This loop has been manually unrolled by 2 to improve
+ * dual issue rates and reduce stalls. This unrolling
+ * forces a minimum FFT size of 32.
+ */
+ re0 = re;
+ re1 = re + n_8;
+ re2 = re + n_16;
+ re3 = re + n_3_16;
+
+ im0 = im;
+ im1 = im + n_8;
+ im2 = im + n_16;
+ im3 = im + n_3_16;
+
+ out0 = out;
+ out1 = out + n_4;
+ out2 = out + n_8;
+ out3 = out1 + n_8;
+
+ i = n_16;
+
+ do {
+ /* Fetch the twiddle factors
+ */
+ w0 = W[0];
+ w1 = W[1];
+ w2 = W[2];
+ w3 = W[3];
+
+ W += 4;
+
+ w0_re = spu_shuffle(w0, w1, shuf_0246);
+ w0_im = spu_shuffle(w0, w1, shuf_1357);
+ w1_re = spu_shuffle(w2, w3, shuf_0246);
+ w1_im = spu_shuffle(w2, w3, shuf_1357);
+
+ /* Fetch the butterfly inputs, reals and imaginaries
+ */
+ re_lo0 = re0[0]; im_lo0 = im0[0];
+ re_lo1 = re1[0]; im_lo1 = im1[0];
+ re_lo2 = re0[1]; im_lo2 = im0[1];
+ re_lo3 = re1[1]; im_lo3 = im1[1];
+
+ re_hi0 = re2[0]; im_hi0 = im2[0];
+ re_hi1 = re3[0]; im_hi1 = im3[0];
+ re_hi2 = re2[1]; im_hi2 = im2[1];
+ re_hi3 = re3[1]; im_hi3 = im3[1];
+
+ re0 += 2; im0 += 2;
+ re1 += 2; im1 += 2;
+ re2 += 2; im2 += 2;
+ re3 += 2; im3 += 2;
+
+ /* Perform the butterflys
+ */
+ FFT_1D_BUTTERFLY (out_re_lo0, out_im_lo0, out_re_lo1, out_im_lo1,
re_lo0, im_lo0, re_lo1, im_lo1, w0_re, w0_im);
+ FFT_1D_BUTTERFLY (out_re_lo2, out_im_lo2, out_re_lo3, out_im_lo3,
re_lo2, im_lo2, re_lo3, im_lo3, w1_re, w1_im);
+
+ FFT_1D_BUTTERFLY_HI(out_re_hi0, out_im_hi0, out_re_hi1, out_im_hi1,
re_hi0, im_hi0, re_hi1, im_hi1, w0_re, w0_im);
+ FFT_1D_BUTTERFLY_HI(out_re_hi2, out_im_hi2, out_re_hi3, out_im_hi3,
re_hi2, im_hi2, re_hi3, im_hi3, w1_re, w1_im);
+
+ /* Interleave the results and store them into the output buffers (ie,
+ * the original input buffers.
+ */
+ out0[0] = spu_shuffle(out_re_lo0, out_im_lo0, shuf_0415);
+ out0[1] = spu_shuffle(out_re_lo0, out_im_lo0, shuf_2637);
+ out0[2] = spu_shuffle(out_re_lo2, out_im_lo2, shuf_0415);
+ out0[3] = spu_shuffle(out_re_lo2, out_im_lo2, shuf_2637);
+
+ out1[0] = spu_shuffle(out_re_lo1, out_im_lo1, shuf_0415);
+ out1[1] = spu_shuffle(out_re_lo1, out_im_lo1, shuf_2637);
+ out1[2] = spu_shuffle(out_re_lo3, out_im_lo3, shuf_0415);
+ out1[3] = spu_shuffle(out_re_lo3, out_im_lo3, shuf_2637);
+
+ out2[0] = spu_shuffle(out_re_hi0, out_im_hi0, shuf_0415);
+ out2[1] = spu_shuffle(out_re_hi0, out_im_hi0, shuf_2637);
+ out2[2] = spu_shuffle(out_re_hi2, out_im_hi2, shuf_0415);
+ out2[3] = spu_shuffle(out_re_hi2, out_im_hi2, shuf_2637);
+
+ out3[0] = spu_shuffle(out_re_hi1, out_im_hi1, shuf_0415);
+ out3[1] = spu_shuffle(out_re_hi1, out_im_hi1, shuf_2637);
+ out3[2] = spu_shuffle(out_re_hi3, out_im_hi3, shuf_0415);
+ out3[3] = spu_shuffle(out_re_hi3, out_im_hi3, shuf_2637);
+
+ out0 += 4;
+ out1 += 4;
+ out2 += 4;
+ out3 += 4;
+
+ i -= 2;
+ } while (i);
+}
+
+#endif /* _FFT_1D_R2_H_ */
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/gc_spu_macs.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/gc_spu_macs.h)
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/gc_spu_macs.h
(rev 0)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/gc_spu_macs.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,380 @@
+/* -*- asm -*- */
+/*
+ * 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_GC_SPU_MACS_H
+#define INCLUDED_GC_SPU_MACS_H
+
+/*
+ * This file contains a set of macros that are generally useful when
+ * coding in SPU assembler
+ *
+ * Note that the multi-instruction macros in here may overwrite
+ * registers 77, 78, and 79 without warning.
+ */
+
+/*
+ * defines for all registers
+ */
+#define r0 $0
+#define r1 $1
+#define r2 $2
+#define r3 $3
+#define r4 $4
+#define r5 $5
+#define r6 $6
+#define r7 $7
+#define r8 $8
+#define r9 $9
+#define r10 $10
+#define r11 $11
+#define r12 $12
+#define r13 $13
+#define r14 $14
+#define r15 $15
+#define r16 $16
+#define r17 $17
+#define r18 $18
+#define r19 $19
+#define r20 $20
+#define r21 $21
+#define r22 $22
+#define r23 $23
+#define r24 $24
+#define r25 $25
+#define r26 $26
+#define r27 $27
+#define r28 $28
+#define r29 $29
+#define r30 $30
+#define r31 $31
+#define r32 $32
+#define r33 $33
+#define r34 $34
+#define r35 $35
+#define r36 $36
+#define r37 $37
+#define r38 $38
+#define r39 $39
+#define r40 $40
+#define r41 $41
+#define r42 $42
+#define r43 $43
+#define r44 $44
+#define r45 $45
+#define r46 $46
+#define r47 $47
+#define r48 $48
+#define r49 $49
+#define r50 $50
+#define r51 $51
+#define r52 $52
+#define r53 $53
+#define r54 $54
+#define r55 $55
+#define r56 $56
+#define r57 $57
+#define r58 $58
+#define r59 $59
+#define r60 $60
+#define r61 $61
+#define r62 $62
+#define r63 $63
+#define r64 $64
+#define r65 $65
+#define r66 $66
+#define r67 $67
+#define r68 $68
+#define r69 $69
+#define r70 $70
+#define r71 $71
+#define r72 $72
+#define r73 $73
+#define r74 $74
+#define r75 $75
+#define r76 $76
+#define r77 $77
+#define r78 $78
+#define r79 $79
+#define r80 $80
+#define r81 $81
+#define r82 $82
+#define r83 $83
+#define r84 $84
+#define r85 $85
+#define r86 $86
+#define r87 $87
+#define r88 $88
+#define r89 $89
+#define r90 $90
+#define r91 $91
+#define r92 $92
+#define r93 $93
+#define r94 $94
+#define r95 $95
+#define r96 $96
+#define r97 $97
+#define r98 $98
+#define r99 $99
+#define r100 $100
+#define r101 $101
+#define r102 $102
+#define r103 $103
+#define r104 $104
+#define r105 $105
+#define r106 $106
+#define r107 $107
+#define r108 $108
+#define r109 $109
+#define r110 $110
+#define r111 $111
+#define r112 $112
+#define r113 $113
+#define r114 $114
+#define r115 $115
+#define r116 $116
+#define r117 $117
+#define r118 $118
+#define r119 $119
+#define r120 $120
+#define r121 $121
+#define r122 $122
+#define r123 $123
+#define r124 $124
+#define r125 $125
+#define r126 $126
+#define r127 $127
+
+
+#define lr r0 // link register
+#define sp r1 // stack pointer
+ // r2 is environment pointer for langs that need it
(ALGOL)
+
+#define retval r3 // return values are passed in regs starting at
r3
+
+#define arg1 r3 // args are passed in regs starting at r3
+#define arg2 r4
+#define arg3 r5
+#define arg4 r6
+#define arg5 r7
+#define arg6 r8
+#define arg7 r9
+#define arg8 r10
+#define arg9 r11
+#define arg10 r12
+
+// r3 - r74 are volatile (caller saves)
+// r74 - r79 are volatile (scratch regs possibly destroyed by fct
prolog/epilog)
+// r80 - r127 are non-volatile (callee-saves)
+
+// scratch registers reserved for use by the macros in this file.
+
+#define _gc_t0 r79
+#define _gc_t1 r78
+#define _gc_t2 r77
+
+/*
+ * ----------------------------------------------------------------
+ * pseudo ops
+ * ----------------------------------------------------------------
+ */
+#define PROC_ENTRY(name) \
+ .text; \
+ .p2align 4; \
+ .global name; \
+ .type name, @function; \
+name:
+
+/*
+ * ----------------------------------------------------------------
+ * aliases for common operations
+ * ----------------------------------------------------------------
+ */
+
+// Move register (even pipe, 2 cycles)
+#define MR(rt, ra) or rt, ra, ra;
+
+// Move register (odd pipe, 4 cycles)
+#define LMR(rt, ra) rotqbyi rt, ra, 0;
+
+// return
+#define RETURN() bi lr;
+
+// hint for a return
+#define HINT_RETURN(ret_label) hbr ret_label, lr;
+
+// return if zero
+#define BRZ_RETURN(rt) biz rt, lr;
+
+// return if not zero
+#define BRNZ_RETURN(rt) binz rt, lr;
+
+// return if halfword zero
+#define BRHZ_RETURN(rt) bihz rt, lr;
+
+// return if halfword not zero
+#define BRHNZ_RETURN(rt) bihnz rt, lr;
+
+
+/*
+ * ----------------------------------------------------------------
+ * modulo like things for constant moduli that are powers of 2
+ * ----------------------------------------------------------------
+ */
+
+// rt = ra & (pow2 - 1)
+#define MODULO(rt, ra, pow2) \
+ andi rt, ra, (pow2)-1;
+
+// rt = pow2 - (ra & (pow2 - 1))
+#define MODULO_NEG(rt, ra, pow2) \
+ andi rt, ra, (pow2)-1; \
+ sfi rt, rt, (pow2);
+
+// rt = ra & -(pow2)
+#define ROUND_DOWN(rt, ra, pow2) \
+ andi rt, ra, -(pow2);
+
+// rt = (ra + (pow2 - 1)) & -(pow2)
+#define ROUND_UP(rt, ra, pow2) \
+ ai rt, ra, (pow2)-1; \
+ andi rt, rt, -(pow2);
+
+/*
+ * ----------------------------------------------------------------
+ * Splat - replicate a particular slot into all slots
+ * Altivec analogs...
+ * ----------------------------------------------------------------
+ */
+
+// replicate byte from slot s [0,15]
+#define VSPLTB(rt, ra, s) \
+ ilh _gc_t0, (s)*0x0101; \
+ shufb rt, ra, ra, _gc_t0;
+
+// replicate halfword from slot s [0,7]
+#define VSPLTH(rt, ra, s) \
+ ilh _gc_t0, 2*(s)*0x0101 + 0x0001; \
+ shufb rt, ra, ra, _gc_t0;
+
+// replicate word from slot s [0,3]
+#define VSPLTW(rt, ra, s) \
+ iluh _gc_t0, 4*(s)*0x0101 + 0x0001; \
+ iohl _gc_t0, 4*(s)*0x0101 + 0x0203; \
+ shufb rt, ra, ra, _gc_t0;
+
+// replicate double from slot s [0,1]
+#define VSPLTD(rt, ra, s) \
+ /* sp is always 16-byte aligned */ \
+ cdd _gc_t0, 8(sp); /* 0x10111213 14151617 00010203
04050607 */ \
+ rotqbyi rt, ra, ra, (s) << 3; /* rotate double into preferred slot
*/ \
+ shufb rt, rt, rt, _gc_t0;
+
+/*
+ * ----------------------------------------------------------------
+ * lots of min/max variations...
+ *
+ * On a slot by slot basis, compute the min or max
+ *
+ * U - unsigned, else signed
+ * B,H,{} - byte, halfword, word
+ * F float
+ * ----------------------------------------------------------------
+ */
+
+#define MIN_SELB(rt, ra, rb, rc) selb rt, ra, rb, rc;
+#define MAX_SELB(rt, ra, rb, rc) selb rt, rb, ra, rc;
+
+ // words
+
+#define MIN(rt, ra, rb) \
+ cgt _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define MAX(rt, ra, rb) \
+ cgt _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+#define UMIN(rt, ra, rb) \
+ clgt _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define UMAX(rt, ra, rb) \
+ clgt _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+ // bytes
+
+#define MINB(rt, ra, rb) \
+ cgtb _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define MAXB(rt, ra, rb) \
+ cgtb _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+#define UMINB(rt, ra, rb) \
+ clgtb _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define UMAXB(rt, ra, rb) \
+ clgtb _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+ // halfwords
+
+#define MINH(rt, ra, rb) \
+ cgth _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define MAXH(rt, ra, rb) \
+ cgth _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+#define UMINH(rt, ra, rb) \
+ clgth _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define UMAXH(rt, ra, rb) \
+ clgth _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+ // floats
+
+#define FMIN(rt, ra, rb) \
+ fcgt _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+#define FMAX(rt, ra, rb) \
+ fcgt _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+// Ignoring the sign, select the values with the minimum magnitude
+#define FMINMAG(rt, ra, rb) \
+ fcmgt _gc_t0, ra, rb; \
+ MIN_SELB(rt, ra, rb, _gc_t0)
+
+// Ignoring the sign, select the values with the maximum magnitude
+#define FMAXMAG(rt, ra, rb) \
+ fcmgt _gc_t0, ra, rb; \
+ MAX_SELB(rt, ra, rb, _gc_t0)
+
+
+#endif /* INCLUDED_GC_SPU_MACS_H */
Copied:
gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/libfft.h
(from rev 9823,
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/libfft.h)
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/libfft.h
(rev 0)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/include/gcell/spu/libfft.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -0,0 +1,113 @@
+/* -------------------------------------------------------------- */
+/* (C)Copyright 2008 Free Software Foundation, Inc. */
+/* (C)Copyright 2001,2007, */
+/* International Business Machines Corporation, */
+/* Sony Computer Entertainment, Incorporated, */
+/* Toshiba Corporation, */
+/* */
+/* All Rights Reserved. */
+/* */
+/* Redistribution and use in source and binary forms, with or */
+/* without modification, are permitted provided that the */
+/* following conditions are met: */
+/* */
+/* - Redistributions of source code must retain the above copyright*/
+/* notice, this list of conditions and the following disclaimer. */
+/* */
+/* - Redistributions in binary form must reproduce the above */
+/* copyright notice, this list of conditions and the following */
+/* disclaimer in the documentation and/or other materials */
+/* provided with the distribution. */
+/* */
+/* - Neither the name of IBM Corporation nor the names of its */
+/* contributors may be used to endorse or promote products */
+/* derived from this software without specific prior written */
+/* permission. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */
+/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */
+/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
+/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
+/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
+/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */
+/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */
+/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */
+/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */
+/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */
+/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
+/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+/* -------------------------------------------------------------- */
+/* PROLOG END TAG zYx */
+
+#ifndef INCLUDED_LIBFFT_H
+#define INCLUDED_LIBFFT_H
+
+// must be defined before inclusion of fft_1d_r2.h
+#define MAX_FFT_1D_SIZE 4096
+
+/* fft_1d_r2
+ * ---------
+ * Performs a single precision, complex Fast Fourier Transform using
+ * the DFT (Discrete Fourier Transform) with radix-2 decimation in time.
+ * The input <in> is an array of complex numbers of length (1<<log2_size)
+ * entries. The result is returned in the array of complex numbers specified
+ * by <out>. Note: This routine can support an in-place transformation
+ * by specifying <in> and <out> to be the same array.
+ *
+ * This implementation utilizes the Cooley-Tukey algorithm consisting
+ * of <log2_size> stages. The basic operation is the butterfly.
+ *
+ * p --------------------------> P = p + q*Wi
+ * \ /
+ * \ /
+ * \ /
+ * \/
+ * /\
+ * / \
+ * / \
+ * ____ / \
+ * q --| Wi |-----------------> Q = p - q*Wi
+ * ----
+ *
+ * This routine also requires pre-computed twiddle values, W. W is an
+ * array of single precision complex numbers of length 1<<(log2_size-2)
+ * and is computed as follows:
+ *
+ * for (i=0; i<n/4; i++)
+ * W[i].real = cos(i * 2*PI/n);
+ * W[i].imag = -sin(i * 2*PI/n);
+ * }
+ *
+ * This array actually only contains the first half of the twiddle
+ * factors. Due for symmetry, the second half of the twiddle factors
+ * are implied and equal:
+ *
+ * for (i=0; i<n/4; i++)
+ * W[i+n/4].real = W[i].imag = sin(i * 2*PI/n);
+ * W[i+n/4].imag = -W[i].real = -cos(i * 2*PI/n);
+ * }
+ *
+ * Further symmetry allows one to generate the twiddle factor table
+ * using half the number of trig computations as follows:
+ *
+ * W[0].real = 1.0;
+ * W[0].imag = 0.0;
+ * for (i=1; i<n/4; i++)
+ * W[i].real = cos(i * 2*PI/n);
+ * W[n/4 - i].imag = -W[i].real;
+ * }
+ *
+ * The complex numbers are packed into quadwords as follows:
+ *
+ * quadword complex
+ * array element array elements
+ * -----------------------------------------------------
+ * i | real 2*i | imag 2*i | real 2*i+1 | imag 2*i+1 |
+ * -----------------------------------------------------
+ *
+ */
+
+void fft_1d_r2(vector float *out, vector float *in, vector float *W, int
log2_size);
+
+#endif /* INCLUDED_LIBFFT_H */
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d.h
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <libfft.h>
-#include <fft_1d_r2.h>
+#include <gcell/spu/libfft.h>
+#include <gcell/spu/fft_1d_r2.h>
#include <assert.h>
/*
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/fft_1d_r2.h
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/gc_spu_macs.h
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/libfft.h
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/memset.S
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/memset.S
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/memset.S
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,7 +19,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_spu_macs.h>
+#include <gcell/spu/gc_spu_macs.h>
.file "memset.S"
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/qa_memset.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/qa_memset.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/general/spu/qa_memset.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,11 +19,11 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_declare_proc.h>
+#include <gcell/gc_declare_proc.h>
+#include <spu_intrinsics.h>
+#include <spu_mfcio.h>
#include <string.h>
#include <stdio.h>
-#include <spu_intrinsics.h>
-#include <spu_mfcio.h>
#define MAX_QA_BYTES 1024
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/Makefile.am
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/Makefile.am
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/Makefile.am
2008-10-22 20:14:29 UTC (rev 9829)
@@ -20,7 +20,7 @@
include $(top_srcdir)/Makefile.common
-IBM_PPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/src/ibm/sync/ppu_source
+IBM_PPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/ibm/sync/ppu_source
AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(MBLOCK_INCLUDES)
$(CPPUNIT_INCLUDES) \
@@ -46,10 +46,6 @@
qa_job_manager.cc
-gcellinclude_HEADERS = \
- gc_aligned_alloc.h \
- gc_job_manager.h
-
noinst_HEADERS = \
gc_client_thread_info.h \
gc_job_manager_impl.h \
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -22,7 +22,7 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gc_aligned_alloc.h>
+#include <gcell/gc_aligned_alloc.h>
#include <stdlib.h>
#include <stdexcept>
#include <string.h>
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_aligned_alloc.h
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_queue.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_queue.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_queue.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "gc_jd_queue.h"
-#include "memory_barrier.h"
+#include <gcell/gc_jd_queue.h>
+#include <gcell/memory_barrier.h>
#include <mutex_init.h>
#include <mutex_lock.h>
#include <mutex_unlock.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_stack.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_stack.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_jd_stack.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,10 +19,70 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "gc_jd_stack.h"
-#include "memory_barrier.h"
+#include <gcell/gc_jd_stack.h>
+#include <gcell/memory_barrier.h>
+/*
+ * begin extract from ppu_intrinics.h
+ * FIXME handle this a different way
+ */
+#if !defined(__PPU__) && !defined(__ppc__) && !defined(__ppc64__)
+ && !defined(__GNUC__)
+ #error ppu_intrinsics.h included on wrong platform/compiler
+#endif
+
+#define __lwarx(base) __extension__ \
+ ({unsigned int result; \
+ typedef struct {char a[4];} wordsize; \
+ wordsize *ptrp = (wordsize*)(base); \
+ __asm__ volatile ("lwarx %0,%y1" \
+ : "=r" (result) \
+ : "Z" (*ptrp)); \
+ result; })
+
+#ifdef __powerpc64__
+#define __ldarx(base) __extension__ \
+ ({unsigned long long result; \
+ typedef struct {char a[8];} doublewordsize; \
+ doublewordsize *ptrp = (doublewordsize*)(base); \
+ __asm__ volatile ("ldarx %0,%y1" \
+ : "=r" (result) \
+ : "Z" (*ptrp)); \
+ result; })
+#endif /* __powerpc64__ */
+
+#define __stwcx(base, value) __extension__ \
+ ({unsigned int result; \
+ typedef struct {char a[4];} wordsize; \
+ wordsize *ptrp = (wordsize*)(base); \
+ __asm__ volatile ("stwcx. %2,%y1\n" \
+ "\tmfocrf %0,0x80" \
+ : "=r" (result), \
+ "=Z" (*ptrp) \
+ : "r" (value)); \
+ ((result & 0x20000000) >> 29); })
+
+
+#ifdef __powerpc64__
+#define __stdcx(base, value) __extension__ \
+ ({unsigned long long result; \
+ typedef struct {char a[8];} doublewordsize; \
+ doublewordsize *ptrp = (doublewordsize*)(base); \
+ __asm__ volatile ("stdcx. %2,%y1\n" \
+ "\tmfocrf %0,0x80" \
+ : "=r" (result), \
+ "=Z" (*ptrp) \
+ : "r" (value)); \
+ ((result & 0x20000000) >> 29); })
+#endif /* __powerpc64__ */
+
+
+/*
+ * --- end extract from ppu_intrinics.h --
+ */
+
+
void
gc_jd_stack_init(gc_jd_stack_t *stack)
{
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -22,7 +22,7 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include "gc_job_manager.h"
+#include <gcell/gc_job_manager.h>
#include "gc_job_manager_impl.h"
#include <boost/weak_ptr.hpp>
#include <stdio.h>
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager.h
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -22,15 +22,15 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gc_job_manager_impl.h>
-#include <gc_mbox.h>
+#include "gc_job_manager_impl.h"
+#include <gcell/gc_mbox.h>
+#include <gcell/gc_aligned_alloc.h>
+#include <gcell/memory_barrier.h>
#include <gc_proc_def_utils.h>
-#include <gc_aligned_alloc.h>
+#include <atomic_dec_if_positive.h>
#include <stdio.h>
#include <stdexcept>
#include <stdlib.h>
-#include <atomic_dec_if_positive.h>
-#include <memory_barrier.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.h
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.h
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_job_manager_impl.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -22,11 +22,11 @@
#ifndef INCLUDED_GC_JOB_MANAGER_IMPL_H
#define INCLUDED_GC_JOB_MANAGER_IMPL_H
-#include "gc_job_manager.h"
+#include <gcell/gc_job_manager.h>
+#include <gcell/gc_jd_stack.h>
+#include <gcell/gc_jd_queue.h>
+#include <gcell/gc_spu_args.h>
#include "gc_client_thread_info.h"
-#include "gc_jd_stack.h"
-#include "gc_jd_queue.h"
-#include "gc_spu_args.h"
#include <libspe2.h>
#include <vector>
#include <boost/scoped_array.hpp>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -24,7 +24,7 @@
#endif
#include <gc_proc_def_utils.h>
-#include <gc_declare_proc.h>
+#include <gcell/gc_declare_proc.h>
#include <elf.h>
#include <stdio.h>
#include <string.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.h
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.h
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/gc_proc_def_utils.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,7 +21,7 @@
#ifndef INCLUDED_GC_PROC_DEF_UTILS_H
#define INCLUDED_GC_PROC_DEF_UTILS_H
-#include <gc_declare_proc.h>
+#include <gcell/gc_declare_proc.h>
#include <libspe2.h>
/*!
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_queue.cc
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_queue.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_queue.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,7 +21,7 @@
#include "qa_jd_queue.h"
#include <cppunit/TestAssert.h>
-#include "gc_jd_queue.h"
+#include <gcell/gc_jd_queue.h>
#include <stdio.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_stack.cc
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_stack.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_jd_stack.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,7 +21,7 @@
#include "qa_jd_stack.h"
#include <cppunit/TestAssert.h>
-#include "gc_jd_stack.h"
+#include <gcell/gc_jd_stack.h>
#include <stdio.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_job_manager.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_job_manager.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/qa_job_manager.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,7 +21,7 @@
#include "qa_job_manager.h"
#include <cppunit/TestAssert.h>
-#include "gc_job_manager.h"
+#include <gcell/gc_job_manager.h>
#include <stdexcept>
#include <stdio.h>
#include <time.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_delay.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_delay.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_delay.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "gc_delay.h"
-#include <compiler.h>
+#include <gcell/spu/gc_delay.h>
+#include <gcell/compiler.h>
inline static void
gc_udelay_1us(void)
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_logging.c
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_logging.c
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_logging.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,10 +19,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_logging.h>
+#include <gcell/gc_logging.h>
+#include <gcell/gc_spu_args.h>
#include <spu_intrinsics.h>
#include <spu_mfcio.h>
-#include <gc_spu_args.h>
static gc_eaddr_t log_base_ea; // base address of log entries in EA
static uint32_t log_idx_mask; // nentries - 1
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_main.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_main.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_main.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -25,14 +25,15 @@
#include <spu_mfcio.h>
#include <sync_utils.h>
#include "gc_spu_config.h"
-#include "gc_spu_args.h"
-#include "gc_job_desc.h"
-#include "gc_mbox.h"
-#include "gc_jd_queue.h"
-#include "gc_delay.h"
-#include "gc_declare_proc.h"
-#include "gc_random.h"
#include "spu_buffers.h"
+#include <gcell/gc_spu_args.h>
+#include <gcell/gc_job_desc.h>
+#include <gcell/gc_mbox.h>
+#include <gcell/gc_declare_proc.h>
+#include <gcell/spu/gc_jd_queue.h>
+#include <gcell/spu/gc_random.h>
+#include <gcell/spu/gc_delay.h>
+
#include <string.h>
#include <assert.h>
#include <stdio.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_random.c
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_random.c
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_random.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -18,7 +18,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_random.h>
+#include <gcell/spu/gc_random.h>
static int last_val = 0;
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_config.h
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_config.h
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_config.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -18,10 +18,10 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef INCLUDED_GC_SPU_CONFIG_H
-#define INCLUDED_GC_SPU_CONFIG_H
+#ifndef INCLUDED_GCELL_GC_SPU_CONFIG_H
+#define INCLUDED_GCELL_GC_SPU_CONFIG_H
-#include <gc_job_desc.h>
+#include <gcell/gc_job_desc.h>
#define CACHE_LINE_SIZE 128 // in bytes
#define GC_SPU_BUFSIZE_BASE (40 * 1024) // must be multiple of
CACHE_LINE_SIZE
@@ -30,4 +30,4 @@
#define NGETBUFS 1 // single buffer job arg gets
#define NPUTBUFS 2 // double buffer job arg puts
-#endif /* INCLUDED_GC_SPU_CONFIG_H */
+#endif /* INCLUDED_GCELL_GC_SPU_CONFIG_H */
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_jd_queue.c
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_jd_queue.c
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gc_spu_jd_queue.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,11 +19,11 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "gc_jd_queue.h"
+#include <gcell/spu/gc_jd_queue.h>
+#include <gcell/spu/gc_delay.h>
+#include <gcell/spu/gc_random.h>
#include "mutex_lock.h"
#include "mutex_unlock.h"
-#include "gc_delay.h"
-#include "gc_random.h"
#define MIN(a,b) ((a) < (b) ? (a) : (b))
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gcell_runtime_qa.c
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gcell_runtime_qa.c
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/gcell_runtime_qa.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_delay.h>
-#include <gc_declare_proc.h>
+#include <gcell/gc_declare_proc.h>
+#include <gcell/spu/gc_delay.h>
#include <string.h>
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/spu_buffers.c
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/spu_buffers.c
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/runtime/spu/spu_buffers.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <spu_buffers.h>
-#include <compiler.h>
+#include "spu_buffers.h"
+#include <gcell/compiler.h>
static unsigned char _getbuf[NGETBUFS][GC_SPU_BUFSIZE] _AL128;
static unsigned char _putbuf[NPUTBUFS][GC_SPU_BUFSIZE] _AL128;
Modified: gnuradio/branches/developers/eb/gcell-wip/gcell/lib/spu/Makefile.am
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/spu/Makefile.am
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/spu/Makefile.am
2008-10-22 20:14:29 UTC (rev 9829)
@@ -29,7 +29,7 @@
include $(top_srcdir)/Makefile.common.spu
-IBM_SPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/src/ibm/sync/spu_source
+IBM_SPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/ibm/sync/spu_source
AM_CPPFLAGS = $(GCELL_SPU_INCLUDES) $(IBM_SPU_SYNC_INCLUDES)
lib_LIBRARIES = libgcell_spu.a
@@ -63,13 +63,17 @@
$(general_srcdir)/fft_1d_r2.c \
$(general_srcdir)/memset.S
-general_spu_headers = \
- $(general_srcdir)/gc_spu_macs.h \
- $(general_srcdir)/libfft.h
+general_spu_headers =
+# These now live in include/gcell/spu
+#general_spu_headers = \
+# $(general_srcdir)/gc_spu_macs.h \
+# $(general_srcdir)/libfft.h
-general_spu_noinst_headers = \
- $(general_srcdir)/fft_1d.h \
- $(general_srcdir)/fft_1d_r2.h
+general_spu_noinst_headers =
+# As do these
+#general_spu_noinst_headers = \
+# $(general_srcdir)/fft_1d.h \
+# $(general_srcdir)/fft_1d_r2.h
# The QA code for (usually) non-PPE visible support routines in lib/general/spu
general_spu_qa_sources = \
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/Makefile.am
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/Makefile.am
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/Makefile.am
2008-10-22 20:14:29 UTC (rev 9829)
@@ -57,8 +57,9 @@
# Headers
-gcellinclude_HEADERS = \
- gcp_fft_1d_r2.h
+# Moved to include/gcell
+#gcellinclude_HEADERS = \
+# gcp_fft_1d_r2.h
noinst_HEADERS = \
qa_gcell_general.h \
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,7 +21,7 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include <gcp_fft_1d_r2.h>
+#include <gcell/gcp_fft_1d_r2.h>
#include <stdint.h>
#include <stdexcept>
#include <math.h>
Deleted:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/gcp_fft_1d_r2.h
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcell_general.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcell_general.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcell_general.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -26,7 +26,7 @@
#include <stdlib.h> // random, posix_memalign
#include <algorithm>
#include <string.h>
-#include <gc_job_manager.h>
+#include <gcell/gc_job_manager.h>
// handle to embedded SPU executable
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.cc
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -21,7 +21,7 @@
#include "qa_gcp_fft_1d_r2.h"
#include <cppunit/TestAssert.h>
-#include <gcp_fft_1d_r2.h>
+#include <gcell/gcp_fft_1d_r2.h>
#include <fftw3.h>
#include <stdio.h>
#include <stdlib.h> // random, posix_memalign
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h
2008-10-22 20:14:29 UTC (rev 9829)
@@ -23,7 +23,7 @@
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestCase.h>
-#include <gc_job_manager.h>
+#include <gcell/gc_job_manager.h>
class qa_gcp_fft_1d_r2 : public CppUnit::TestCase {
Modified:
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c
===================================================================
---
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c
2008-10-22 18:11:59 UTC (rev 9828)
+++
gnuradio/branches/developers/eb/gcell-wip/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c
2008-10-22 20:14:29 UTC (rev 9829)
@@ -19,8 +19,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <gc_declare_proc.h>
-#include <libfft.h>
+#include <gcell/gc_declare_proc.h>
+#include <gcell/spu/libfft.h>
#include <assert.h>
/*
Modified: gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell.i
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell.i
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell.i
2008-10-22 20:14:29 UTC (rev 9829)
@@ -28,7 +28,7 @@
#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix
//#include <stdexcept>
-#include <gc_job_manager.h>
+#include <gcell/gc_job_manager.h>
#include <gcell_fft_vcc.h>
%}
Modified:
gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell_fft_vcc.cc
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell_fft_vcc.cc
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/gcell_fft_vcc.cc
2008-10-22 20:14:29 UTC (rev 9829)
@@ -26,9 +26,9 @@
#include <gcell_fft_vcc.h>
#include <gr_io_signature.h>
-#include <gc_job_manager.h>
-#include <gc_aligned_alloc.h>
-#include <gcp_fft_1d_r2.h>
+#include <gcell/gc_job_manager.h>
+#include <gcell/gc_aligned_alloc.h>
+#include <gcell/gcp_fft_1d_r2.h>
#include <math.h>
#include <assert.h>
#include <stdexcept>
Modified: gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/qa_fft.py
===================================================================
--- gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/qa_fft.py
2008-10-22 18:11:59 UTC (rev 9828)
+++ gnuradio/branches/developers/eb/gcell-wip/gr-gcell/src/qa_fft.py
2008-10-22 20:14:29 UTC (rev 9829)
@@ -33,7 +33,7 @@
class test_fft_filter(gr_unittest.TestCase):
def setUp(self):
- ph =
gcell.program_handle_from_filename("../../gcell/src/lib/spu/gcell_all")
+ ph =
gcell.program_handle_from_filename("../../gcell/lib/spu/gcell_all")
opts = gcell.jm_options(ph, 1)
self.mgr = gcell.job_manager(opts)
gcell.set_singleton(self.mgr)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r9829 - in gnuradio/branches/developers/eb/gcell-wip: . config gcell/apps gcell/apps/spu gcell/include/gcell gcell/include/gcell/spu gcell/lib/general/spu gcell/lib/runtime gcell/lib/runtime/spu gcell/lib/spu gcell/lib/wrapper gcell/lib/wrapper/spu gr-gcell/src,
eb <=