CMSIS-DSP: Change to f16 code to be able to build with AC5 compiler.

pull/19/head
Christophe Favergeon 6 years ago
parent b31c737ad0
commit 97e7ce8e27

@ -442,9 +442,11 @@ extern "C"
/** /**
* @brief 16-bit floating-point type definition. * @brief 16-bit floating-point type definition.
* This is already defined in arm_mve.h * This is already defined in arm_mve.h
*
* This is not fully supported on ARM AC5.
*/ */
#if !defined (ARM_MATH_HELIUM) && !defined(ARM_MATH_MVEF) && !defined(ARM_MATH_MVEI) #if !defined( __CC_ARM ) && !defined (ARM_MATH_HELIUM) && !defined(ARM_MATH_MVEF) && !defined(ARM_MATH_MVEI)
typedef __fp16 float16_t; typedef __fp16 float16_t;
#endif #endif
@ -778,28 +780,28 @@ extern "C"
#define F64_MAX ((float64_t)DBL_MAX) #define F64_MAX ((float64_t)DBL_MAX)
#define F32_MAX ((float32_t)FLT_MAX) #define F32_MAX ((float32_t)FLT_MAX)
#if defined(ARM_MATH_FLOAT16) #if !defined( __CC_ARM )
#define F16_MAX ((float16_t)FLT_MAX) #define F16_MAX ((float16_t)FLT_MAX)
#endif #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) #if !defined( __CC_ARM )
#define F16_MIN (-(float16_t)FLT_MAX) #define F16_MIN (-(float16_t)FLT_MAX)
#endif #endif
#define F64_ABSMAX ((float64_t)DBL_MAX) #define F64_ABSMAX ((float64_t)DBL_MAX)
#define F32_ABSMAX ((float32_t)FLT_MAX) #define F32_ABSMAX ((float32_t)FLT_MAX)
#if defined(ARM_MATH_FLOAT16) #if !defined( __CC_ARM )
#define F16_ABSMAX ((float16_t)FLT_MAX) #define F16_ABSMAX ((float16_t)FLT_MAX)
#endif #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) #if !defined( __CC_ARM )
#define F16_ABSMIN ((float16_t)0.0) #define F16_ABSMIN ((float16_t)0.0)
#endif #endif
@ -2956,6 +2958,7 @@ void arm_mat_init_f32(
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Floating-point vector multiplication. * @brief Floating-point vector multiplication.
* @param[in] pSrcA points to the first input vector * @param[in] pSrcA points to the first input vector
@ -2968,6 +2971,7 @@ void arm_mat_init_f32(
const float16_t * pSrcB, const float16_t * pSrcB,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
* @brief Instance structure for the Q15 CFFT/CIFFT function. * @brief Instance structure for the Q15 CFFT/CIFFT function.
@ -3092,6 +3096,8 @@ void arm_mat_init_f32(
/** /**
* @brief Instance structure for the floating-point CFFT/CIFFT function. * @brief Instance structure for the floating-point CFFT/CIFFT function.
*/ */
#if !defined( __CC_ARM )
typedef struct typedef struct
{ {
uint16_t fftLen; /**< length of the FFT. */ uint16_t fftLen; /**< length of the FFT. */
@ -3103,6 +3109,7 @@ void arm_mat_init_f32(
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
float16_t onebyfftLen; /**< value of 1/fftLen. */ float16_t onebyfftLen; /**< value of 1/fftLen. */
} arm_cfft_radix2_instance_f16; } arm_cfft_radix2_instance_f16;
#endif
/* Deprecated */ /* Deprecated */
arm_status arm_cfft_radix2_init_f32( arm_status arm_cfft_radix2_init_f32(
@ -3134,6 +3141,7 @@ void arm_mat_init_f32(
/** /**
* @brief Instance structure for the floating-point CFFT/CIFFT function. * @brief Instance structure for the floating-point CFFT/CIFFT function.
*/ */
#if !defined( __CC_ARM )
typedef struct typedef struct
{ {
uint16_t fftLen; /**< length of the FFT. */ uint16_t fftLen; /**< length of the FFT. */
@ -3145,6 +3153,7 @@ void arm_mat_init_f32(
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
float16_t onebyfftLen; /**< value of 1/fftLen. */ float16_t onebyfftLen; /**< value of 1/fftLen. */
} arm_cfft_radix4_instance_f16; } arm_cfft_radix4_instance_f16;
#endif
/* Deprecated */ /* Deprecated */
arm_status arm_cfft_radix4_init_f32( arm_status arm_cfft_radix4_init_f32(
@ -3238,6 +3247,7 @@ void arm_cfft_q31(
/** /**
* @brief Instance structure for the floating-point CFFT/CIFFT function. * @brief Instance structure for the floating-point CFFT/CIFFT function.
*/ */
#if !defined( __CC_ARM )
typedef struct typedef struct
{ {
uint16_t fftLen; /**< length of the FFT. */ uint16_t fftLen; /**< length of the FFT. */
@ -3253,6 +3263,7 @@ void arm_cfft_q31(
const float16_t *rearranged_twiddle_stride3; const float16_t *rearranged_twiddle_stride3;
#endif #endif
} arm_cfft_instance_f16; } arm_cfft_instance_f16;
#endif
arm_status arm_cfft_init_f32( arm_status arm_cfft_init_f32(
arm_cfft_instance_f32 * S, arm_cfft_instance_f32 * S,
@ -3264,6 +3275,7 @@ void arm_cfft_q31(
uint8_t ifftFlag, uint8_t ifftFlag,
uint8_t bitReverseFlag); uint8_t bitReverseFlag);
#if !defined( __CC_ARM )
arm_status arm_cfft_init_f16( arm_status arm_cfft_init_f16(
arm_cfft_instance_f16 * S, arm_cfft_instance_f16 * S,
uint16_t fftLen); uint16_t fftLen);
@ -3273,6 +3285,7 @@ void arm_cfft_q31(
float16_t * p1, float16_t * p1,
uint8_t ifftFlag, uint8_t ifftFlag,
uint8_t bitReverseFlag); uint8_t bitReverseFlag);
#endif
/** /**
* @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function. * @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function.
@ -3572,6 +3585,7 @@ arm_status arm_rfft_fast_init_f32 (
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Floating-point vector addition. * @brief Floating-point vector addition.
* @param[in] pSrcA points to the first input vector * @param[in] pSrcA points to the first input vector
@ -3584,7 +3598,7 @@ arm_status arm_rfft_fast_init_f32 (
const float16_t * pSrcB, const float16_t * pSrcB,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
* @brief Q7 vector addition. * @brief Q7 vector addition.
@ -3641,6 +3655,7 @@ arm_status arm_rfft_fast_init_f32 (
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Floating-point vector subtraction. * @brief Floating-point vector subtraction.
* @param[in] pSrcA points to the first input vector * @param[in] pSrcA points to the first input vector
@ -3653,6 +3668,7 @@ arm_status arm_rfft_fast_init_f32 (
const float16_t * pSrcB, const float16_t * pSrcB,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
* @brief Q7 vector subtraction. * @brief Q7 vector subtraction.
@ -3709,6 +3725,7 @@ arm_status arm_rfft_fast_init_f32 (
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Multiplies a floating-point vector by a scalar. * @brief Multiplies a floating-point vector by a scalar.
* @param[in] pSrc points to the input vector * @param[in] pSrc points to the input vector
@ -3721,7 +3738,7 @@ arm_status arm_rfft_fast_init_f32 (
float16_t scale, float16_t scale,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
* @brief Multiplies a Q7 vector by a scalar. * @brief Multiplies a Q7 vector by a scalar.
@ -3794,6 +3811,7 @@ arm_status arm_rfft_fast_init_f32 (
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Floating-point vector absolute value. * @brief Floating-point vector absolute value.
* @param[in] pSrc points to the input buffer * @param[in] pSrc points to the input buffer
@ -3804,6 +3822,7 @@ arm_status arm_rfft_fast_init_f32 (
const float16_t * pSrc, const float16_t * pSrc,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
@ -3843,6 +3862,7 @@ arm_status arm_rfft_fast_init_f32 (
uint32_t blockSize, uint32_t blockSize,
float32_t * result); float32_t * result);
#if !defined( __CC_ARM )
/** /**
* @brief Dot product of floating-point vectors. * @brief Dot product of floating-point vectors.
* @param[in] pSrcA points to the first input vector * @param[in] pSrcA points to the first input vector
@ -3855,7 +3875,7 @@ arm_status arm_rfft_fast_init_f32 (
const float16_t * pSrcB, const float16_t * pSrcB,
uint32_t blockSize, uint32_t blockSize,
float16_t * result); float16_t * result);
#endif
/** /**
* @brief Dot product of Q7 vectors. * @brief Dot product of Q7 vectors.
@ -3954,6 +3974,7 @@ arm_status arm_rfft_fast_init_f32 (
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Adds a constant offset to a floating-point vector. * @brief Adds a constant offset to a floating-point vector.
* @param[in] pSrc points to the input vector * @param[in] pSrc points to the input vector
@ -3966,6 +3987,7 @@ arm_status arm_rfft_fast_init_f32 (
float16_t offset, float16_t offset,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
* @brief Adds a constant offset to a Q7 vector. * @brief Adds a constant offset to a Q7 vector.
@ -4020,6 +4042,7 @@ arm_status arm_rfft_fast_init_f32 (
float32_t * pDst, float32_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#if !defined( __CC_ARM )
/** /**
* @brief Negates the elements of a floating-point vector. * @brief Negates the elements of a floating-point vector.
* @param[in] pSrc points to the input vector * @param[in] pSrc points to the input vector
@ -4030,7 +4053,7 @@ arm_status arm_rfft_fast_init_f32 (
const float16_t * pSrc, const float16_t * pSrc,
float16_t * pDst, float16_t * pDst,
uint32_t blockSize); uint32_t blockSize);
#endif
/** /**
* @brief Negates the elements of a Q7 vector. * @brief Negates the elements of a Q7 vector.
* @param[in] pSrc points to the input vector * @param[in] pSrc points to the input vector

@ -98,5 +98,6 @@ void SystemInit (void)
// enable DL branch cache // enable DL branch cache
CCR |= CCR_DL; CCR |= CCR_DL;
__ISB();
} }

@ -168,7 +168,6 @@ set(TESTSRC
Source/Tests/BayesF32.cpp Source/Tests/BayesF32.cpp
Source/Tests/TransformCF64.cpp Source/Tests/TransformCF64.cpp
Source/Tests/TransformCF32.cpp Source/Tests/TransformCF32.cpp
Source/Tests/TransformCF16.cpp
Source/Tests/TransformRF64.cpp Source/Tests/TransformRF64.cpp
Source/Tests/TransformRF32.cpp Source/Tests/TransformRF32.cpp
Source/Tests/TransformCQ31.cpp Source/Tests/TransformCQ31.cpp

@ -79,9 +79,10 @@ to get the line number.
(SNR functions to finish implementing) (SNR functions to finish implementing)
*/ */
#if !defined( __CC_ARM )
extern void assert_relative_error(unsigned long nb,float16_t &a, float16_t &b, double threshold); extern void assert_relative_error(unsigned long nb,float16_t &a, float16_t &b, double threshold);
extern void assert_relative_error(unsigned long nb,AnyPattern<float16_t> &pa, AnyPattern<float16_t> &pb, double threshold); extern void assert_relative_error(unsigned long nb,AnyPattern<float16_t> &pa, AnyPattern<float16_t> &pb, double threshold);
#endif
extern void assert_relative_error(unsigned long nb,float32_t &a, float32_t &b, double threshold); extern void assert_relative_error(unsigned long nb,float32_t &a, float32_t &b, double threshold);
extern void assert_relative_error(unsigned long nb,AnyPattern<float32_t> &pa, AnyPattern<float32_t> &pb, double threshold); extern void assert_relative_error(unsigned long nb,AnyPattern<float32_t> &pa, AnyPattern<float32_t> &pb, double threshold);
@ -96,12 +97,17 @@ extern void assert_close_error(unsigned long nb,AnyPattern<float64_t> &pref, Any
extern void assert_close_error(unsigned long nb,float32_t &ref, float32_t &val, double absthreshold, double relthreshold); extern void assert_close_error(unsigned long nb,float32_t &ref, float32_t &val, double absthreshold, double relthreshold);
extern void assert_close_error(unsigned long nb,AnyPattern<float32_t> &pref, AnyPattern<float32_t> &pval, double absthreshold, double relthreshold); extern void assert_close_error(unsigned long nb,AnyPattern<float32_t> &pref, AnyPattern<float32_t> &pval, double absthreshold, double relthreshold);
#if !defined( __CC_ARM )
extern void assert_close_error(unsigned long nb,float16_t &ref, float16_t &val, double absthreshold, double relthreshold); extern void assert_close_error(unsigned long nb,float16_t &ref, float16_t &val, double absthreshold, double relthreshold);
extern void assert_close_error(unsigned long nb,AnyPattern<float16_t> &pref, AnyPattern<float16_t> &pval, double absthreshold, double relthreshold); extern void assert_close_error(unsigned long nb,AnyPattern<float16_t> &pref, AnyPattern<float16_t> &pval, double absthreshold, double relthreshold);
#endif
extern void assert_snr_error(unsigned long nb,AnyPattern<float64_t> &pa,AnyPattern<float64_t> &pb, float64_t threshold); extern void assert_snr_error(unsigned long nb,AnyPattern<float64_t> &pa,AnyPattern<float64_t> &pb, float64_t threshold);
extern void assert_snr_error(unsigned long nb,AnyPattern<float32_t> &pa,AnyPattern<float32_t> &pb, float32_t threshold); extern void assert_snr_error(unsigned long nb,AnyPattern<float32_t> &pa,AnyPattern<float32_t> &pb, float32_t threshold);
#if !defined( __CC_ARM )
extern void assert_snr_error(unsigned long nb,AnyPattern<float16_t> &pa,AnyPattern<float16_t> &pb, float32_t threshold); extern void assert_snr_error(unsigned long nb,AnyPattern<float16_t> &pa,AnyPattern<float16_t> &pb, float32_t threshold);
#endif
extern void assert_snr_error(unsigned long nb,AnyPattern<q63_t> &pa,AnyPattern<q63_t> &pb, float32_t threshold); extern void assert_snr_error(unsigned long nb,AnyPattern<q63_t> &pa,AnyPattern<q63_t> &pb, float32_t threshold);
extern void assert_snr_error(unsigned long nb,AnyPattern<q31_t> &pa,AnyPattern<q31_t> &pb, float32_t threshold); extern void assert_snr_error(unsigned long nb,AnyPattern<q31_t> &pa,AnyPattern<q31_t> &pb, float32_t threshold);
@ -125,7 +131,11 @@ extern void assert_false(unsigned long nb,bool cond);
extern void assert_not_empty(unsigned long nb, AnyPattern<float64_t> &p); extern void assert_not_empty(unsigned long nb, AnyPattern<float64_t> &p);
extern void assert_not_empty(unsigned long nb, AnyPattern<float32_t> &p); extern void assert_not_empty(unsigned long nb, AnyPattern<float32_t> &p);
#if !defined( __CC_ARM )
extern void assert_not_empty(unsigned long nb, AnyPattern<float16_t> &p); extern void assert_not_empty(unsigned long nb, AnyPattern<float16_t> &p);
#endif
extern void assert_not_empty(unsigned long nb, AnyPattern<q63_t> &p); extern void assert_not_empty(unsigned long nb, AnyPattern<q63_t> &p);
extern void assert_not_empty(unsigned long nb, AnyPattern<q31_t> &p); extern void assert_not_empty(unsigned long nb, AnyPattern<q31_t> &p);
extern void assert_not_empty(unsigned long nb, AnyPattern<q15_t> &p); extern void assert_not_empty(unsigned long nb, AnyPattern<q15_t> &p);

@ -60,7 +60,9 @@ FPGA driver. Used to read a C array describing how to drive the test.
virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb); virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb); virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
#if !defined( __CC_ARM )
virtual void ImportPattern_f16(Testing::PatternID_t,char*,Testing::nbSamples_t nb); virtual void ImportPattern_f16(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
#endif
virtual void ImportPattern_q63(Testing::PatternID_t,char*,Testing::nbSamples_t nb); virtual void ImportPattern_q63(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb); virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb); virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
@ -76,7 +78,9 @@ FPGA driver. Used to read a C array describing how to drive the test.
virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t* data); virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t* data);
virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t* data); virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t* data);
#if !defined( __CC_ARM )
virtual void DumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t nb, float16_t* data); virtual void DumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t nb, float16_t* data);
#endif
virtual void DumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t nb, q63_t* data); virtual void DumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t nb, q63_t* data);
virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t* data); virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t* data);
virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t* data); virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t* data);

