Skip to content

Commit 03cab23

Browse files
FFT fixes for MSVC
1 parent f68b453 commit 03cab23

1 file changed

Lines changed: 29 additions & 29 deletions

File tree

Ne10/CMSIS_NE10_fft_generic_float32.neonintrisic.c

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,10 @@ static inline void FFT4_FCU_INPLACE (ne10_fft_cpx_float32_t scratch_out[4])
119119
NE10_CPX_SUB (scratch_out[2], scratch[0], scratch[2]);
120120
NE10_CPX_ADD (scratch_out[0], scratch[0], scratch[2]);
121121

122-
scratch_out[1].r = vaddq_f32(scratch[1].r , scratch[3].i);
123-
scratch_out[1].i = vsubq_f32(scratch[1].i , scratch[3].r);
124-
scratch_out[3].r = vsubq_f32(scratch[1].r , scratch[3].i);
125-
scratch_out[3].i = vaddq_f32(scratch[1].i , scratch[3].r);
122+
scratch_out[1].r = scratch[1].r + scratch[3].i;
123+
scratch_out[1].i = scratch[1].i - scratch[3].r;
124+
scratch_out[3].r = scratch[1].r - scratch[3].i;
125+
scratch_out[3].i = scratch[1].i + scratch[3].r;
126126
}
127127

