CMSIS-DSP: Added a ARM_MATH_FLOAT16 compilation option.

It is automatically enabled when MVE support is enabled.
pull/19/head
Christophe Favergeon 6 years ago
parent 2e12da1043
commit c19c41d261

@ -385,17 +385,31 @@ extern "C"
#define F64_MAX DBL_MAX #define F64_MAX DBL_MAX
#define F32_MAX FLT_MAX #define F32_MAX FLT_MAX
#if defined(ARM_MATH_FLOAT16)
#define F16_MAX (float16_t)FLT_MAX #define F16_MAX (float16_t)FLT_MAX
#endif
#define F64_MIN -DBL_MAX #define F64_MIN -DBL_MAX
#define F32_MIN -FLT_MAX #define F32_MIN -FLT_MAX
#if defined(ARM_MATH_FLOAT16)
#define F16_MIN -(float16_t)FLT_MAX #define F16_MIN -(float16_t)FLT_MAX
#endif
#define F64_ABSMAX DBL_MAX #define F64_ABSMAX DBL_MAX
#define F32_ABSMAX FLT_MAX #define F32_ABSMAX FLT_MAX
#if defined(ARM_MATH_FLOAT16)
#define F16_ABSMAX (float16_t)FLT_MAX #define F16_ABSMAX (float16_t)FLT_MAX
#endif
#define F64_ABSMIN (float64_t)0.0 #define F64_ABSMIN (float64_t)0.0
#define F32_ABSMIN (float32_t)0.0 #define F32_ABSMIN (float32_t)0.0
#if defined(ARM_MATH_FLOAT16)
#define F16_ABSMIN (float16_t)0.0 #define F16_ABSMIN (float16_t)0.0
#endif
#define Q31_MAX (0x7FFFFFFFL) #define Q31_MAX (0x7FFFFFFFL)
#define Q15_MAX (0x7FFF) #define Q15_MAX (0x7FFF)
@ -422,10 +436,12 @@ extern "C"
#if defined (ARM_MATH_HELIUM) #if defined (ARM_MATH_HELIUM)
#define ARM_MATH_MVEF #define ARM_MATH_MVEF
#define ARM_MATH_FLOAT16
#endif #endif
#if defined (ARM_MATH_MVEF) #if defined (ARM_MATH_MVEF)
#define ARM_MATH_MVEI #define ARM_MATH_MVEI
#define ARM_MATH_FLOAT16
#endif #endif
#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) #if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI)
@ -608,10 +624,12 @@ extern "C"
*/ */
typedef float32x4_t f32x4_t; typedef float32x4_t f32x4_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit floating-point 128-bit vector data type * @brief 16-bit floating-point 128-bit vector data type
*/ */
typedef __ALIGNED(2) float16x8_t f16x8_t; typedef __ALIGNED(2) float16x8_t f16x8_t;
#endif
/** /**
* @brief 32-bit floating-point 128-bit vector pair data type * @brief 32-bit floating-point 128-bit vector pair data type
@ -623,6 +641,7 @@ extern "C"
*/ */
typedef float32x4x4_t f32x4x4_t; typedef float32x4x4_t f32x4x4_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit floating-point 128-bit vector pair data type * @brief 16-bit floating-point 128-bit vector pair data type
*/ */
@ -632,6 +651,7 @@ extern "C"
* @brief 16-bit floating-point 128-bit vector quadruplet data type * @brief 16-bit floating-point 128-bit vector quadruplet data type
*/ */
typedef float16x8x4_t f16x8x4_t; typedef float16x8x4_t f16x8x4_t;
#endif
/** /**
* @brief 32-bit ubiquitous 128-bit vector data type * @brief 32-bit ubiquitous 128-bit vector data type
@ -642,6 +662,7 @@ extern "C"
int32x4_t i; int32x4_t i;
} any32x4_t; } any32x4_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit ubiquitous 128-bit vector data type * @brief 16-bit ubiquitous 128-bit vector data type
*/ */
@ -650,6 +671,7 @@ extern "C"
float16x8_t f; float16x8_t f;
int16x8_t i; int16x8_t i;
} any16x8_t; } any16x8_t;
#endif
#endif #endif
@ -674,21 +696,24 @@ extern "C"
*/ */
typedef float32x2_t f32x2_t; typedef float32x2_t f32x2_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit float 64-bit vector data type. * @brief 16-bit float 64-bit vector data type.
*/ */
typedef __ALIGNED(2) float16x4_t f16x4_t; typedef __ALIGNED(2) float16x4_t f16x4_t;
#endif
/** /**
* @brief 32-bit floating-point 128-bit vector triplet data type * @brief 32-bit floating-point 128-bit vector triplet data type
*/ */
typedef float32x4x3_t f32x4x3_t; typedef float32x4x3_t f32x4x3_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit floating-point 128-bit vector triplet data type * @brief 16-bit floating-point 128-bit vector triplet data type
*/ */
typedef float16x8x3_t f16x8x3_t; typedef float16x8x3_t f16x8x3_t;
#endif
/** /**
* @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format * @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format
@ -720,6 +745,7 @@ extern "C"
*/ */
typedef float32x2x4_t f32x2x4_t; typedef float32x2x4_t f32x2x4_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit floating-point 64-bit vector pair data type * @brief 16-bit floating-point 64-bit vector pair data type
*/ */
@ -734,6 +760,7 @@ extern "C"
* @brief 16-bit floating-point 64-bit vector quadruplet data type * @brief 16-bit floating-point 64-bit vector quadruplet data type
*/ */
typedef float16x4x4_t f16x4x4_t; typedef float16x4x4_t f16x4x4_t;
#endif
/** /**
* @brief 32-bit fractional 64-bit vector pair data type in 1.31 format * @brief 32-bit fractional 64-bit vector pair data type in 1.31 format
@ -789,6 +816,7 @@ extern "C"
int32x2_t i; int32x2_t i;
} any32x2_t; } any32x2_t;
#if defined(ARM_MATH_FLOAT16)
/** /**
* @brief 16-bit ubiquitous 64-bit vector data type * @brief 16-bit ubiquitous 64-bit vector data type
*/ */
@ -797,6 +825,7 @@ extern "C"
float16x4_t f; float16x4_t f;
int16x4_t i; int16x4_t i;
} any16x4_t; } any16x4_t;
#endif
/** /**
* @brief 32-bit status 64-bit vector data type. * @brief 32-bit status 64-bit vector data type.

@ -60,6 +60,7 @@
@return none @return none
*/ */
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h" #include "arm_helium_utils.h"

