Fixes for building on windows
This commit is contained in:
parent
95f0a19391
commit
7cac0249a1
349
3rdparty/oourafft/fftsg2d.cc
vendored
349
3rdparty/oourafft/fftsg2d.cc
vendored
@ -366,13 +366,11 @@ macro definitions
|
|||||||
.
|
.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define fft2d_alloc_error_check(p) \
|
#define fft2d_alloc_error_check(p) \
|
||||||
{ \
|
{ \
|
||||||
if((p) == NULL) { \
|
if ((p) == NULL) { \
|
||||||
fprintf(stderr, "fft2d memory allocation error\n"); \
|
fprintf(stderr, "fft2d memory allocation error\n"); \
|
||||||
exit(1); \
|
exit(1); \
|
||||||
} \
|
} \
|
||||||
@ -390,14 +388,14 @@ macro definitions
|
|||||||
#define fft2d_thread_t pthread_t
|
#define fft2d_thread_t pthread_t
|
||||||
#define fft2d_thread_create(thp, func, argp) \
|
#define fft2d_thread_create(thp, func, argp) \
|
||||||
{ \
|
{ \
|
||||||
if(pthread_create(thp, NULL, func, (void *)(argp)) != 0) { \
|
if (pthread_create(thp, NULL, func, (void *)(argp)) != 0) { \
|
||||||
fprintf(stderr, "fft2d thread error\n"); \
|
fprintf(stderr, "fft2d thread error\n"); \
|
||||||
exit(1); \
|
exit(1); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
#define fft2d_thread_wait(th) \
|
#define fft2d_thread_wait(th) \
|
||||||
{ \
|
{ \
|
||||||
if(pthread_join(th, NULL) != 0) { \
|
if (pthread_join(th, NULL) != 0) { \
|
||||||
fprintf(stderr, "fft2d thread error\n"); \
|
fprintf(stderr, "fft2d thread error\n"); \
|
||||||
exit(1); \
|
exit(1); \
|
||||||
} \
|
} \
|
||||||
@ -418,9 +416,8 @@ macro definitions
|
|||||||
#define fft2d_thread_create(thp, func, argp) \
|
#define fft2d_thread_create(thp, func, argp) \
|
||||||
{ \
|
{ \
|
||||||
DWORD thid; \
|
DWORD thid; \
|
||||||
*(thp) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(func), \
|
*(thp) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(func), (LPVOID)(argp), 0, &thid); \
|
||||||
(LPVOID)(argp), 0, &thid); \
|
if (*(thp) == 0) { \
|
||||||
if(*(thp) == 0) { \
|
|
||||||
fprintf(stderr, "fft2d thread error\n"); \
|
fprintf(stderr, "fft2d thread error\n"); \
|
||||||
exit(1); \
|
exit(1); \
|
||||||
} \
|
} \
|
||||||
@ -436,19 +433,28 @@ macro definitions
|
|||||||
|
|
||||||
NEXTPNR_NAMESPACE_BEGIN
|
NEXTPNR_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
void ddct(int n, int isgn, float *a, int *ip, float *w);
|
||||||
|
void ddst(int n, int isgn, float *a, int *ip, float *w);
|
||||||
|
void cdft(int n, int isgn, float *a, int *ip, float *w);
|
||||||
|
void *cdft2d_th(void *p);
|
||||||
|
void *ddxt2d0_th(void *p);
|
||||||
|
void *ddxt2d_th(void *p);
|
||||||
|
void rdft(int n, int isgn, float *a, int *ip, float *w);
|
||||||
|
void makewt(int nw, int *ip, float *w);
|
||||||
|
void cdft2d_sub(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w);
|
||||||
|
void makect(int nc, int *ip, float *c);
|
||||||
|
void rdft2d_sub(int n1, int isgn, float **a);
|
||||||
|
void ddxt2d_sub(int n1, int n2, int ics, int isgn, float **a, float *t, int *ip, float *w);
|
||||||
|
|
||||||
void cdft2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|
||||||
{
|
|
||||||
void makewt(int nw, int* ip, float* w);
|
|
||||||
void cdft(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void cdft2d_sub(
|
|
||||||
int n1, int n2, int isgn, float** a, float* t, int* ip, float* w);
|
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
void xdft2d0_subth(
|
void xdft2d0_subth(int n1, int n2, int icr, int isgn, float **a, int *ip, float *w);
|
||||||
int n1, int n2, int icr, int isgn, float** a, int* ip, float* w);
|
void cdft2d_subth(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w);
|
||||||
void cdft2d_subth(
|
void ddxt2d0_subth(int n1, int n2, int ics, int isgn, float **a, int *ip, float *w);
|
||||||
int n1, int n2, int isgn, float** a, float* t, int* ip, float* w);
|
void ddxt2d_subth(int n1, int n2, int ics, int isgn, float **a, float *t, int *ip, float *w);
|
||||||
#endif /* USE_FFT2D_THREADS */
|
#endif /* USE_FFT2D_THREADS */
|
||||||
|
|
||||||
|
void cdft2d(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
|
{
|
||||||
int n, itnull, nthread, nt, i;
|
int n, itnull, nthread, nt, i;
|
||||||
|
|
||||||
n = n1 << 1;
|
n = n1 << 1;
|
||||||
@ -471,11 +477,11 @@ void cdft2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
} else if (n2 < 4 * nthread) {
|
} else if (n2 < 4 * nthread) {
|
||||||
nt >>= 2;
|
nt >>= 2;
|
||||||
}
|
}
|
||||||
t = (float*) malloc(sizeof(float) * nt);
|
t = (float *)malloc(sizeof(float) * nt);
|
||||||
fft2d_alloc_error_check(t);
|
fft2d_alloc_error_check(t);
|
||||||
}
|
}
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
if ((float) n1 * n2 >= (float) FFT2D_THREADS_BEGIN_N) {
|
if ((float)n1 * n2 >= (float)FFT2D_THREADS_BEGIN_N) {
|
||||||
xdft2d0_subth(n1, n2, 0, isgn, a, ip, w);
|
xdft2d0_subth(n1, n2, 0, isgn, a, ip, w);
|
||||||
cdft2d_subth(n1, n2, isgn, a, t, ip, w);
|
cdft2d_subth(n1, n2, isgn, a, t, ip, w);
|
||||||
} else
|
} else
|
||||||
@ -491,20 +497,8 @@ void cdft2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rdft2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
void rdft2d(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
{
|
{
|
||||||
void makewt(int nw, int* ip, float* w);
|
|
||||||
void makect(int nc, int* ip, float* c);
|
|
||||||
void rdft(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void cdft2d_sub(
|
|
||||||
int n1, int n2, int isgn, float** a, float* t, int* ip, float* w);
|
|
||||||
void rdft2d_sub(int n1, int isgn, float** a);
|
|
||||||
#ifdef USE_FFT2D_THREADS
|
|
||||||
void xdft2d0_subth(
|
|
||||||
int n1, int n2, int icr, int isgn, float** a, int* ip, float* w);
|
|
||||||
void cdft2d_subth(
|
|
||||||
int n1, int n2, int isgn, float** a, float* t, int* ip, float* w);
|
|
||||||
#endif /* USE_FFT2D_THREADS */
|
|
||||||
int n, nw, nc, itnull, nthread, nt, i;
|
int n, nw, nc, itnull, nthread, nt, i;
|
||||||
|
|
||||||
n = n1 << 1;
|
n = n1 << 1;
|
||||||
@ -534,11 +528,11 @@ void rdft2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
} else if (n2 < 4 * nthread) {
|
} else if (n2 < 4 * nthread) {
|
||||||
nt >>= 2;
|
nt >>= 2;
|
||||||
}
|
}
|
||||||
t = (float*) malloc(sizeof(float) * nt);
|
t = (float *)malloc(sizeof(float) * nt);
|
||||||
fft2d_alloc_error_check(t);
|
fft2d_alloc_error_check(t);
|
||||||
}
|
}
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
if ((float) n1 * n2 >= (float) FFT2D_THREADS_BEGIN_N) {
|
if ((float)n1 * n2 >= (float)FFT2D_THREADS_BEGIN_N) {
|
||||||
if (isgn < 0) {
|
if (isgn < 0) {
|
||||||
rdft2d_sub(n1, isgn, a);
|
rdft2d_sub(n1, isgn, a);
|
||||||
cdft2d_subth(n1, n2, isgn, a, t, ip, w);
|
cdft2d_subth(n1, n2, isgn, a, t, ip, w);
|
||||||
@ -568,7 +562,7 @@ void rdft2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rdft2dsort(int n1, int n2, int isgn, float** a)
|
void rdft2dsort(int n1, int n2, int isgn, float **a)
|
||||||
{
|
{
|
||||||
int n1h, i;
|
int n1h, i;
|
||||||
float x, y;
|
float x, y;
|
||||||
@ -601,32 +595,8 @@ void rdft2dsort(int n1, int n2, int isgn, float** a)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddcst2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
void ddcst2d(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
{
|
{
|
||||||
void makewt(int nw, int* ip, float* w);
|
|
||||||
void makect(int nc, int* ip, float* c);
|
|
||||||
void ddct(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddst(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddxt2d_sub(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#ifdef USE_FFT2D_THREADS
|
|
||||||
void ddxt2d0_subth(
|
|
||||||
int n1, int n2, int ics, int isgn, float** a, int* ip, float* w);
|
|
||||||
void ddxt2d_subth(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#endif /* USE_FFT2D_THREADS */
|
|
||||||
int n, nw, nc, itnull, nthread, nt, i;
|
int n, nw, nc, itnull, nthread, nt, i;
|
||||||
|
|
||||||
n = n1;
|
n = n1;
|
||||||
@ -656,11 +626,11 @@ void ddcst2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
} else if (n2 < 2 * nthread) {
|
} else if (n2 < 2 * nthread) {
|
||||||
nt >>= 2;
|
nt >>= 2;
|
||||||
}
|
}
|
||||||
t = (float*) malloc(sizeof(float) * nt);
|
t = (float *)malloc(sizeof(float) * nt);
|
||||||
fft2d_alloc_error_check(t);
|
fft2d_alloc_error_check(t);
|
||||||
}
|
}
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
if ((float) n1 * n2 >= (float) FFT2D_THREADS_BEGIN_N) {
|
if ((float)n1 * n2 >= (float)FFT2D_THREADS_BEGIN_N) {
|
||||||
ddxt2d0_subth(n1, n2, 1, isgn, a, ip, w);
|
ddxt2d0_subth(n1, n2, 1, isgn, a, ip, w);
|
||||||
ddxt2d_subth(n1, n2, 0, isgn, a, t, ip, w);
|
ddxt2d_subth(n1, n2, 0, isgn, a, t, ip, w);
|
||||||
} else
|
} else
|
||||||
@ -676,32 +646,8 @@ void ddcst2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddsct2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
void ddsct2d(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
{
|
{
|
||||||
void makewt(int nw, int* ip, float* w);
|
|
||||||
void makect(int nc, int* ip, float* c);
|
|
||||||
void ddct(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddst(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddxt2d_sub(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#ifdef USE_FFT2D_THREADS
|
|
||||||
void ddxt2d0_subth(
|
|
||||||
int n1, int n2, int ics, int isgn, float** a, int* ip, float* w);
|
|
||||||
void ddxt2d_subth(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#endif /* USE_FFT2D_THREADS */
|
|
||||||
int n, nw, nc, itnull, nthread, nt, i;
|
int n, nw, nc, itnull, nthread, nt, i;
|
||||||
|
|
||||||
n = n1;
|
n = n1;
|
||||||
@ -731,11 +677,11 @@ void ddsct2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
} else if (n2 < 2 * nthread) {
|
} else if (n2 < 2 * nthread) {
|
||||||
nt >>= 2;
|
nt >>= 2;
|
||||||
}
|
}
|
||||||
t = (float*) malloc(sizeof(float) * nt);
|
t = (float *)malloc(sizeof(float) * nt);
|
||||||
fft2d_alloc_error_check(t);
|
fft2d_alloc_error_check(t);
|
||||||
}
|
}
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
if ((float) n1 * n2 >= (float) FFT2D_THREADS_BEGIN_N) {
|
if ((float)n1 * n2 >= (float)FFT2D_THREADS_BEGIN_N) {
|
||||||
ddxt2d0_subth(n1, n2, 0, isgn, a, ip, w);
|
ddxt2d0_subth(n1, n2, 0, isgn, a, ip, w);
|
||||||
ddxt2d_subth(n1, n2, 1, isgn, a, t, ip, w);
|
ddxt2d_subth(n1, n2, 1, isgn, a, t, ip, w);
|
||||||
} else
|
} else
|
||||||
@ -751,31 +697,8 @@ void ddsct2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddct2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
void ddct2d(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
{
|
{
|
||||||
void makewt(int nw, int* ip, float* w);
|
|
||||||
void makect(int nc, int* ip, float* c);
|
|
||||||
void ddct(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddxt2d_sub(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#ifdef USE_FFT2D_THREADS
|
|
||||||
void ddxt2d0_subth(
|
|
||||||
int n1, int n2, int ics, int isgn, float** a, int* ip, float* w);
|
|
||||||
void ddxt2d_subth(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#endif /* USE_FFT2D_THREADS */
|
|
||||||
int n, nw, nc, itnull, nthread, nt, i;
|
int n, nw, nc, itnull, nthread, nt, i;
|
||||||
|
|
||||||
n = n1;
|
n = n1;
|
||||||
@ -805,11 +728,11 @@ void ddct2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
} else if (n2 < 2 * nthread) {
|
} else if (n2 < 2 * nthread) {
|
||||||
nt >>= 2;
|
nt >>= 2;
|
||||||
}
|
}
|
||||||
t = (float*) malloc(sizeof(float) * nt);
|
t = (float *)malloc(sizeof(float) * nt);
|
||||||
fft2d_alloc_error_check(t);
|
fft2d_alloc_error_check(t);
|
||||||
}
|
}
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
if ((float) n1 * n2 >= (float) FFT2D_THREADS_BEGIN_N) {
|
if ((float)n1 * n2 >= (float)FFT2D_THREADS_BEGIN_N) {
|
||||||
ddxt2d0_subth(n1, n2, 0, isgn, a, ip, w);
|
ddxt2d0_subth(n1, n2, 0, isgn, a, ip, w);
|
||||||
ddxt2d_subth(n1, n2, 0, isgn, a, t, ip, w);
|
ddxt2d_subth(n1, n2, 0, isgn, a, t, ip, w);
|
||||||
} else
|
} else
|
||||||
@ -825,31 +748,8 @@ void ddct2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddst2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
void ddst2d(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
{
|
{
|
||||||
void makewt(int nw, int* ip, float* w);
|
|
||||||
void makect(int nc, int* ip, float* c);
|
|
||||||
void ddst(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddxt2d_sub(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#ifdef USE_FFT2D_THREADS
|
|
||||||
void ddxt2d0_subth(
|
|
||||||
int n1, int n2, int ics, int isgn, float** a, int* ip, float* w);
|
|
||||||
void ddxt2d_subth(int n1,
|
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w);
|
|
||||||
#endif /* USE_FFT2D_THREADS */
|
|
||||||
int n, nw, nc, itnull, nthread, nt, i;
|
int n, nw, nc, itnull, nthread, nt, i;
|
||||||
|
|
||||||
n = n1;
|
n = n1;
|
||||||
@ -879,11 +779,11 @@ void ddst2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
} else if (n2 < 2 * nthread) {
|
} else if (n2 < 2 * nthread) {
|
||||||
nt >>= 2;
|
nt >>= 2;
|
||||||
}
|
}
|
||||||
t = (float*) malloc(sizeof(float) * nt);
|
t = (float *)malloc(sizeof(float) * nt);
|
||||||
fft2d_alloc_error_check(t);
|
fft2d_alloc_error_check(t);
|
||||||
}
|
}
|
||||||
#ifdef USE_FFT2D_THREADS
|
#ifdef USE_FFT2D_THREADS
|
||||||
if ((float) n1 * n2 >= (float) FFT2D_THREADS_BEGIN_N) {
|
if ((float)n1 * n2 >= (float)FFT2D_THREADS_BEGIN_N) {
|
||||||
ddxt2d0_subth(n1, n2, 1, isgn, a, ip, w);
|
ddxt2d0_subth(n1, n2, 1, isgn, a, ip, w);
|
||||||
ddxt2d_subth(n1, n2, 1, isgn, a, t, ip, w);
|
ddxt2d_subth(n1, n2, 1, isgn, a, t, ip, w);
|
||||||
} else
|
} else
|
||||||
@ -901,15 +801,8 @@ void ddst2d(int n1, int n2, int isgn, float** a, float* t, int* ip, float* w)
|
|||||||
|
|
||||||
/* -------- child routines -------- */
|
/* -------- child routines -------- */
|
||||||
|
|
||||||
void cdft2d_sub(int n1,
|
void cdft2d_sub(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
int n2,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w)
|
|
||||||
{
|
{
|
||||||
void cdft(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
if (n2 > 4) {
|
if (n2 > 4) {
|
||||||
@ -967,7 +860,7 @@ void cdft2d_sub(int n1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rdft2d_sub(int n1, int isgn, float** a)
|
void rdft2d_sub(int n1, int isgn, float **a)
|
||||||
{
|
{
|
||||||
int n1h, i, j;
|
int n1h, i, j;
|
||||||
float xi;
|
float xi;
|
||||||
@ -994,17 +887,8 @@ void rdft2d_sub(int n1, int isgn, float** a)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddxt2d_sub(int n1,
|
void ddxt2d_sub(int n1, int n2, int ics, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w)
|
|
||||||
{
|
{
|
||||||
void ddct(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddst(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
if (n2 > 2) {
|
if (n2 > 2) {
|
||||||
@ -1061,22 +945,16 @@ struct fft2d_arg_st
|
|||||||
int n2;
|
int n2;
|
||||||
int ic;
|
int ic;
|
||||||
int isgn;
|
int isgn;
|
||||||
float** a;
|
float **a;
|
||||||
float* t;
|
float *t;
|
||||||
int* ip;
|
int *ip;
|
||||||
float* w;
|
float *w;
|
||||||
};
|
};
|
||||||
typedef struct fft2d_arg_st fft2d_arg_t;
|
typedef struct fft2d_arg_st fft2d_arg_t;
|
||||||
|
|
||||||
void xdft2d0_subth(int n1,
|
void xdft2d0_subth(int n1, int n2, int icr, int isgn, float **a, int *ip, float *w)
|
||||||
int n2,
|
|
||||||
int icr,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
int* ip,
|
|
||||||
float* w)
|
|
||||||
{
|
{
|
||||||
void* xdft2d0_th(void* p);
|
void *xdft2d0_th(void *p);
|
||||||
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
||||||
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
||||||
int nthread, i;
|
int nthread, i;
|
||||||
@ -1102,15 +980,8 @@ void xdft2d0_subth(int n1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cdft2d_subth(int n1,
|
void cdft2d_subth(int n1, int n2, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
int n2,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w)
|
|
||||||
{
|
{
|
||||||
void* cdft2d_th(void* p);
|
|
||||||
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
||||||
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
||||||
int nthread, nt, i;
|
int nthread, nt, i;
|
||||||
@ -1140,15 +1011,8 @@ void cdft2d_subth(int n1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddxt2d0_subth(int n1,
|
void ddxt2d0_subth(int n1, int n2, int ics, int isgn, float **a, int *ip, float *w)
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
int* ip,
|
|
||||||
float* w)
|
|
||||||
{
|
{
|
||||||
void* ddxt2d0_th(void* p);
|
|
||||||
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
||||||
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
||||||
int nthread, i;
|
int nthread, i;
|
||||||
@ -1174,16 +1038,8 @@ void ddxt2d0_subth(int n1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ddxt2d_subth(int n1,
|
void ddxt2d_subth(int n1, int n2, int ics, int isgn, float **a, float *t, int *ip, float *w)
|
||||||
int n2,
|
|
||||||
int ics,
|
|
||||||
int isgn,
|
|
||||||
float** a,
|
|
||||||
float* t,
|
|
||||||
int* ip,
|
|
||||||
float* w)
|
|
||||||
{
|
{
|
||||||
void* ddxt2d_th(void* p);
|
|
||||||
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
fft2d_thread_t th[FFT2D_MAX_THREADS];
|
||||||
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
fft2d_arg_t ag[FFT2D_MAX_THREADS];
|
||||||
int nthread, nt, i;
|
int nthread, nt, i;
|
||||||
@ -1214,22 +1070,20 @@ void ddxt2d_subth(int n1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void* xdft2d0_th(void* p)
|
void *xdft2d0_th(void *p)
|
||||||
{
|
{
|
||||||
void cdft(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void rdft(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
int nthread, n0, n1, n2, icr, isgn, *ip, i;
|
int nthread, n0, n1, n2, icr, isgn, *ip, i;
|
||||||
float **a, *w;
|
float **a, *w;
|
||||||
|
|
||||||
nthread = ((fft2d_arg_t*) p)->nthread;
|
nthread = ((fft2d_arg_t *)p)->nthread;
|
||||||
n0 = ((fft2d_arg_t*) p)->n0;
|
n0 = ((fft2d_arg_t *)p)->n0;
|
||||||
n1 = ((fft2d_arg_t*) p)->n1;
|
n1 = ((fft2d_arg_t *)p)->n1;
|
||||||
n2 = ((fft2d_arg_t*) p)->n2;
|
n2 = ((fft2d_arg_t *)p)->n2;
|
||||||
icr = ((fft2d_arg_t*) p)->ic;
|
icr = ((fft2d_arg_t *)p)->ic;
|
||||||
isgn = ((fft2d_arg_t*) p)->isgn;
|
isgn = ((fft2d_arg_t *)p)->isgn;
|
||||||
a = ((fft2d_arg_t*) p)->a;
|
a = ((fft2d_arg_t *)p)->a;
|
||||||
ip = ((fft2d_arg_t*) p)->ip;
|
ip = ((fft2d_arg_t *)p)->ip;
|
||||||
w = ((fft2d_arg_t*) p)->w;
|
w = ((fft2d_arg_t *)p)->w;
|
||||||
if (icr == 0) {
|
if (icr == 0) {
|
||||||
for (i = n0; i < n1; i += nthread) {
|
for (i = n0; i < n1; i += nthread) {
|
||||||
cdft(n2, isgn, a[i], ip, w);
|
cdft(n2, isgn, a[i], ip, w);
|
||||||
@ -1239,24 +1093,23 @@ void* xdft2d0_th(void* p)
|
|||||||
rdft(n2, isgn, a[i], ip, w);
|
rdft(n2, isgn, a[i], ip, w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (void*) 0;
|
return (void *)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* cdft2d_th(void* p)
|
void *cdft2d_th(void *p)
|
||||||
{
|
{
|
||||||
void cdft(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
int nthread, n0, n1, n2, isgn, *ip, i, j;
|
int nthread, n0, n1, n2, isgn, *ip, i, j;
|
||||||
float **a, *t, *w;
|
float **a, *t, *w;
|
||||||
|
|
||||||
nthread = ((fft2d_arg_t*) p)->nthread;
|
nthread = ((fft2d_arg_t *)p)->nthread;
|
||||||
n0 = ((fft2d_arg_t*) p)->n0;
|
n0 = ((fft2d_arg_t *)p)->n0;
|
||||||
n1 = ((fft2d_arg_t*) p)->n1;
|
n1 = ((fft2d_arg_t *)p)->n1;
|
||||||
n2 = ((fft2d_arg_t*) p)->n2;
|
n2 = ((fft2d_arg_t *)p)->n2;
|
||||||
isgn = ((fft2d_arg_t*) p)->isgn;
|
isgn = ((fft2d_arg_t *)p)->isgn;
|
||||||
a = ((fft2d_arg_t*) p)->a;
|
a = ((fft2d_arg_t *)p)->a;
|
||||||
t = ((fft2d_arg_t*) p)->t;
|
t = ((fft2d_arg_t *)p)->t;
|
||||||
ip = ((fft2d_arg_t*) p)->ip;
|
ip = ((fft2d_arg_t *)p)->ip;
|
||||||
w = ((fft2d_arg_t*) p)->w;
|
w = ((fft2d_arg_t *)p)->w;
|
||||||
if (n2 > 4 * nthread) {
|
if (n2 > 4 * nthread) {
|
||||||
for (j = 8 * n0; j < n2; j += 8 * nthread) {
|
for (j = 8 * n0; j < n2; j += 8 * nthread) {
|
||||||
for (i = 0; i < n1; i++) {
|
for (i = 0; i < n1; i++) {
|
||||||
@ -1310,25 +1163,23 @@ void* cdft2d_th(void* p)
|
|||||||
a[i][2 * n0 + 1] = t[2 * i + 1];
|
a[i][2 * n0 + 1] = t[2 * i + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (void*) 0;
|
return (void *)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* ddxt2d0_th(void* p)
|
void *ddxt2d0_th(void *p)
|
||||||
{
|
{
|
||||||
void ddct(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddst(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
int nthread, n0, n1, n2, ics, isgn, *ip, i;
|
int nthread, n0, n1, n2, ics, isgn, *ip, i;
|
||||||
float **a, *w;
|
float **a, *w;
|
||||||
|
|
||||||
nthread = ((fft2d_arg_t*) p)->nthread;
|
nthread = ((fft2d_arg_t *)p)->nthread;
|
||||||
n0 = ((fft2d_arg_t*) p)->n0;
|
n0 = ((fft2d_arg_t *)p)->n0;
|
||||||
n1 = ((fft2d_arg_t*) p)->n1;
|
n1 = ((fft2d_arg_t *)p)->n1;
|
||||||
n2 = ((fft2d_arg_t*) p)->n2;
|
n2 = ((fft2d_arg_t *)p)->n2;
|
||||||
ics = ((fft2d_arg_t*) p)->ic;
|
ics = ((fft2d_arg_t *)p)->ic;
|
||||||
isgn = ((fft2d_arg_t*) p)->isgn;
|
isgn = ((fft2d_arg_t *)p)->isgn;
|
||||||
a = ((fft2d_arg_t*) p)->a;
|
a = ((fft2d_arg_t *)p)->a;
|
||||||
ip = ((fft2d_arg_t*) p)->ip;
|
ip = ((fft2d_arg_t *)p)->ip;
|
||||||
w = ((fft2d_arg_t*) p)->w;
|
w = ((fft2d_arg_t *)p)->w;
|
||||||
if (ics == 0) {
|
if (ics == 0) {
|
||||||
for (i = n0; i < n1; i += nthread) {
|
for (i = n0; i < n1; i += nthread) {
|
||||||
ddct(n2, isgn, a[i], ip, w);
|
ddct(n2, isgn, a[i], ip, w);
|
||||||
@ -1338,26 +1189,24 @@ void* ddxt2d0_th(void* p)
|
|||||||
ddst(n2, isgn, a[i], ip, w);
|
ddst(n2, isgn, a[i], ip, w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (void*) 0;
|
return (void *)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* ddxt2d_th(void* p)
|
void *ddxt2d_th(void *p)
|
||||||
{
|
{
|
||||||
void ddct(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
void ddst(int n, int isgn, float* a, int* ip, float* w);
|
|
||||||
int nthread, n0, n1, n2, ics, isgn, *ip, i, j;
|
int nthread, n0, n1, n2, ics, isgn, *ip, i, j;
|
||||||
float **a, *t, *w;
|
float **a, *t, *w;
|
||||||
|
|
||||||
nthread = ((fft2d_arg_t*) p)->nthread;
|
nthread = ((fft2d_arg_t *)p)->nthread;
|
||||||
n0 = ((fft2d_arg_t*) p)->n0;
|
n0 = ((fft2d_arg_t *)p)->n0;
|
||||||
n1 = ((fft2d_arg_t*) p)->n1;
|
n1 = ((fft2d_arg_t *)p)->n1;
|
||||||
n2 = ((fft2d_arg_t*) p)->n2;
|
n2 = ((fft2d_arg_t *)p)->n2;
|
||||||
ics = ((fft2d_arg_t*) p)->ic;
|
ics = ((fft2d_arg_t *)p)->ic;
|
||||||
isgn = ((fft2d_arg_t*) p)->isgn;
|
isgn = ((fft2d_arg_t *)p)->isgn;
|
||||||
a = ((fft2d_arg_t*) p)->a;
|
a = ((fft2d_arg_t *)p)->a;
|
||||||
t = ((fft2d_arg_t*) p)->t;
|
t = ((fft2d_arg_t *)p)->t;
|
||||||
ip = ((fft2d_arg_t*) p)->ip;
|
ip = ((fft2d_arg_t *)p)->ip;
|
||||||
w = ((fft2d_arg_t*) p)->w;
|
w = ((fft2d_arg_t *)p)->w;
|
||||||
if (n2 > 2 * nthread) {
|
if (n2 > 2 * nthread) {
|
||||||
for (j = 4 * n0; j < n2; j += 4 * nthread) {
|
for (j = 4 * n0; j < n2; j += 4 * nthread) {
|
||||||
for (i = 0; i < n1; i++) {
|
for (i = 0; i < n1; i++) {
|
||||||
@ -1413,7 +1262,7 @@ void* ddxt2d_th(void* p)
|
|||||||
a[i][n0] = t[i];
|
a[i][n0] = t[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (void*) 0;
|
return (void *)0;
|
||||||
}
|
}
|
||||||
#endif /* USE_FFT2D_THREADS */
|
#endif /* USE_FFT2D_THREADS */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user