@ -45,8 +45,10 @@ float64_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSampl
template <> template <>
float32_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples); float32_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
#if !defined( __CC_ARM )
template <> template <>
float16_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples); float16_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
#endif
template <> template <>
q63_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples); q63_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
@ -81,8 +83,10 @@ float64_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
template <> template <>
float32_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr); float32_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
#if !defined( __CC_ARM )
template <> template <>
float16_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr); float16_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
#endif
template <> template <>
q63_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr); q63_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
@ -107,7 +111,9 @@ uint8_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nb,float64_t* data,PatternMgr *mgr); extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nb,float64_t* data,PatternMgr *mgr);
extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,float32_t*,PatternMgr *); extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,float32_t*,PatternMgr *);
#if !defined( __CC_ARM )
extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,float16_t*,PatternMgr *); extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,float16_t*,PatternMgr *);
#endif
extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q63_t*,PatternMgr *); extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q63_t*,PatternMgr *);
extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q31_t*,PatternMgr *); extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q31_t*,PatternMgr *);
extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q15_t*,PatternMgr *); extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q15_t*,PatternMgr *);

@ -64,7 +64,9 @@ Semihosting driver. Used to read a text file describing how to drive the test.
virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0); virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0); virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
#if !defined( __CC_ARM )
virtual void ImportPattern_f16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0); virtual void ImportPattern_f16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
#endif
virtual void ImportPattern_q63(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0); virtual void ImportPattern_q63(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0); virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0); virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
@ -81,7 +83,9 @@ Semihosting driver. Used to read a text file describing how to drive the test.
virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*); virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*);
virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*); virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*);
#if !defined( __CC_ARM )
virtual void DumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t nb, float16_t*); virtual void DumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t nb, float16_t*);
#endif
virtual void DumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t nb, q63_t*); virtual void DumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t nb, q63_t*);
virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*); virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*);
virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*); virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*);

