From 29735b8e67138147ca5327b098274fa2bd2a44ca Mon Sep 17 00:00:00 2001
From: Nick Foster <nick@ettus.com>
Date: Mon, 23 May 2011 18:49:08 -0700
Subject: UHD: Orc implementation added and CMake magic put in. Won't link.

---
 host/lib/convert/CMakeLists.txt       | 31 +++++++++++++++++++++++++++++++
 host/lib/convert/convert_orc.orc      | 11 +++++++++++
 host/lib/convert/convert_with_orc.cpp | 30 ++++++++++++++++++++++++++++++
 3 files changed, 72 insertions(+)
 create mode 100644 host/lib/convert/convert_orc.orc
 create mode 100644 host/lib/convert/convert_with_orc.cpp

(limited to 'host/lib')

diff --git a/host/lib/convert/CMakeLists.txt b/host/lib/convert/CMakeLists.txt
index d189aa687..5b05bb72a 100644
--- a/host/lib/convert/CMakeLists.txt
+++ b/host/lib/convert/CMakeLists.txt
@@ -54,6 +54,37 @@ IF(HAVE_ARM_NEON_H)
     )
 ENDIF(HAVE_ARM_NEON_H)
 
+########################################################################
+# Look for Orc support
+########################################################################
+FIND_PACKAGE(PkgConfig)
+IF(PKG_CONFIG_FOUND)
+PKG_CHECK_MODULES(ORC "orc-0.4")
+ENDIF(PKG_CONFIG_FOUND)
+
+FIND_PROGRAM(ORCC_EXECUTABLE orcc)
+
+IF(ORC_FOUND AND ORCC_EXECUTABLE)
+    INCLUDE_DIRECTORIES(${ORC_INCLUDE_DIRS})
+    LINK_DIRECTORIES(${ORC_LIBRARY_DIRS})
+
+    SET(orcc_src ${CMAKE_CURRENT_SOURCE_DIR}/convert_orc.orc)
+
+    GET_FILENAME_COMPONENT(orc_file_name_we ${orcc_src} NAME_WE)
+    SET(orcc_gen ${CMAKE_CURRENT_BINARY_DIR}/${orc_file_name_we}.c)
+    MESSAGE(STATUS "orcc_gen is ${orcc_gen}, orcc_src is ${orcc_src}")
+    ADD_CUSTOM_COMMAND(
+        COMMAND ${ORCC_EXECUTABLE} --implementation -o ${orcc_gen} ${orcc_src}
+        DEPENDS ${orcc_src} OUTPUT ${orcc_gen}
+    )
+    LIBUHD_APPEND_SOURCES(${orcc_gen})
+    LIBUHD_APPEND_SOURCES(
+        ${CMAKE_CURRENT_SOURCE_DIR}/convert_with_orc.cpp
+    )
+ELSE()
+    MESSAGE(STATUS "Orc not found, disabling orc support...")
+ENDIF(ORC_FOUND AND ORCC_EXECUTABLE)
+
 ########################################################################
 # Convert types generation
 ########################################################################
diff --git a/host/lib/convert/convert_orc.orc b/host/lib/convert/convert_orc.orc
new file mode 100644
index 000000000..5704d4b58
--- /dev/null
+++ b/host/lib/convert/convert_orc.orc
@@ -0,0 +1,11 @@
+.function _convert_fc32_1_to_item32_1_nswap_orc
+.source 8 src
+.dest 4 dst
+.floatparam 4 scalar
+.temp 8 scaled
+.temp 4 converted
+
+x2 mulf scaled, src, scalar
+x2 convfw converted, scaled
+swapl converted, converted
+x2 swapw dst, converted
diff --git a/host/lib/convert/convert_with_orc.cpp b/host/lib/convert/convert_with_orc.cpp
new file mode 100644
index 000000000..dded22b9d
--- /dev/null
+++ b/host/lib/convert/convert_with_orc.cpp
@@ -0,0 +1,30 @@
+//
+// Copyright 2011 Ettus Research LLC
+//
+// This program 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 of the License, or
+// (at your option) any later version.
+//
+// This program 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, see <http://www.gnu.org/licenses/>.
+//
+
+#include "convert_common.hpp"
+#include <uhd/utils/byteswap.hpp>
+#include <emmintrin.h>
+
+using namespace uhd::convert;
+
+extern "C" {
+extern void _convert_fc32_1_to_item32_1_nswap_orc(void *, const void *, float, int);
+}
+
+DECLARE_CONVERTER(convert_fc32_1_to_item32_1_nswap, PRIORITY_LIBORC){
+    _convert_fc32_1_to_item32_1_nswap_orc(outputs[0], inputs[0], scale_factor, nsamps);
+}
-- 
cgit v1.2.3