@ -26,6 +26,10 @@ if (NEON OR NEONEXPERIMENTAL)
target_include_directories(${project} PRIVATE "${root}/CMSIS/DSP/ComputeLibrary/Include") target_include_directories(${project} PRIVATE "${root}/CMSIS/DSP/ComputeLibrary/Include")
endif() endif()
if (FLOAT16)
target_compile_definitions(${project} PRIVATE ARM_MATH_FLOAT16)
endif()
endfunction() endfunction()

@ -9,8 +9,8 @@ Reference patterns are generated with
a double precision computation. a double precision computation.
*/ */
#define ABS_ERROR_Q31 2 #define ABS_ERROR_Q31 ((q31_t)2)
#define ABS_ERROR_Q63 (1<<16) #define ABS_ERROR_Q63 ((q63_t)(1<<16))
#define ONEHALF 0x40000000 #define ONEHALF 0x40000000

@ -12,8 +12,8 @@ Reference patterns are generated with
a double precision computation. a double precision computation.
*/ */
#define ABS_ERROR_Q31 100 #define ABS_ERROR_Q31 ((q31_t)(100))
#define ABS_ERROR_Q63 (1<<18) #define ABS_ERROR_Q63 ((q63_t)(1<<18))
void StatsTestsQ31::test_max_q31() void StatsTestsQ31::test_max_q31()
{ {

@ -55,8 +55,8 @@ function(compilerSpecificCompileOptions PROJECTNAME)
if (ARM_CPU STREQUAL "cortex-a5" ) if (ARM_CPU STREQUAL "cortex-a5" )
if ((NEON OR NEONEXPERIMENTAL)) if ((NEON OR NEONEXPERIMENTAL))
target_compile_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=vfpv3-d16") target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=neon-vfpv4")
else() else()
target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16") target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16") target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")

Loading…
Cancel
Save