CMSIS-DSP: Added a ARM_MATH_FLOAT16 compilation option.
It is automatically enabled when MVE support is enabled.
diff --git a/CMSIS/DSP/Include/arm_math.h b/CMSIS/DSP/Include/arm_math.h
index 092bcbb..52b3f53 100644
--- a/CMSIS/DSP/Include/arm_math.h
+++ b/CMSIS/DSP/Include/arm_math.h
@@ -385,17 +385,31 @@
#define F64_MAX DBL_MAX
#define F32_MAX FLT_MAX
+
+#if defined(ARM_MATH_FLOAT16)
#define F16_MAX (float16_t)FLT_MAX
+#endif
+
#define F64_MIN -DBL_MAX
#define F32_MIN -FLT_MAX
+
+#if defined(ARM_MATH_FLOAT16)
#define F16_MIN -(float16_t)FLT_MAX
+#endif
#define F64_ABSMAX DBL_MAX
#define F32_ABSMAX FLT_MAX
+
+#if defined(ARM_MATH_FLOAT16)
#define F16_ABSMAX (float16_t)FLT_MAX
+#endif
+
#define F64_ABSMIN (float64_t)0.0
#define F32_ABSMIN (float32_t)0.0
+
+#if defined(ARM_MATH_FLOAT16)
#define F16_ABSMIN (float16_t)0.0
+#endif
#define Q31_MAX (0x7FFFFFFFL)
#define Q15_MAX (0x7FFF)
@@ -422,10 +436,12 @@
#if defined (ARM_MATH_HELIUM)
#define ARM_MATH_MVEF
+ #define ARM_MATH_FLOAT16
#endif
#if defined (ARM_MATH_MVEF)
#define ARM_MATH_MVEI
+ #define ARM_MATH_FLOAT16
#endif
#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI)
@@ -608,10 +624,12 @@
*/
typedef float32x4_t f32x4_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit floating-point 128-bit vector data type
*/
typedef __ALIGNED(2) float16x8_t f16x8_t;
+#endif
/**
* @brief 32-bit floating-point 128-bit vector pair data type
@@ -623,6 +641,7 @@
*/
typedef float32x4x4_t f32x4x4_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit floating-point 128-bit vector pair data type
*/
@@ -632,6 +651,7 @@
* @brief 16-bit floating-point 128-bit vector quadruplet data type
*/
typedef float16x8x4_t f16x8x4_t;
+#endif
/**
* @brief 32-bit ubiquitous 128-bit vector data type
@@ -642,6 +662,7 @@
int32x4_t i;
} any32x4_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit ubiquitous 128-bit vector data type
*/
@@ -650,6 +671,7 @@
float16x8_t f;
int16x8_t i;
} any16x8_t;
+#endif
#endif
@@ -674,21 +696,24 @@
*/
typedef float32x2_t f32x2_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit float 64-bit vector data type.
*/
typedef __ALIGNED(2) float16x4_t f16x4_t;
+#endif
/**
* @brief 32-bit floating-point 128-bit vector triplet data type
*/
typedef float32x4x3_t f32x4x3_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit floating-point 128-bit vector triplet data type
*/
typedef float16x8x3_t f16x8x3_t;
-
+#endif
/**
* @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format
@@ -720,6 +745,7 @@
*/
typedef float32x2x4_t f32x2x4_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit floating-point 64-bit vector pair data type
*/
@@ -734,6 +760,7 @@
* @brief 16-bit floating-point 64-bit vector quadruplet data type
*/
typedef float16x4x4_t f16x4x4_t;
+#endif
/**
* @brief 32-bit fractional 64-bit vector pair data type in 1.31 format
@@ -789,6 +816,7 @@
int32x2_t i;
} any32x2_t;
+#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit ubiquitous 64-bit vector data type
*/
@@ -797,6 +825,7 @@
float16x4_t f;
int16x4_t i;
} any16x4_t;
+#endif
/**
* @brief 32-bit status 64-bit vector data type.
diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c
index c10b50a..ccae6d3 100644
--- a/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c
+++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c
@@ -60,6 +60,7 @@
@return none
*/
+
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h"
diff --git a/CMSIS/DSP/Source/configDsp.cmake b/CMSIS/DSP/Source/configDsp.cmake
index b472be0..868132f 100644
--- a/CMSIS/DSP/Source/configDsp.cmake
+++ b/CMSIS/DSP/Source/configDsp.cmake
@@ -26,6 +26,10 @@
target_include_directories(${project} PRIVATE "${root}/CMSIS/DSP/ComputeLibrary/Include")
endif()
+if (FLOAT16)
+ target_compile_definitions(${project} PRIVATE ARM_MATH_FLOAT16)
+endif()
+
endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Source/Tests/BasicTestsQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/BasicTestsQ31.cpp
index 5e9a727..96e43e0 100755
--- a/CMSIS/DSP/Testing/Source/Tests/BasicTestsQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/BasicTestsQ31.cpp
@@ -9,8 +9,8 @@
a double precision computation.
*/
-#define ABS_ERROR_Q31 2
-#define ABS_ERROR_Q63 (1<<16)
+#define ABS_ERROR_Q31 ((q31_t)2)
+#define ABS_ERROR_Q63 ((q63_t)(1<<16))
#define ONEHALF 0x40000000
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp
index d1df673..e93f218 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp
@@ -12,8 +12,8 @@
a double precision computation.
*/
-#define ABS_ERROR_Q31 100
-#define ABS_ERROR_Q63 (1<<18)
+#define ABS_ERROR_Q31 ((q31_t)(100))
+#define ABS_ERROR_Q63 ((q63_t)(1<<18))
void StatsTestsQ31::test_max_q31()
{
diff --git a/CMSIS/DSP/Toolchain/GCC.cmake b/CMSIS/DSP/Toolchain/GCC.cmake
index b495c9d..c2c96a4 100644
--- a/CMSIS/DSP/Toolchain/GCC.cmake
+++ b/CMSIS/DSP/Toolchain/GCC.cmake
@@ -55,8 +55,8 @@
if (ARM_CPU STREQUAL "cortex-a5" )
if ((NEON OR NEONEXPERIMENTAL))
- target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
- target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=neon-vfpv4")
+ target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=neon-vfpv4")
else()
target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")