Skip to content

Commit f68b453

Browse files
FFT corrections for MSVC
1 parent 6dfc615 commit f68b453

1 file changed

Lines changed: 40 additions & 40 deletions

File tree

Ne10/CMSIS_NE10_fft_generic_float32.neonintrisic.c

Lines changed: 40 additions & 40 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 = 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;
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);
126126
}
127127

128128
static inline void NE10_LOAD_TW_AND_MUL (CPLX *scratch_in,
@@ -203,34 +203,34 @@ static inline void NE10_FFT5_MUL_TW_NEON (CPLX scratch_out[5],
203203
////////////////
204204
static inline void NE10_FFT2_CONJ (CPLX scratch_out[2])
205205
{
206-
scratch_out[0].val[1] = -scratch_out[0].val[1];
207-
scratch_out[1].val[1] = -scratch_out[1].val[1];
206+
scratch_out[0].val[1] = vnegq_f32(scratch_out[0].val[1]);
207+
scratch_out[1].val[1] = vnegq_f32(scratch_out[1].val[1]);
208208
}
209209

210210
static inline void NE10_FFT3_CONJ (CPLX scratch_out[3])
211211
{
212212
NE10_FFT2_CONJ (scratch_out);
213-
scratch_out[2].val[1] = -scratch_out[2].val[1];
213+
scratch_out[2].val[1] = vnegq_f32(scratch_out[2].val[1]);
214214
}
215215

216216
static inline void NE10_FFT4_CONJ (CPLX scratch_out[4])
217217
{
218218
NE10_FFT3_CONJ (scratch_out);
219-
scratch_out[3].val[1] = -scratch_out[3].val[1];
219+
scratch_out[3].val[1] = vnegq_f32(scratch_out[3].val[1]);
220220
}
221221

222222
static inline void NE10_FFT5_CONJ (CPLX scratch_out[5])
223223
{
224224
NE10_FFT4_CONJ (scratch_out);
225-
scratch_out[4].val[1] = -scratch_out[4].val[1];
225+
scratch_out[4].val[1] = vnegq_f32(scratch_out[4].val[1]);
226226
}
227227

228228
static inline void NE10_FFT8_CONJ (CPLX scratch_out[8])
229229
{
230230
NE10_FFT5_CONJ (scratch_out);
231-
scratch_out[5].val[1] = -scratch_out[5].val[1];
232-
scratch_out[6].val[1] = -scratch_out[6].val[1];
233-
scratch_out[7].val[1] = -scratch_out[7].val[1];
231+
scratch_out[5].val[1] = vnegq_f32(scratch_out[5].val[1]);
232+
scratch_out[6].val[1] = vnegq_f32(scratch_out[6].val[1]);
233+
scratch_out[7].val[1] = vnegq_f32(scratch_out[7].val[1]);
234234
}
235235

236236
/////////////////////////////////////////////////////////////////////////////
@@ -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] *= one_by_fft_neon;
245-
scratch_out[0].val[1] *= one_by_fft_neon;
246-
scratch_out[1].val[0] *= one_by_fft_neon;
247-
scratch_out[1].val[1] *= one_by_fft_neon;
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);
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] *= one_by_fft_neon;
260-
scratch_out[2].val[1] *= 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);
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] *= one_by_fft_neon;
273-
scratch_out[3].val[1] *= 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);
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] *= one_by_fft_neon;
286-
scratch_out[4].val[1] *= 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);
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] *= one_by_fft_neon;
299-
scratch_out[5].val[1] *= one_by_fft_neon;
300-
scratch_out[6].val[0] *= one_by_fft_neon;
301-
scratch_out[6].val[1] *= one_by_fft_neon;
302-
scratch_out[7].val[0] *= one_by_fft_neon;
303-
scratch_out[7].val[1] *= 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);
304304
#else
305305
(void) scratch_out;
306306
(void) one_by_fft_neon;
@@ -704,20 +704,20 @@ static void ne10_radix_3_butterfly_float32_neon_##ISFIRSTSTAGE##_##ISINVERSE##_#
704704
NE10_CPX_SUB_NEON_F32 (s[0], in[1], in[2]); \
705705
s[3] = in[0]; \
706706
\
707-
s[1].val[0] = - s[2].val[0] * HALF_NEON_F32; \
708-
s[1].val[1] = - s[2].val[1] * HALF_NEON_F32; \
707+
s[1].val[0] = vnegq_f32(vmulq_f32(s[2].val[0] , HALF_NEON_F32)); \
708+
s[1].val[1] = vnegq_f32(vmulq_f32(s[2].val[1] , HALF_NEON_F32)); \
709709
\
710-
s[1].val[0] += s[3].val[0]; \
711-
s[1].val[1] += s[3].val[1]; \
712-
s[0].val[0] *= TW_3IN_NEON_F32; \
713-
s[0].val[1] *= TW_3IN_NEON_F32; \
710+
s[1].val[0] = vaddq_f32(s[1].val[0],s[3].val[0]); \
711+
s[1].val[1] = vaddq_f32(s[1].val[1],s[3].val[1]); \
712+
s[0].val[0] = vmulq_f32(s[0].val[0],TW_3IN_NEON_F32); \
713+
s[0].val[1] = vmulq_f32(s[0].val[1],TW_3IN_NEON_F32); \
714714
\
715-
out[0].val[0] = s[3].val[0] + s[2].val[0]; \
716-
out[0].val[1] = s[3].val[1] + s[2].val[1]; \
717-
out[1].val[0] = s[1].val[0] - s[0].val[1]; \
718-
out[1].val[1] = s[1].val[1] + s[0].val[0]; \
719-
out[2].val[0] = s[1].val[0] + s[0].val[1]; \
720-
out[2].val[1] = s[1].val[1] - s[0].val[0]; \
715+
out[0].val[0] = vaddq_f32(s[3].val[0] , s[2].val[0]); \
716+
out[0].val[1] = vaddq_f32(s[3].val[1] , s[2].val[1]); \
717+
out[1].val[0] = vsubq_f32(s[1].val[0] , s[0].val[1]); \
718+
out[1].val[1] = vaddq_f32(s[1].val[1] , s[0].val[0]); \
719+
out[2].val[0] = vaddq_f32(s[1].val[0] , s[0].val[1]); \
720+
out[2].val[1] = vsubq_f32(s[1].val[1] , s[0].val[0]); \
721721
\
722722
if (ISINVERSE == 1) \
723723
{ \

0 commit comments

Comments
 (0)