@ -298,7 +298,9 @@ API of Memory managers used in the test framework
*/ */
virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0; virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0; virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
#if !defined( __CC_ARM )
virtual void ImportPattern_f16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0; virtual void ImportPattern_f16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
#endif
virtual void ImportPattern_q63(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0; virtual void ImportPattern_q63(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0; virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0; virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
@ -328,7 +330,9 @@ API of Memory managers used in the test framework
*/ */
virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*)=0; virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*)=0;
virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*)=0; virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*)=0;
#if !defined( __CC_ARM )
virtual void DumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t nb, float16_t*)=0; virtual void DumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t nb, float16_t*)=0;
#endif
virtual void DumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t nb, q63_t*)=0; virtual void DumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t nb, q63_t*)=0;
virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*)=0; virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*)=0;
virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*)=0; virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*)=0;
@ -408,8 +412,9 @@ public:
*/ */
float64_t *load_f64(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES); float64_t *load_f64(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
float32_t *load_f32(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES); float32_t *load_f32(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
#if !defined( __CC_ARM )
float16_t *load_f16(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES); float16_t *load_f16(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
#endif
q63_t *load_q63(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES); q63_t *load_q63(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
q31_t *load_q31(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES); q31_t *load_q31(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
q15_t *load_q15(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES); q15_t *load_q15(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
@ -427,7 +432,9 @@ public:
*/ */
float64_t *local_f64(Testing::nbSamples_t); float64_t *local_f64(Testing::nbSamples_t);
float32_t *local_f32(Testing::nbSamples_t); float32_t *local_f32(Testing::nbSamples_t);
#if !defined( __CC_ARM )
float16_t *local_f16(Testing::nbSamples_t); float16_t *local_f16(Testing::nbSamples_t);
#endif
q63_t *local_q63(Testing::nbSamples_t); q63_t *local_q63(Testing::nbSamples_t);
q31_t *local_q31(Testing::nbSamples_t); q31_t *local_q31(Testing::nbSamples_t);
q15_t *local_q15(Testing::nbSamples_t); q15_t *local_q15(Testing::nbSamples_t);
@ -442,8 +449,10 @@ public:
*/ */
void dumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t,float64_t*); void dumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t,float64_t*);
void dumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t,float32_t*); void dumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t,float32_t*);
#if !defined( __CC_ARM )
void dumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t,float16_t*); void dumpPattern_f16(Testing::outputID_t,Testing::nbSamples_t,float16_t*);
#endif
void dumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t,q63_t*); void dumpPattern_q63(Testing::outputID_t,Testing::nbSamples_t,q63_t*);
void dumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t,q31_t*); void dumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t,q31_t*);
void dumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t,q15_t*); void dumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t,q15_t*);