128128
static inline void NE10_LOAD_TW_AND_MUL (CPLX *scratch_in,
@@ -131,8 +131,8 @@ static inline void NE10_LOAD_TW_AND_MUL (CPLX *scratch_in,
131131
CPLX scratch_tw;
132132
float32x4x2_t tmp=*scratch_in;
133133
float32x2_t d2_tmp = vld1_f32 ((ne10_float32_t *)ptr_in);
134-
scratch_tw.val[0] = NE10_REAL_DUP_NEON_F32 (d2_tmp[0]);
135-
scratch_tw.val[1] = NE10_REAL_DUP_NEON_F32 (d2_tmp[1]);
134+
scratch_tw.val[0] = NE10_REAL_DUP_NEON_F32 (vget_lane_f32(d2_tmp, 0));
135+
scratch_tw.val[1] = NE10_REAL_DUP_NEON_F32 (vget_lane_f32(d2_tmp, 1));
136136
NE10_CPX_MUL_NEON_F32 (tmp, tmp, scratch_tw);
137137
*scratch_in = tmp;
138138
}
@@ -141,7 +141,7 @@ static inline REAL NE10_S_MUL_NEON_F32 (const REAL vec,
141141
const ne10_float32_t scalar)
142142
{
143143
REAL scalar_neon = NE10_REAL_DUP_NEON_F32 (scalar);
144-
REAL result = scalar_neon * vec;
144+
REAL result = vmulq_n_f32(vec, scalar_neon);
145145
return result;
146146
}
147147

@@ -241,10 +241,10 @@ static inline void NE10_FFT2_SCALING (CPLX scratch_out[2],
241241
const REAL one_by_fft_neon)
242242
{
243243
#ifdef NE10_DSP_CFFT_SCALING
244-
scratch_out[0].val[0] = vmulq_n_f32(scratch_out[0].val[0] , one_by_fft_neon);
245-
scratch_out[0].val[1] = vmulq_n_f32(scratch_out[0].val[1] , one_by_fft_neon);
246-
scratch_out[1].val[0] = vmulq_n_f32(scratch_out[1].val[0] , one_by_fft_neon);
247-
scratch_out[1].val[1] = vmulq_n_f32(scratch_out[1].val[1] , one_by_fft_neon);
244+
scratch_out[0].val[0] = vmulq_f32(scratch_out[0].val[0] , one_by_fft_neon);
245+
scratch_out[0].val[1] = vmulq_f32(scratch_out[0].val[1] , one_by_fft_neon);
246+
scratch_out[1].val[0] = vmulq_f32(scratch_out[1].val[0] , one_by_fft_neon);
247+
scratch_out[1].val[1] = vmulq_f32(scratch_out[1].val[1] , one_by_fft_neon);
248248
#else
249249
(void) scratch_out;
250250
(void) one_by_fft_neon;
@@ -256,8 +256,8 @@ static inline void NE10_FFT3_SCALING (CPLX scratch_out[3],
256256
{
257257
#ifdef NE10_DSP_CFFT_SCALING
258258
NE10_FFT2_SCALING (scratch_out, one_by_fft_neon);
259-
scratch_out[2].val[0] = vmulq_n_f32(scratch_out[2].val[0] , one_by_fft_neon);
260-
scratch_out[2].val[1] = vmulq_n_f32(scratch_out[2].val[1] , one_by_fft_neon);
259+
scratch_out[2].val[0] = vmulq_f32(scratch_out[2].val[0] , one_by_fft_neon);
260+
scratch_out[2].val[1] = vmulq_f32(scratch_out[2].val[1] , one_by_fft_neon);
261261
#else
262262
(void) scratch_out;
263263
(void) one_by_fft_neon;
@@ -269,8 +269,8 @@ static inline void NE10_FFT4_SCALING (CPLX scratch_out[4],
269269
{
270270
#ifdef NE10_DSP_CFFT_SCALING
271271
NE10_FFT3_SCALING (scratch_out, one_by_fft_neon);
272-
scratch_out[3].val[0] = vmulq_n_f32(scratch_out[3].val[0] , one_by_fft_neon);
273-
scratch_out[3].val[1] = vmulq_n_f32(scratch_out[3].val[1] , one_by_fft_neon);
272+
scratch_out[3].val[0] = vmulq_f32(scratch_out[3].val[0] , one_by_fft_neon);
273+
scratch_out[3].val[1] = vmulq_f32(scratch_out[3].val[1] , one_by_fft_neon);
274274
#else
275275
(void) scratch_out;
276276
(void) one_by_fft_neon;
@@ -282,8 +282,8 @@ static inline void NE10_FFT5_SCALING (CPLX scratch_out[5],
282282
{
283283
#ifdef NE10_DSP_CFFT_SCALING
284284
NE10_FFT4_SCALING (scratch_out, one_by_fft_neon);
285-
scratch_out[4].val[0] = vmulq_n_f32(scratch_out[4].val[0] , one_by_fft_neon);
286-
scratch_out[4].val[1] = vmulq_n_f32(scratch_out[4].val[1] , one_by_fft_neon);
285+
scratch_out[4].val[0] = vmulq_f32(scratch_out[4].val[0] , one_by_fft_neon);
286+
scratch_out[4].val[1] = vmulq_f32(scratch_out[4].val[1] , one_by_fft_neon);
287287
#else
288288
(void) scratch_out;
289289
(void) one_by_fft_neon;
@@ -295,12 +295,12 @@ static inline void NE10_FFT8_SCALING (CPLX scratch_out[8],
295295
{
296296
#ifdef NE10_DSP_CFFT_SCALING
297297
NE10_FFT5_SCALING (scratch_out, one_by_fft_neon);
298-
scratch_out[5].val[0] = vmulq_n_f32(scratch_out[5].val[0] , one_by_fft_neon);
299-
scratch_out[5].val[1] = vmulq_n_f32(scratch_out[5].val[1] , one_by_fft_neon);
300-
scratch_out[6].val[0] = vmulq_n_f32(scratch_out[6].val[0] , one_by_fft_neon);
301-
scratch_out[6].val[1] = vmulq_n_f32(scratch_out[6].val[1] , one_by_fft_neon);
302-
scratch_out[7].val[0] = vmulq_n_f32(scratch_out[7].val[0] , one_by_fft_neon);
303-
scratch_out[7].val[1] = vmulq_n_f32(scratch_out[7].val[1] , one_by_fft_neon);
298+
scratch_out[5].val[0] = vmulq_f32(scratch_out[5].val[0] , one_by_fft_neon);
299+
scratch_out[5].val[1] = vmulq_f32(scratch_out[5].val[1] , one_by_fft_neon);
300+
scratch_out[6].val[0] = vmulq_f32(scratch_out[6].val[0] , one_by_fft_neon);
301+
scratch_out[6].val[1] = vmulq_f32(scratch_out[6].val[1] , one_by_fft_neon);
302+
scratch_out[7].val[0] = vmulq_f32(scratch_out[7].val[0] , one_by_fft_neon);
303+
scratch_out[7].val[1] = vmulq_f32(scratch_out[7].val[1] , one_by_fft_neon);
304304
#else
305305
(void) scratch_out;
306306
(void) one_by_fft_neon;
@@ -369,10 +369,10 @@ static inline void NE10_FFT4_FUC_INPLACE_NEON_F32 (CPLX scratch_out[4])
369369
NE10_CPX_SUB_NEON_F32 (scratch_out[2], scratch[0], scratch[2]);
370370
NE10_CPX_ADD_NEON_F32 (scratch_out[0], scratch[0], scratch[2]);
371371

372-
scratch_out[1].val[0] = scratch[1].val[0] + scratch[3].val[1];
373-
scratch_out[1].val[1] = scratch[1].val[1] - scratch[3].val[0];
374-
scratch_out[3].val[0] = scratch[1].val[0] - scratch[3].val[1];
375-
scratch_out[3].val[1] = scratch[1].val[1] + scratch[3].val[0];
372+
scratch_out[1].val[0] = vaddq_f32(scratch[1].val[0] , scratch[3].val[1]);
373+
scratch_out[1].val[1] = vsubq_f32(scratch[1].val[1] , scratch[3].val[0]);
374+
scratch_out[3].val[0] = vsubq_f32(scratch[1].val[0] , scratch[3].val[1]);
375+
scratch_out[3].val[1] = vaddq_f32(scratch[1].val[1] , scratch[3].val[0]);
376376
}
377377

378378
#if 0
@@ -808,8 +808,8 @@ static void ne10_radix_5_butterfly_float32_neon_##ISFIRSTSTAGE##_##ISINVERSE##_#
808808
s[0] = in[0]; \
809809
s[5] = in[0]; \
810810
\
811-
in[0].val[0] = in[0].val[0] + s[1].val[0] + s[2].val[0]; \
812-
in[0].val[1] = in[0].val[1] + s[1].val[1] + s[2].val[1]; \
811+
in[0].val[0] = vaddq_f32(in[0].val[0] + vaddq_f32(s[1].val[0] + s[2].val[0])); \
812+
in[0].val[1] = vaddq_f32(in[0].val[1] + vaddq_f32(s[1].val[1] + s[2].val[1])); \
813813
\
814814
s[0].val[0] = NE10_S_MLA_NEON_F32 (s[0].val[0], s[1].val[0], TW_5A_F32.r);\
815815
s[0].val[1] = NE10_S_MLA_NEON_F32 (s[0].val[1], s[1].val[1], TW_5A_F32.r);\

0 commit comments

Comments
 (0)