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 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 @@ extern "C"
#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 @@ extern "C"
*/
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 @@ extern "C"
*/
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 @@ extern "C"
* @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 @@ extern "C"
int32x4_t i;
} any32x4_t;
#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit ubiquitous 128-bit vector data type
*/
@ -650,6 +671,7 @@ extern "C"
float16x8_t f;
int16x8_t i;
} any16x8_t;
#endif
#endif
@ -674,21 +696,24 @@ extern "C"
*/
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 @@ extern "C"
*/
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 @@ extern "C"
* @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 @@ extern "C"
int32x2_t i;
} any32x2_t;
#if defined(ARM_MATH_FLOAT16)
/**
* @brief 16-bit ubiquitous 64-bit vector data type
*/
@ -797,6 +825,7 @@ extern "C"
float16x4_t f;
int16x4_t i;
} any16x4_t;
#endif
/**
* @brief 32-bit status 64-bit vector data type.

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

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

@ -9,8 +9,8 @@ Reference patterns are generated with
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

@ -12,8 +12,8 @@ Reference patterns are generated with
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()
{

@ -55,8 +55,8 @@ function(compilerSpecificCompileOptions PROJECTNAME)
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")

Loading…
Cancel
Save