From bcfd774b9d980de45afa643f1c734f799770a870 Mon Sep 17 00:00:00 2001 From: Jukka Ojanen Date: Sun, 16 Nov 2014 14:59:46 +0200 Subject: Rename src/ffts.h to src/ffts_internal.h to avoid conflicts with include/ffts.h --- CMakeLists.txt | 2 +- src/codegen.c | 2 +- src/codegen.h | 2 +- src/ffts.c | 2 +- src/ffts.h | 238 ---------------------------------------------------- src/ffts_internal.h | 238 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ffts_nd.h | 2 +- src/ffts_real.h | 2 +- src/ffts_real_nd.h | 2 +- src/ffts_small.h | 2 +- 10 files changed, 246 insertions(+), 246 deletions(-) delete mode 100644 src/ffts.h create mode 100644 src/ffts_internal.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8de7302..4adbb64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(FFTS_SOURCES src/ffts_attributes.h src/ffts.c - src/ffts.h + src/ffts_internal.h src/ffts_nd.c src/ffts_nd.h src/ffts_real.h diff --git a/src/codegen.c b/src/codegen.c index 0aeacff..e1ed11f 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -33,7 +33,7 @@ #include "codegen.h" #include "macros.h" -#include "ffts.h" +#include "ffts_internal.h" #ifdef __arm__ typedef uint32_t insns_t; diff --git a/src/codegen.h b/src/codegen.h index e3c2381..bb5b60b 100644 --- a/src/codegen.h +++ b/src/codegen.h @@ -38,7 +38,7 @@ #pragma once #endif -#include "ffts.h" +#include "ffts_internal.h" transform_func_t ffts_generate_func_code(ffts_plan_t *p, size_t N, size_t leaf_N, int sign); diff --git a/src/ffts.c b/src/ffts.c index d6a2b15..545138b 100644 --- a/src/ffts.c +++ b/src/ffts.c @@ -31,7 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "ffts.h" +#include "ffts_internal.h" #include "macros.h" #include "patterns.h" #include "ffts_small.h" diff --git a/src/ffts.h b/src/ffts.h deleted file mode 100644 index a8e27b8..0000000 --- a/src/ffts.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - - This file is part of FFTS -- The Fastest Fourier Transform in the South - - Copyright (c) 2012, Anthony M. Blake - Copyright (c) 2012, The University of Waikato - - 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 the organization 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 ANTHONY M. BLAKE 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. - -*/ - -#ifndef __CP_SSE_H__ -#define __CP_SSE_H__ - -//#include "config.h" -//#include "codegen.h" -#include "ffts_attributes.h" -#include "types.h" - -#include -#include -#include -#include -#include -#include - -#define FFTS_PREFIX ffts - -#ifndef FFTS_CAT_PREFIX2 -#define FFTS_CAT_PREFIX2(a,b) a ## b -#endif - -#ifndef FFTS_CAT_PREFIX -#define FFTS_CAT_PREFIX(a,b) FFTS_CAT_PREFIX2(a ## _, b) -#endif - -/* prevent symbol name clashes */ -#ifdef FFTS_PREFIX -#define FUNC_TO_REWRITE FFTS_CAT_PREFIX(FFTS_PREFIX, FUNC_TO_REWRITE) -#endif - -#ifdef __ANDROID__ -#include -#define LOG(s) __android_log_print(ANDROID_LOG_ERROR, "FFTS", s) -#else -#define LOG(s) fprintf(stderr, s) -#endif - -#ifndef M_PI -#define M_PI 3.1415926535897932384626433832795028841971693993751058209 -#endif - -typedef struct _ffts_plan_t ffts_plan_t; - -typedef void (*transform_func_t)(ffts_plan_t *p, const void *in, void *out); - -/** - * Contains all the Information need to perform FFT - * - * - * DO NOT CHANGE THE ORDER OF MEMBERS - * ASSEMBLY CODE USES HARD CODED OFFSETS TO REFERENCE - * SOME OF THESE VARIABES!! - */ -struct _ffts_plan_t { - - /** - * - */ - ptrdiff_t *offsets; -#ifdef DYNAMIC_DISABLED - /** - * Twiddle factors - */ - void *ws; - - /** - * ee - 2 size x size8 - * oo - 2 x size4 in parallel - * oe - - */ - void *oe_ws, *eo_ws, *ee_ws; -#else - void FFTS_ALIGN(32) *ws; - void FFTS_ALIGN(32) *oe_ws, *eo_ws, *ee_ws; -#endif - - /** - * Pointer into an array of precomputed indexes for the input data array - */ - ptrdiff_t *is; - - /** - * Twiddle Factor Indexes - */ - size_t *ws_is; - - /** - * Size of the loops for the base cases - */ - size_t i0, i1, n_luts; - - /** - * Size fo the Transform - */ - size_t N; - void *lastlut; - - /** - * Used in multidimensional Code ?? - */ - size_t *transforms; - - /** - * Pointer to the dynamically generated function - * that will execute the FFT - */ - transform_func_t transform; - - /** - * Pointer to the base memory address of - * of the transform function - */ - void *transform_base; - - /** - * Size of the memory block contain the - * generated code - */ - size_t transform_size; - - /** - * Points to the cosnant variables used by - * the Assembly Code - */ - void *constants; - - // multi-dimensional stuff: - struct _ffts_plan_t **plans; - int rank; - size_t *Ns, *Ms; - void *buf; - - void *transpose_buf; - - /** - * Pointer to the destroy function - * to clean up the plan after use - * (differs for real and multi dimension transforms - */ - void (*destroy)(ffts_plan_t *); - - /** - * Coefficiants for the real valued transforms - */ - float *A, *B; - - size_t i2; -}; - -static FFTS_INLINE void *ffts_aligned_malloc(size_t size) -{ -#if defined(_MSC_VER) - return _aligned_malloc(size, 32); -#else - return valloc(size); -#endif -} - -static FFTS_INLINE void ffts_aligned_free(void *p) -{ -#if defined(_MSC_VER) - _aligned_free(p); -#else - free(p); -#endif -} - -#if GCC_VERSION_AT_LEAST(3,3) -#define ffts_ctzl __builtin_ctzl -#elif defined(_MSC_VER) -#include -#ifdef _M_X64 -#pragma intrinsic(_BitScanForward64) -static __inline unsigned long ffts_ctzl(size_t N) -{ - unsigned long count; - _BitScanForward64((unsigned long*) &count, N); - return count; -} -#else -#pragma intrinsic(_BitScanForward) -static __inline unsigned long ffts_ctzl(size_t N) -{ - unsigned long count; - _BitScanForward((unsigned long*) &count, N); - return count; -} -#endif /* _WIN64 */ -#endif /* _MSC_VER */ - -static FFTS_ALWAYS_INLINE float W_re(float N, float k) -{ - return cos(-2.0 * M_PI * k / N); -} - -static FFTS_ALWAYS_INLINE float W_im(float N, float k) -{ - return sin(-2.0 * M_PI * k / N); -} - -void ffts_free(ffts_plan_t *); -void ffts_execute(ffts_plan_t *, const void *, void *); -ffts_plan_t *ffts_init_1d(size_t N, int sign); - -#endif diff --git a/src/ffts_internal.h b/src/ffts_internal.h new file mode 100644 index 0000000..a8e27b8 --- /dev/null +++ b/src/ffts_internal.h @@ -0,0 +1,238 @@ +/* + + This file is part of FFTS -- The Fastest Fourier Transform in the South + + Copyright (c) 2012, Anthony M. Blake + Copyright (c) 2012, The University of Waikato + + 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 the organization 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 ANTHONY M. BLAKE 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. + +*/ + +#ifndef __CP_SSE_H__ +#define __CP_SSE_H__ + +//#include "config.h" +//#include "codegen.h" +#include "ffts_attributes.h" +#include "types.h" + +#include +#include +#include +#include +#include +#include + +#define FFTS_PREFIX ffts + +#ifndef FFTS_CAT_PREFIX2 +#define FFTS_CAT_PREFIX2(a,b) a ## b +#endif + +#ifndef FFTS_CAT_PREFIX +#define FFTS_CAT_PREFIX(a,b) FFTS_CAT_PREFIX2(a ## _, b) +#endif + +/* prevent symbol name clashes */ +#ifdef FFTS_PREFIX +#define FUNC_TO_REWRITE FFTS_CAT_PREFIX(FFTS_PREFIX, FUNC_TO_REWRITE) +#endif + +#ifdef __ANDROID__ +#include +#define LOG(s) __android_log_print(ANDROID_LOG_ERROR, "FFTS", s) +#else +#define LOG(s) fprintf(stderr, s) +#endif + +#ifndef M_PI +#define M_PI 3.1415926535897932384626433832795028841971693993751058209 +#endif + +typedef struct _ffts_plan_t ffts_plan_t; + +typedef void (*transform_func_t)(ffts_plan_t *p, const void *in, void *out); + +/** + * Contains all the Information need to perform FFT + * + * + * DO NOT CHANGE THE ORDER OF MEMBERS + * ASSEMBLY CODE USES HARD CODED OFFSETS TO REFERENCE + * SOME OF THESE VARIABES!! + */ +struct _ffts_plan_t { + + /** + * + */ + ptrdiff_t *offsets; +#ifdef DYNAMIC_DISABLED + /** + * Twiddle factors + */ + void *ws; + + /** + * ee - 2 size x size8 + * oo - 2 x size4 in parallel + * oe - + */ + void *oe_ws, *eo_ws, *ee_ws; +#else + void FFTS_ALIGN(32) *ws; + void FFTS_ALIGN(32) *oe_ws, *eo_ws, *ee_ws; +#endif + + /** + * Pointer into an array of precomputed indexes for the input data array + */ + ptrdiff_t *is; + + /** + * Twiddle Factor Indexes + */ + size_t *ws_is; + + /** + * Size of the loops for the base cases + */ + size_t i0, i1, n_luts; + + /** + * Size fo the Transform + */ + size_t N; + void *lastlut; + + /** + * Used in multidimensional Code ?? + */ + size_t *transforms; + + /** + * Pointer to the dynamically generated function + * that will execute the FFT + */ + transform_func_t transform; + + /** + * Pointer to the base memory address of + * of the transform function + */ + void *transform_base; + + /** + * Size of the memory block contain the + * generated code + */ + size_t transform_size; + + /** + * Points to the cosnant variables used by + * the Assembly Code + */ + void *constants; + + // multi-dimensional stuff: + struct _ffts_plan_t **plans; + int rank; + size_t *Ns, *Ms; + void *buf; + + void *transpose_buf; + + /** + * Pointer to the destroy function + * to clean up the plan after use + * (differs for real and multi dimension transforms + */ + void (*destroy)(ffts_plan_t *); + + /** + * Coefficiants for the real valued transforms + */ + float *A, *B; + + size_t i2; +}; + +static FFTS_INLINE void *ffts_aligned_malloc(size_t size) +{ +#if defined(_MSC_VER) + return _aligned_malloc(size, 32); +#else + return valloc(size); +#endif +} + +static FFTS_INLINE void ffts_aligned_free(void *p) +{ +#if defined(_MSC_VER) + _aligned_free(p); +#else + free(p); +#endif +} + +#if GCC_VERSION_AT_LEAST(3,3) +#define ffts_ctzl __builtin_ctzl +#elif defined(_MSC_VER) +#include +#ifdef _M_X64 +#pragma intrinsic(_BitScanForward64) +static __inline unsigned long ffts_ctzl(size_t N) +{ + unsigned long count; + _BitScanForward64((unsigned long*) &count, N); + return count; +} +#else +#pragma intrinsic(_BitScanForward) +static __inline unsigned long ffts_ctzl(size_t N) +{ + unsigned long count; + _BitScanForward((unsigned long*) &count, N); + return count; +} +#endif /* _WIN64 */ +#endif /* _MSC_VER */ + +static FFTS_ALWAYS_INLINE float W_re(float N, float k) +{ + return cos(-2.0 * M_PI * k / N); +} + +static FFTS_ALWAYS_INLINE float W_im(float N, float k) +{ + return sin(-2.0 * M_PI * k / N); +} + +void ffts_free(ffts_plan_t *); +void ffts_execute(ffts_plan_t *, const void *, void *); +ffts_plan_t *ffts_init_1d(size_t N, int sign); + +#endif diff --git a/src/ffts_nd.h b/src/ffts_nd.h index a960cad..dd31dd1 100644 --- a/src/ffts_nd.h +++ b/src/ffts_nd.h @@ -34,7 +34,7 @@ #ifndef FFTS_ND_H #define FFTS_ND_H -#include "ffts.h" +#include "ffts_internal.h" #include ffts_plan_t *ffts_init_nd(int rank, size_t *Ns, int sign); diff --git a/src/ffts_real.h b/src/ffts_real.h index 81ca80f..f7f3d6a 100644 --- a/src/ffts_real.h +++ b/src/ffts_real.h @@ -38,7 +38,7 @@ #pragma once #endif -#include "ffts.h" +#include "ffts_internal.h" #include ffts_plan_t *ffts_init_1d_real(size_t N, int sign); diff --git a/src/ffts_real_nd.h b/src/ffts_real_nd.h index d23a002..1ad7026 100644 --- a/src/ffts_real_nd.h +++ b/src/ffts_real_nd.h @@ -38,7 +38,7 @@ #pragma once #endif -#include "ffts.h" +#include "ffts_internal.h" #include ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign); diff --git a/src/ffts_small.h b/src/ffts_small.h index 5ae48cc..6632a8a 100644 --- a/src/ffts_small.h +++ b/src/ffts_small.h @@ -1,7 +1,7 @@ #ifndef FFTS_SMALL_H #define FFTS_SMALL_H -#include "ffts.h" +#include "ffts_internal.h" void ffts_firstpass_16_f(ffts_plan_t *p, const void *in, void *out); void ffts_firstpass_16_b(ffts_plan_t *p, const void *in, void *out); -- cgit v1.1