47 #include "NE10_types.h"
49 #ifndef NE10_FFT_CPLX_OPS_H
50 #define NE10_FFT_CPLX_OPS_H
54 static inline void ne10_swap_ptr(T *&ptr_a, T *&ptr_b)
56 ptr_a = (T *)((intptr_t)(ptr_a) ^ (intptr_t)(ptr_b));
57 ptr_b = (T *)((intptr_t)(ptr_a) ^ (intptr_t)(ptr_b));
58 ptr_a = (T *)((intptr_t)(ptr_a) ^ (intptr_t)(ptr_b));
61 #define ne10_swap_ptr(X,Y) \
63 X = (void *)((intptr_t)(X) ^ (intptr_t)(Y)); \
64 Y = (void *)((intptr_t)(X) ^ (intptr_t)(Y)); \
65 X = (void *)((intptr_t)(X) ^ (intptr_t)(Y)); \
70 #define NE10_S_MUL(X,Y) ((X) * (Y))
72 #define NE10_CPX_ADD(Z,A,B) \
78 #define NE10_CPX_SUB(Z,A,B) \
84 #define NE10_CPX_ADDTO(Z,X) NE10_CPX_ADD(Z,X,Z)
86 #define NE10_CPX_MUL_F32(Z,A,B) \
88 ne10_float32_t ARBR = A.r * B.r; \
89 ne10_float32_t AIBI = A.i * B.i; \
90 ne10_float32_t ARBI = A.r * B.i; \
91 ne10_float32_t AIBR = A.i * B.r; \
96 #define NE10_CPX_CONJ_MUL_F32(Z,A,B) \
98 ne10_float32_t ARBR = A.r * B.r; \
99 ne10_float32_t AIBI = A.i * B.i; \
100 ne10_float32_t ARBI = A.r * B.i; \
101 ne10_float32_t AIBR = A.i * B.r; \
106 #define NE10_CPX_MUL_TW_F32(Z,TW) \
108 ne10_fft_cpx_float32_t tmp; \
109 NE10_CPX_MUL(tmp,Z,TW); \
113 #define NE10_CPX_MUL_INV_TW_F32(Z,TW) \
115 ne10_fft_cpx_float32_t tmp; \
116 NE10_CPX_CONJ_MUL(tmp,Z,TW); \