commit-gnuradio
[Top][All Lists]
Advanced

[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)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]