3737#include <arm_neon.h>
3838
3939#define NE10_CPX_ADD_NEON_F32 (Z ,A ,B ) do { \
40- Z.val[0] = A.val[0] + B.val[0]; \
41- Z.val[1] = A.val[1] + B.val[1]; \
40+ Z.val[0] = vaddq_f32( A.val[0], B.val[0]) ; \
41+ Z.val[1] = vaddq_f32( A.val[1], B.val[1]) ; \
4242} while (0);
4343
4444#define NE10_CPX_SUB_NEON_F32 (Z ,A ,B ) do { \
45- Z.val[0] = A.val[0] - B.val[0]; \
46- Z.val[1] = A.val[1] - B.val[1]; \
45+ Z.val[0] = vsubq_f32( A.val[0] , B.val[0]) ; \
46+ Z.val[1] = vsubq_f32( A.val[1] , B.val[1]) ; \
4747} while (0);
4848
4949#define NE10_CPX_MUL_NEON_F32 (Z ,A ,B ) do { \
111111#define VDUPQ_N_F32 (VAR ) { VAR, VAR, VAR, VAR }
112112
113113#define CONST_TW_81 0.70710678f
114- #define CONST_TW_81N -0.70710678f
115-
116- static const float32x4_t Q_TW_81 = VDUPQ_N_F32 (CONST_TW_81 );
117- static const float32x4_t Q_TW_81N = VDUPQ_N_F32 (CONST_TW_81N );
114+ #define CONST_TW_81N (-0.70710678f)
118115
119116#define DIV_TW81 1.4142136f
120- #define DIV_TW81N -1.4142136f
121-
122- static const float32x4_t DIV_TW81_NEON = VDUPQ_N_F32 (DIV_TW81 );
123- static const float32x4_t DIV_TW81N_NEON = VDUPQ_N_F32 (DIV_TW81N );
117+ #define DIV_TW81N (-1.4142136f)
124118
125119#define NE10_RADIX8x4_R2C_NEON_KERNEL_S1 (Q_OUT ,Q_IN ) do { \
126120 Q_OUT ## 0 = vaddq_f32 (Q_IN ## 0, Q_IN ## 4); \
@@ -131,8 +125,8 @@ static const float32x4_t DIV_TW81N_NEON = VDUPQ_N_F32(DIV_TW81N);
131125 Q_OUT ## 5 = vsubq_f32 (Q_IN ## 2, Q_IN ## 6); \
132126 Q_OUT ## 6 = vaddq_f32 (Q_IN ## 3, Q_IN ## 7); \
133127 Q_OUT ## 7 = vsubq_f32 (Q_IN ## 3, Q_IN ## 7); \
134- Q_OUT ## 3 = vmulq_f32 (Q_OUT ## 3, Q_TW_81 ); \
135- Q_OUT ## 7 = vmulq_f32 (Q_OUT ## 7, Q_TW_81N ); \
128+ Q_OUT ## 3 = vmulq_n_f32 (Q_OUT ## 3, CONST_TW_81 ); \
129+ Q_OUT ## 7 = vmulq_n_f32 (Q_OUT ## 7, CONST_TW_81N ); \
136130} while(0);
137131
138132#define NE10_RADIX8x4_R2C_NEON_KERNEL_S2 (Q_OUT ,Q_IN ) do { \
@@ -172,8 +166,8 @@ static const float32x4_t DIV_TW81N_NEON = VDUPQ_N_F32(DIV_TW81N);
172166} while (0);
173167
174168#define NE10_RADIX8x4_C2R_NEON_KERNEL_S2 (Q_OUT ,Q_IN ) do { \
175- Q_IN ## 3 = vmulq_f32 (Q_IN ## 3,DIV_TW81_NEON ); \
176- Q_IN ## 7 = vmulq_f32 (Q_IN ## 7,DIV_TW81N_NEON ); \
169+ Q_IN ## 3 = vmulq_n_f32 (Q_IN ## 3,DIV_TW81 ); \
170+ Q_IN ## 7 = vmulq_n_f32 (Q_IN ## 7,DIV_TW81N ); \
177171 Q_OUT ## 0 = vaddq_f32(Q_IN ## 0, Q_IN ## 1); \
178172 Q_OUT ## 4 = vsubq_f32(Q_IN ## 0, Q_IN ## 1); \
179173 Q_OUT ## 1 = vaddq_f32(Q_IN ## 2, Q_IN ## 3); \
@@ -330,8 +324,8 @@ static const float32x4_t DIV_TW81N_NEON = VDUPQ_N_F32(DIV_TW81N);
330324
331325#define NE10_RADIX4x4_R2C_TW_NEON_KERNEL_LAST (Q_OUT ,Q_IN ) do { \
332326 float32x4_t Q_TMP; \
333- Q_IN ## 1 = vmulq_f32 (Q_IN ## 1, Q_TW_81 ); \
334- Q_IN ## 3 = vmulq_f32 (Q_IN ## 3, Q_TW_81 ); \
327+ Q_IN ## 1 = vmulq_n_f32 (Q_IN ## 1, CONST_TW_81 ); \
328+ Q_IN ## 3 = vmulq_n_f32 (Q_IN ## 3, CONST_TW_81 ); \
335329 Q_TMP = vsubq_f32(Q_IN ## 1, Q_IN ## 3); \
336330 Q_IN ## 3 = vaddq_f32(Q_IN ## 1, Q_IN ## 3); \
337331 Q_IN ## 1 = Q_TMP; \
@@ -352,8 +346,8 @@ static const float32x4_t DIV_TW81N_NEON = VDUPQ_N_F32(DIV_TW81N);
352346 Q_TMP = vaddq_f32(Q_OUT ## 1, Q_OUT ## 3); \
353347 Q_OUT ## 3 = vsubq_f32(Q_OUT ## 3, Q_OUT ## 1); \
354348 Q_OUT ## 1 = Q_TMP; \
355- Q_OUT ## 1 = vmulq_f32 ( Q_OUT ## 1, DIV_TW81_NEON ); \
356- Q_OUT ## 3 = vmulq_f32 ( Q_OUT ## 3, DIV_TW81_NEON ); \
349+ Q_OUT ## 1 = vmulq_n_f32 ( Q_OUT ## 1, DIV_TW81 ); \
350+ Q_OUT ## 3 = vmulq_n_f32 ( Q_OUT ## 3, DIV_TW81 ); \
357351 Q_OUT ## 0 = vaddq_f32( Q_OUT ## 0, Q_OUT ## 0 ); \
358352 Q_OUT ## 2 = vaddq_f32( Q_OUT ## 2, Q_OUT ## 2 ); \
359353} while(0);
0 commit comments