Skip to content

Commit 7d9e9a1

Browse files
Remove FFT neon build issues with MSVC
1 parent 06d4405 commit 7d9e9a1

3 files changed

Lines changed: 22 additions & 32 deletions

File tree

Ne10/CMSIS_NE10_fft.neonintrinsic.h

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,10 @@
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);

Ne10/CMSIS_NE10_fft.neonintrinsic_f16.h

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,12 @@
117117
#define VDUPQ_N_F16(VAR) { VAR, VAR,VAR,VAR }
118118

119119
#define CONST_TW_81 0.70710678f16
120-
#define CONST_TW_81N -0.70710678f16
120+
#define CONST_TW_81N (-0.70710678f16)
121121

122-
static const float16x4_t Q_TW_81 = VDUPQ_N_F16(CONST_TW_81 );
123-
static const float16x4_t Q_TW_81N = VDUPQ_N_F16(CONST_TW_81N);
124122

125123
#define DIV_TW81 1.4142136f16
126-
#define DIV_TW81N -1.4142136f16
124+
#define DIV_TW81N (-1.4142136f16)
127125

128-
static const float16x4_t DIV_TW81_NEON = VDUPQ_N_F16(DIV_TW81);
129-
static const float16x4_t DIV_TW81N_NEON = VDUPQ_N_F16(DIV_TW81N);
130126

131127
#define NE10_RADIX8x4_R2C_NEON_KERNEL_S1(Q_OUT,Q_IN) do { \
132128
Q_OUT ## 0 = vadd_f16 (Q_IN ## 0, Q_IN ## 4); \
@@ -137,8 +133,8 @@ static const float16x4_t DIV_TW81N_NEON = VDUPQ_N_F16(DIV_TW81N);
137133
Q_OUT ## 5 = vsub_f16 (Q_IN ## 2, Q_IN ## 6); \
138134
Q_OUT ## 6 = vadd_f16 (Q_IN ## 3, Q_IN ## 7); \
139135
Q_OUT ## 7 = vsub_f16 (Q_IN ## 3, Q_IN ## 7); \
140-
Q_OUT ## 3 = vmul_f16 (Q_OUT ## 3, Q_TW_81 ); \
141-
Q_OUT ## 7 = vmul_f16 (Q_OUT ## 7, Q_TW_81N); \
136+
Q_OUT ## 3 = vmul_n_f16 (Q_OUT ## 3, CONST_TW_81 ); \
137+
Q_OUT ## 7 = vmul_n_f16 (Q_OUT ## 7, CONST_TW_81N); \
142138
} while(0);
143139

144140
#define NE10_RADIX8x4_R2C_NEON_KERNEL_S2(Q_OUT,Q_IN) do { \
@@ -178,8 +174,8 @@ static const float16x4_t DIV_TW81N_NEON = VDUPQ_N_F16(DIV_TW81N);
178174
} while (0);
179175

180176
#define NE10_RADIX8x4_C2R_NEON_KERNEL_S2(Q_OUT,Q_IN) do { \
181-
Q_IN ## 3 = vmul_f16(Q_IN ## 3,DIV_TW81_NEON); \
182-
Q_IN ## 7 = vmul_f16(Q_IN ## 7,DIV_TW81N_NEON); \
177+
Q_IN ## 3 = vmul_n_f16(Q_IN ## 3,DIV_TW81); \
178+
Q_IN ## 7 = vmul_n_f16(Q_IN ## 7,DIV_TW81N); \
183179
Q_OUT ## 0 = vadd_f16(Q_IN ## 0, Q_IN ## 1); \
184180
Q_OUT ## 4 = vsub_f16(Q_IN ## 0, Q_IN ## 1); \
185181
Q_OUT ## 1 = vadd_f16(Q_IN ## 2, Q_IN ## 3); \
@@ -336,8 +332,8 @@ static const float16x4_t DIV_TW81N_NEON = VDUPQ_N_F16(DIV_TW81N);
336332

337333
#define NE10_RADIX4x4_R2C_TW_NEON_KERNEL_LAST(Q_OUT,Q_IN) do { \
338334
float16x4_t Q_TMP; \
339-
Q_IN ## 1 = vmul_f16(Q_IN ## 1, Q_TW_81); \
340-
Q_IN ## 3 = vmul_f16(Q_IN ## 3, Q_TW_81); \
335+
Q_IN ## 1 = vmul_n_f16(Q_IN ## 1, CONST_TW_81); \
336+
Q_IN ## 3 = vmul_n_f16(Q_IN ## 3, CONST_TW_81); \
341337
Q_TMP = vsub_f16(Q_IN ## 1, Q_IN ## 3); \
342338
Q_IN ## 3 = vadd_f16(Q_IN ## 1, Q_IN ## 3); \
343339
Q_IN ## 1 = Q_TMP; \
@@ -358,8 +354,8 @@ static const float16x4_t DIV_TW81N_NEON = VDUPQ_N_F16(DIV_TW81N);
358354
Q_TMP = vadd_f16(Q_OUT ## 1, Q_OUT ## 3); \
359355
Q_OUT ## 3 = vsub_f16(Q_OUT ## 3, Q_OUT ## 1); \
360356
Q_OUT ## 1 = Q_TMP; \
361-
Q_OUT ## 1 = vmul_f16( Q_OUT ## 1, DIV_TW81_NEON); \
362-
Q_OUT ## 3 = vmul_f16( Q_OUT ## 3, DIV_TW81_NEON); \
357+
Q_OUT ## 1 = vmul_n_f16( Q_OUT ## 1, DIV_TW81); \
358+
Q_OUT ## 3 = vmul_n_f16( Q_OUT ## 3, DIV_TW81); \
363359
Q_OUT ## 0 = vadd_f16( Q_OUT ## 0, Q_OUT ## 0 ); \
364360
Q_OUT ## 2 = vadd_f16( Q_OUT ## 2, Q_OUT ## 2 ); \
365361
} while(0);

Source/FastMathFunctions/arm_atan2_q15.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ __STATIC_FORCEINLINE q15_t arm_atan_q15(q15_t y,q15_t x)
112112
/* Shift ratio by shift */
113113
if (shift >=0)
114114
{
115-
ratio = __SSAT(((q31_t) ratio << shift), 16);
115+
ratio = (q15_t)__SSAT(((q31_t) ratio << shift), 16);
116116
}
117117
else
118118
{
@@ -132,7 +132,7 @@ __STATIC_FORCEINLINE q15_t arm_atan_q15(q15_t y,q15_t x)
132132
/* Shift ratio by shift */
133133
if (shift >=0)
134134
{
135-
ratio = __SSAT(((q31_t) ratio << shift), 16);
135+
ratio = (q15_t)__SSAT(((q31_t) ratio << shift), 16);
136136
}
137137
else
138138
{

0 commit comments

Comments
 (0)