@ -135,10 +135,12 @@ void assert_not_empty(unsigned long nb, AnyPattern<float32_t> &p)
assert_not_empty_generic(nb,p); assert_not_empty_generic(nb,p);
} }
#if !defined( __CC_ARM )
void assert_not_empty(unsigned long nb, AnyPattern<float16_t> &p) void assert_not_empty(unsigned long nb, AnyPattern<float16_t> &p)
{ {
assert_not_empty_generic(nb,p); assert_not_empty_generic(nb,p);
} }
#endif
void assert_not_empty(unsigned long nb, AnyPattern<q63_t> &p) void assert_not_empty(unsigned long nb, AnyPattern<q63_t> &p)
{ {
@ -215,6 +217,7 @@ void assert_relative_error(unsigned long nb,float32_t &a, float32_t &b, double t
} }
}; };
#if !defined( __CC_ARM )
void assert_relative_error(unsigned long nb,float16_t &a, float16_t &b, double threshold) void assert_relative_error(unsigned long nb,float16_t &a, float16_t &b, double threshold)
{ {
double rel,delta,average; double rel,delta,average;
@ -234,6 +237,7 @@ void assert_relative_error(unsigned long nb,float16_t &a, float16_t &b, double t
} }
} }
}; };
#endif
void assert_relative_error(unsigned long nb,AnyPattern<float64_t> &pa, AnyPattern<float64_t> &pb, double threshold) void assert_relative_error(unsigned long nb,AnyPattern<float64_t> &pa, AnyPattern<float64_t> &pb, double threshold)
{ {
@ -297,6 +301,7 @@ void assert_relative_error(unsigned long nb,AnyPattern<float32_t> &pa, AnyPatter
} }
}; };
#if !defined( __CC_ARM )
void assert_relative_error(unsigned long nb,AnyPattern<float16_t> &pa, AnyPattern<float16_t> &pb, double threshold) void assert_relative_error(unsigned long nb,AnyPattern<float16_t> &pa, AnyPattern<float16_t> &pb, double threshold)
{ {
ASSERT_NOT_EMPTY(pa); ASSERT_NOT_EMPTY(pa);
@ -327,6 +332,7 @@ void assert_relative_error(unsigned long nb,AnyPattern<float16_t> &pa, AnyPatter
} }
} }
}; };
#endif
void assert_close_error(unsigned long nb,float64_t &ref, float64_t &val, double absthreshold,double relthreshold) void assert_close_error(unsigned long nb,float64_t &ref, float64_t &val, double absthreshold,double relthreshold)
{ {
@ -414,6 +420,7 @@ void assert_close_error(unsigned long nb,AnyPattern<float32_t> &pref, AnyPattern
} }
}; };
#if !defined( __CC_ARM )
void assert_close_error(unsigned long nb,float16_t &ref, float16_t &val, double absthreshold,double relthreshold) void assert_close_error(unsigned long nb,float16_t &ref, float16_t &val, double absthreshold,double relthreshold)
{ {
@ -456,6 +463,7 @@ void assert_close_error(unsigned long nb,AnyPattern<float16_t> &pref, AnyPattern
} }
}; };
#endif
/** /**
* @brief Calculation of SNR * @brief Calculation of SNR
@ -520,6 +528,7 @@ float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)
} }
#if !defined( __CC_ARM )
float arm_snr_f16(float16_t *pRef, float16_t *pTest, uint32_t buffSize) float arm_snr_f16(float16_t *pRef, float16_t *pTest, uint32_t buffSize)
{ {
float EnergySignal = 0.0, EnergyError = 0.0; float EnergySignal = 0.0, EnergyError = 0.0;
@ -552,6 +561,7 @@ float arm_snr_f16(float16_t *pRef, float16_t *pTest, uint32_t buffSize)
return (SNR); return (SNR);
} }
#endif
float arm_snr_q63(q63_t *pRef, q63_t *pTest, uint32_t buffSize) float arm_snr_q63(q63_t *pRef, q63_t *pTest, uint32_t buffSize)
{ {
@ -751,6 +761,7 @@ void assert_snr_error(unsigned long nb,float32_t a,float32_t b, float32_t thresh
} }
} }
#if !defined( __CC_ARM )
void assert_snr_error(unsigned long nb,AnyPattern<float16_t> &pa,AnyPattern<float16_t> &pb, float32_t threshold) void assert_snr_error(unsigned long nb,AnyPattern<float16_t> &pa,AnyPattern<float16_t> &pb, float32_t threshold)
{ {
float32_t snr; float32_t snr;
@ -777,6 +788,7 @@ void assert_snr_error(unsigned long nb,AnyPattern<float16_t> &pa,AnyPattern<floa
throw (Error(SNR_ERROR,nb,details)); throw (Error(SNR_ERROR,nb,details));
} }
} }
#endif
#if !defined (__CC_ARM) #if !defined (__CC_ARM)
void assert_snr_error(unsigned long nb,float16_t a,float16_t b, float32_t threshold) void assert_snr_error(unsigned long nb,float16_t a,float16_t b, float32_t threshold)

@ -540,6 +540,7 @@ namespace Client
} }
#if !defined( __CC_ARM )
void FPGA::ImportPattern_f16(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb) void FPGA::ImportPattern_f16(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
{ {
unsigned long offset,i; unsigned long offset,i;
@ -559,6 +560,7 @@ namespace Client
} }
} }
#endif
void FPGA::ImportPattern_q63(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb) void FPGA::ImportPattern_q63(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
{ {
@ -739,6 +741,7 @@ namespace Client
} }
} }
#if !defined( __CC_ARM )
void FPGA::DumpPattern_f16(Testing::outputID_t id,Testing::nbSamples_t nb, float16_t* data) void FPGA::DumpPattern_f16(Testing::outputID_t id,Testing::nbSamples_t nb, float16_t* data)
{ {
std::string fileName = this->getOutputPath(id); std::string fileName = this->getOutputPath(id);
@ -757,7 +760,8 @@ namespace Client
printf("D: END\n"); printf("D: END\n");
} }
} }
#endif
void FPGA::DumpPattern_q63(Testing::outputID_t id,Testing::nbSamples_t nb, q63_t* data) void FPGA::DumpPattern_q63(Testing::outputID_t id,Testing::nbSamples_t nb, q63_t* data)
{ {
std::string fileName = this->getOutputPath(id); std::string fileName = this->getOutputPath(id);

@ -45,11 +45,13 @@ float32_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing:
return(mgr->load_f32(id,nb,maxSamples)); return(mgr->load_f32(id,nb,maxSamples));
} }
#if !defined( __CC_ARM )
template <> template <>
float16_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples) float16_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
{ {
return(mgr->load_f16(id,nb,maxSamples)); return(mgr->load_f16(id,nb,maxSamples));
} }
#endif
template <> template <>
q63_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples) q63_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
@ -106,11 +108,13 @@ float32_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
return(mgr->local_f32(id)); return(mgr->local_f32(id));
} }
#if !defined( __CC_ARM )
template <> template <>
float16_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr) float16_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
{ {
return(mgr->local_f16(id)); return(mgr->local_f16(id));
} }
#endif
template <> template <>
q63_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr) q63_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
@ -164,10 +168,12 @@ void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float32_t
mgr->dumpPattern_f32(id,nbSamples,data); mgr->dumpPattern_f32(id,nbSamples,data);
} }
#if !defined( __CC_ARM )
void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float16_t* data,PatternMgr *mgr) void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float16_t* data,PatternMgr *mgr)
{ {
mgr->dumpPattern_f16(id,nbSamples,data); mgr->dumpPattern_f16(id,nbSamples,data);
} }
#endif
void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q63_t* data,PatternMgr *mgr) void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q63_t* data,PatternMgr *mgr)
{ {

@ -46,7 +46,9 @@ TYPE *PatternMgr::local_##EXT(Testing::nbSamples_t nbSamples) \
LOCAL(float64_t,f64) LOCAL(float64_t,f64)
LOCAL(float32_t,f32) LOCAL(float32_t,f32)
#if !defined( __CC_ARM )
LOCAL(float16_t,f16) LOCAL(float16_t,f16)
#endif
LOCAL(q63_t,q63) LOCAL(q63_t,q63)
LOCAL(q31_t,q31) LOCAL(q31_t,q31)
LOCAL(q15_t,q15) LOCAL(q15_t,q15)
@ -92,6 +94,7 @@ float32_t *PatternMgr::load_f32(Testing::PatternID_t id,Testing::nbSamples_t& nb
} }
#if !defined( __CC_ARM )
float16_t *PatternMgr::load_f16(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples) float16_t *PatternMgr::load_f16(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
{ {
nbSamples=m_io->GetPatternSize(id); nbSamples=m_io->GetPatternSize(id);
@ -109,6 +112,7 @@ float16_t *PatternMgr::load_f16(Testing::PatternID_t id,Testing::nbSamples_t& nb
return((float16_t*)b); return((float16_t*)b);
} }
#endif
q63_t *PatternMgr::load_q63(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples) q63_t *PatternMgr::load_q63(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
{ {
@ -241,10 +245,12 @@ void PatternMgr::dumpPattern_f32(Testing::outputID_t id,Testing::nbSamples_t nbS
m_io->DumpPattern_f32(id,nbSamples,data); m_io->DumpPattern_f32(id,nbSamples,data);
} }
#if !defined( __CC_ARM )
void PatternMgr::dumpPattern_f16(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float16_t* data) void PatternMgr::dumpPattern_f16(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float16_t* data)
{ {
m_io->DumpPattern_f16(id,nbSamples,data); m_io->DumpPattern_f16(id,nbSamples,data);
} }
#endif
void PatternMgr::dumpPattern_q63(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q63_t* data) void PatternMgr::dumpPattern_q63(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q63_t* data)
{ {

@ -668,6 +668,7 @@ namespace Client
} }
#if !defined( __CC_ARM )
void Semihosting::ImportPattern_f16(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb) void Semihosting::ImportPattern_f16(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
{ {
char tmp[256]; char tmp[256];
@ -708,6 +709,7 @@ namespace Client
fclose(pattern); fclose(pattern);
} }
#endif
void Semihosting::ImportPattern_q63(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb) void Semihosting::ImportPattern_q63(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
{ {
@ -1013,6 +1015,7 @@ namespace Client
} }
} }
#if !defined( __CC_ARM )
void Semihosting::DumpPattern_f16(Testing::outputID_t id,Testing::nbSamples_t nb, float16_t* data) void Semihosting::DumpPattern_f16(Testing::outputID_t id,Testing::nbSamples_t nb, float16_t* data)
{ {
std::string fileName = this->getOutputPath(id); std::string fileName = this->getOutputPath(id);
@ -1031,7 +1034,8 @@ namespace Client
fclose(f); fclose(f);
} }
} }
#endif
void Semihosting::DumpPattern_q63(Testing::outputID_t id,Testing::nbSamples_t nb, q63_t* data) void Semihosting::DumpPattern_q63(Testing::outputID_t id,Testing::nbSamples_t nb, q63_t* data)
{ {
std::string fileName = this->getOutputPath(id); std::string fileName = this->getOutputPath(id);

@ -166,15 +166,6 @@ class BuildConfig:
] ]
cmd += flags cmd += flags
cmd += ["-DBENCHMARK=OFF", cmd += ["-DBENCHMARK=OFF",
"-DFULLYCONNECTED=OFF",
"-DCONVOLUTION=OFF",
"-DACTIVATION=OFF",
"-DPOOLING=OFF",
"-DSOFTMAX=OFF",
"-DNNSUPPORT=OFF",
"-DBASICMATHSNN=OFF",
"-DRESHAPE=OFF",
"-DCONCATENATION=OFF",
"-DWRAPPER=OFF", "-DWRAPPER=OFF",
"-DCONFIGTABLE=OFF", "-DCONFIGTABLE=OFF",
"-DROOT=%s" % self._rootFolder, "-DROOT=%s" % self._rootFolder,

Loading…
Cancel
Save