CMSIS-DSP: Added additional f16 statistics functions
and the required f16 fast math functions.
diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc
index 625c0b6..f3c8434 100644
--- a/ARM.CMSIS.pdsc
+++ b/ARM.CMSIS.pdsc
@@ -3251,6 +3251,7 @@
         <file category="source"   name="CMSIS/DSP/Source/InterpolationFunctions/InterpolationFunctionsF16.c"/>
         <file category="source"   name="CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c"/>
         <file category="source"   name="CMSIS/DSP/Source/SupportFunctions/SupportFunctionsF16.c"/>
+        <file category="source"   name="CMSIS/DSP/Source/FastMathFunctions/FastMathFunctionsF16.c"/>
 
         <!-- Compute Library for Cortex-A -->
         <file category="header"   name="CMSIS/DSP/ComputeLibrary/Include/NEMath.h"        condition="ARMv7-A Device"/>
diff --git a/CMSIS/DSP/Include/arm_common_tables_f16.h b/CMSIS/DSP/Include/arm_common_tables_f16.h
index 6fd824c..f6ef321 100755
--- a/CMSIS/DSP/Include/arm_common_tables_f16.h
+++ b/CMSIS/DSP/Include/arm_common_tables_f16.h
@@ -113,6 +113,14 @@
     
 #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */
 
+#if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED)
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
+       extern const float16_t exp_tab_f16[8];
+       extern const float16_t __logf_lut_f16[8];
+#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */
+#endif 
+       
 
 #ifdef   __cplusplus
 }
diff --git a/CMSIS/DSP/Include/arm_math_types_f16.h b/CMSIS/DSP/Include/arm_math_types_f16.h
index 6916e45..92939b1 100755
--- a/CMSIS/DSP/Include/arm_math_types_f16.h
+++ b/CMSIS/DSP/Include/arm_math_types_f16.h
@@ -140,7 +140,7 @@
 #define F16_ABSMAX   ((float16_t)FLT_MAX)
 #define F16_ABSMIN   ((float16_t)0.0)
 
-
+#define F16INFINITY ((float16_t)0x07c00)
   
 #endif /* ARM_FLOAT16_SUPPORTED*/
 #endif /* !defined( __CC_ARM ) */
diff --git a/CMSIS/DSP/Include/arm_vec_math_f16.h b/CMSIS/DSP/Include/arm_vec_math_f16.h
new file mode 100755
index 0000000..bd292c9
--- /dev/null
+++ b/CMSIS/DSP/Include/arm_vec_math_f16.h
@@ -0,0 +1,232 @@
+/******************************************************************************
+ * @file     arm_vec_math_f16.h
+ * @brief    Public header file for CMSIS DSP Library
+ ******************************************************************************/
+/*
+ * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ARM_VEC_MATH_H
+#define _ARM_VEC_MATH_H
+
+#include "arm_math_types_f16.h"
+#include "arm_common_tables_f16.h"
+#include "arm_helium_utils.h"
+
+#ifdef   __cplusplus
+extern "C"
+{
+#endif
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+
+static const float16_t __logf_rng_f16=0.693147180f16;
+
+
+/* fast inverse approximation (4x newton) */
+__STATIC_INLINE f16x8_t vrecip_hiprec_f16(
+    f16x8_t x)
+{
+    q15x8_t         m;
+    f16x8_t         b;
+    any16x8_t       xinv;
+    f16x8_t         ax = vabsq(x);
+
+    xinv.f = ax;
+
+    m = 0x03c00 - (xinv.i & 0x07c00);
+    xinv.i = xinv.i + m;
+    xinv.f = 1.41176471f16 - 0.47058824f16 * xinv.f;
+    xinv.i = xinv.i + m;
+
+    b = 2.0f16 - xinv.f * ax;
+    xinv.f = xinv.f * b;
+
+    b = 2.0f16 - xinv.f * ax;
+    xinv.f = xinv.f * b;
+
+    b = 2.0f16 - xinv.f * ax;
+    xinv.f = xinv.f * b;
+
+    b = 2.0f16 - xinv.f * ax;
+    xinv.f = xinv.f * b;
+
+    xinv.f = vdupq_m(xinv.f, F16INFINITY, vcmpeqq(x, 0.0f));
+    /*
+     * restore sign
+     */
+    xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f));
+
+    return xinv.f;
+}
+
+__STATIC_INLINE f16x8_t vdiv_f16(
+    f16x8_t num, f16x8_t den)
+{
+    return vmulq(num, vrecip_hiprec_f16(den));
+}
+
+
+/**
+  @brief         Single-precision taylor dev.
+  @param[in]     x              f16  vector input
+  @param[in]     coeffs         f16  vector coeffs
+  @return        destination    f16  vector
+ */
+
+__STATIC_INLINE float16x8_t vtaylor_polyq_f16(
+        float16x8_t           x,
+        const float16_t * coeffs)
+{
+    float16x8_t         A = vfmasq(vdupq_n_f16(coeffs[4]), x, coeffs[0]);
+    float16x8_t         B = vfmasq(vdupq_n_f16(coeffs[6]), x, coeffs[2]);
+    float16x8_t         C = vfmasq(vdupq_n_f16(coeffs[5]), x, coeffs[1]);
+    float16x8_t         D = vfmasq(vdupq_n_f16(coeffs[7]), x, coeffs[3]);
+    float16x8_t         x2 = vmulq(x, x);
+    float16x8_t         x4 = vmulq(x2, x2);
+    float16x8_t         res = vfmaq(vfmaq_f16(A, B, x2), vfmaq_f16(C, D, x2), x4);
+
+    return res;
+}
+
+__STATIC_INLINE float16x8_t vmant_exp_f16(
+    float16x8_t     x,
+    int16x8_t * e)
+{
+    any16x8_t       r;
+    int16x8_t       n;
+
+    r.f = x;
+    n = r.i >> 10;
+    n = n - 15;
+    r.i = r.i - (n << 10);
+
+    *e = n;
+    return r.f;
+}
+
+
+__STATIC_INLINE float16x8_t vlogq_f16(float16x8_t vecIn)
+{
+    q15x8_t             vecExpUnBiased;
+    float16x8_t         vecTmpFlt0, vecTmpFlt1;
+    float16x8_t         vecAcc0, vecAcc1, vecAcc2, vecAcc3;
+    float16x8_t         vecExpUnBiasedFlt;
+
+    /*
+     * extract exponent
+     */
+    vecTmpFlt1 = vmant_exp_f16(vecIn, &vecExpUnBiased);
+
+    vecTmpFlt0 = vecTmpFlt1 * vecTmpFlt1;
+    /*
+     * a = (__logf_lut_f16[4] * r.f) + (__logf_lut_f16[0]);
+     */
+    vecAcc0 = vdupq_n_f16(__logf_lut_f16[0]);
+    vecAcc0 = vfmaq(vecAcc0, vecTmpFlt1, __logf_lut_f16[4]);
+    /*
+     * b = (__logf_lut_f16[6] * r.f) + (__logf_lut_f16[2]);
+     */
+    vecAcc1 = vdupq_n_f16(__logf_lut_f16[2]);
+    vecAcc1 = vfmaq(vecAcc1, vecTmpFlt1, __logf_lut_f16[6]);
+    /*
+     * c = (__logf_lut_f16[5] * r.f) + (__logf_lut_f16[1]);
+     */
+    vecAcc2 = vdupq_n_f16(__logf_lut_f16[1]);
+    vecAcc2 = vfmaq(vecAcc2, vecTmpFlt1, __logf_lut_f16[5]);
+    /*
+     * d = (__logf_lut_f16[7] * r.f) + (__logf_lut_f16[3]);
+     */
+    vecAcc3 = vdupq_n_f16(__logf_lut_f16[3]);
+    vecAcc3 = vfmaq(vecAcc3, vecTmpFlt1, __logf_lut_f16[7]);
+    /*
+     * a = a + b * xx;
+     */
+    vecAcc0 = vfmaq(vecAcc0, vecAcc1, vecTmpFlt0);
+    /*
+     * c = c + d * xx;
+     */
+    vecAcc2 = vfmaq(vecAcc2, vecAcc3, vecTmpFlt0);
+    /*
+     * xx = xx * xx;
+     */
+    vecTmpFlt0 = vecTmpFlt0 * vecTmpFlt0;
+    vecExpUnBiasedFlt = vcvtq_f16_s16(vecExpUnBiased);
+    /*
+     * r.f = a + c * xx;
+     */
+    vecAcc0 = vfmaq(vecAcc0, vecAcc2, vecTmpFlt0);
+    /*
+     * add exponent
+     * r.f = r.f + ((float32_t) m) * __logf_rng_f16;
+     */
+    vecAcc0 = vfmaq(vecAcc0, vecExpUnBiasedFlt, __logf_rng_f16);
+    // set log0 down to -inf
+    vecAcc0 = vdupq_m(vecAcc0, -F16INFINITY, vcmpeqq(vecIn, 0.0f));
+    return vecAcc0;
+}
+
+__STATIC_INLINE float16x8_t vexpq_f16(
+    float16x8_t x)
+{
+    // Perform range reduction [-log(2),log(2)]
+    int16x8_t       m = vcvtq_s16_f16(vmulq_n_f16(x, 1.4426950408f16));
+    float16x8_t     val = vfmsq_f16(x, vcvtq_f16_s16(m), vdupq_n_f16(0.6931471805f16));
+
+    // Polynomial Approximation
+    float16x8_t         poly = vtaylor_polyq_f16(val, exp_tab_f16);
+
+    // Reconstruct
+    poly = (float16x8_t) (vqaddq_s16((int16x8_t) (poly), vqshlq_n_s16(m, 10)));
+
+    poly = vdupq_m(poly, 0.0f, vcmpltq_n_s16(m, -14));
+    return poly;
+}
+
+__STATIC_INLINE float16x8_t arm_vec_exponent_f16(float16x8_t x, int16_t nb)
+{
+    float16x8_t         r = x;
+    nb--;
+    while (nb > 0) {
+        r = vmulq(r, x);
+        nb--;
+    }
+    return (r);
+}
+
+
+
+#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/
+
+
+
+#ifdef   __cplusplus
+}
+#endif
+
+#endif /* ARM FLOAT16 SUPPORTED */
+
+#endif /* _ARM_VEC_MATH_H */
+
+/**
+ *
+ * End of file.
+ */
diff --git a/CMSIS/DSP/Include/dsp/basic_math_functions_f16.h b/CMSIS/DSP/Include/dsp/basic_math_functions_f16.h
index 3227e62..9110998 100755
--- a/CMSIS/DSP/Include/dsp/basic_math_functions_f16.h
+++ b/CMSIS/DSP/Include/dsp/basic_math_functions_f16.h
@@ -36,7 +36,6 @@
 
 #include "dsp/none.h"
 #include "dsp/utils.h"
-#include "dsp/fast_math_functions_f16.h"
 
 
 #if defined(ARM_FLOAT16_SUPPORTED)
diff --git a/CMSIS/DSP/Include/dsp/fast_math_functions_f16.h b/CMSIS/DSP/Include/dsp/fast_math_functions_f16.h
index cafeac0..a081576 100755
--- a/CMSIS/DSP/Include/dsp/fast_math_functions_f16.h
+++ b/CMSIS/DSP/Include/dsp/fast_math_functions_f16.h
@@ -31,6 +31,8 @@
 
 #include "dsp/none.h"
 #include "dsp/utils.h"
+
+/* For sqrt_f32 */
 #include "dsp/fast_math_functions.h"
 
 #ifdef   __cplusplus
@@ -69,6 +71,42 @@
   @} end of SQRT group
  */
   
+/**
+  @brief         Floating-point vector of log values.
+  @param[in]     pSrc       points to the input vector
+  @param[out]    pDst       points to the output vector
+  @param[in]     blockSize  number of samples in each vector
+  @return        none
+ */
+  void arm_vlog_f16(
+  const float16_t * pSrc,
+        float16_t * pDst,
+        uint32_t blockSize);
+
+/**
+  @brief         Floating-point vector of exp values.
+  @param[in]     pSrc       points to the input vector
+  @param[out]    pDst       points to the output vector
+  @param[in]     blockSize  number of samples in each vector
+  @return        none
+ */
+  void arm_vexp_f16(
+  const float16_t * pSrc,
+        float16_t * pDst,
+        uint32_t blockSize);
+
+  /**
+  @brief         Floating-point vector of inverse values.
+  @param[in]     pSrc       points to the input vector
+  @param[out]    pDst       points to the output vector
+  @param[in]     blockSize  number of samples in each vector
+  @return        none
+ */
+  void arm_vinverse_f16(
+  const float16_t * pSrc,
+        float16_t * pDst,
+        uint32_t blockSize);
+
 #endif /*defined(ARM_FLOAT16_SUPPORTED)*/
 #ifdef   __cplusplus
 }
diff --git a/CMSIS/DSP/Include/dsp/statistics_functions_f16.h b/CMSIS/DSP/Include/dsp/statistics_functions_f16.h
index c891e3f..d08e122 100755
--- a/CMSIS/DSP/Include/dsp/statistics_functions_f16.h
+++ b/CMSIS/DSP/Include/dsp/statistics_functions_f16.h
@@ -123,6 +123,65 @@
         float16_t * pResult,
         uint32_t * pIndex);
 
+/**
+ * @brief Entropy
+ *
+ * @param[in]  pSrcA        Array of input values.
+ * @param[in]  blockSize    Number of samples in the input array.
+ * @return     Entropy      -Sum(p ln p)
+ *
+ */
+
+
+float16_t arm_entropy_f16(const float16_t * pSrcA,uint32_t blockSize);
+
+float16_t arm_logsumexp_f16(const float16_t *in, uint32_t blockSize);
+
+/**
+ * @brief Dot product with log arithmetic
+ *
+ * Vectors are containing the log of the samples
+ *
+ * @param[in]       pSrcA points to the first input vector
+ * @param[in]       pSrcB points to the second input vector
+ * @param[in]       blockSize number of samples in each vector
+ * @param[in]       pTmpBuffer temporary buffer of length blockSize
+ * @return The log of the dot product .
+ *
+ */
+
+
+float16_t arm_logsumexp_dot_prod_f16(const float16_t * pSrcA,
+  const float16_t * pSrcB,
+  uint32_t blockSize,
+  float16_t *pTmpBuffer);
+
+/**
+ * @brief Kullback-Leibler
+ *
+ * @param[in]  pSrcA         Pointer to an array of input values for probability distribution A.
+ * @param[in]  pSrcB         Pointer to an array of input values for probability distribution B.
+ * @param[in]  blockSize     Number of samples in the input array.
+ * @return Kullback-Leibler  Divergence D(A || B)
+ *
+ */
+float16_t arm_kullback_leibler_f16(const float16_t * pSrcA
+  ,const float16_t * pSrcB
+  ,uint32_t blockSize);
+
+/**
+    @brief         Maximum value of a floating-point vector.
+    @param[in]     pSrc       points to the input vector
+    @param[in]     blockSize  number of samples in input vector
+    @param[out]    pResult    maximum value returned here
+    @return        none
+   */
+  void arm_max_no_idx_f16(
+      const float16_t *pSrc,
+      uint32_t   blockSize,
+      float16_t *pResult);
+
+
 
 #endif /*defined(ARM_FLOAT16_SUPPORTED)*/
 #ifdef   __cplusplus
diff --git a/CMSIS/DSP/Source/CommonTables/arm_common_tables_f16.c b/CMSIS/DSP/Source/CommonTables/arm_common_tables_f16.c
index 4945f5f..8298c89 100755
--- a/CMSIS/DSP/Source/CommonTables/arm_common_tables_f16.c
+++ b/CMSIS/DSP/Source/CommonTables/arm_common_tables_f16.c
@@ -12550,6 +12550,32 @@
 
 #endif /*!defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES)*/
 
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
+const float16_t exp_tab_f16[8] = {
+    (1.f16),
+    (0.0416598916054f16),
+    (0.500000596046f16),
+    (0.00138889f16),
+    (1.00000011921f16),
+    (0.00833693705499f16),
+    (0.166665703058f16),
+    (0.000195780929062f16),
+};
+
+const float16_t __logf_lut_f16[8] = {
+    -2.295614848256274f16,         /*p0*/
+    -2.470711633419806f16,         /*p4*/
+    -5.686926051100417f16,         /*p2*/
+    -0.165253547131978f16,         /*p6*/
+    +5.175912446351073f16,         /*p1*/
+    +0.844006986174912f16,         /*p5*/
+    +4.584458825456749f16,         /*p3*/
+    +0.014127821926000f16          /*p7*/
+};
+
+#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+
 #endif /* #if defined(ARM_FLOAT16_SUPPORTED) */
 
 #endif /* Not ARM AC5 */
diff --git a/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt b/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt
index c784b52..50f8109 100644
--- a/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt
@@ -47,6 +47,12 @@
 target_sources(CMSISDSPFastMath PRIVATE arm_vlog_f32.c)
 target_sources(CMSISDSPFastMath PRIVATE arm_vexp_f32.c)
 
+if ((NOT ARMAC5) AND (NOT DISABLEFLOAT16))
+target_sources(CMSISDSPFastMath PRIVATE arm_vlog_f16.c)
+target_sources(CMSISDSPFastMath PRIVATE arm_vexp_f16.c)
+target_sources(CMSISDSPFastMath PRIVATE arm_vinverse_f16.c)
+endif()
+
 
 ### Includes
 target_include_directories(CMSISDSPFastMath PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/FastMathFunctions/FastMathFunctionsF16.c b/CMSIS/DSP/Source/FastMathFunctions/FastMathFunctionsF16.c
new file mode 100755
index 0000000..a14e899
--- /dev/null
+++ b/CMSIS/DSP/Source/FastMathFunctions/FastMathFunctionsF16.c
@@ -0,0 +1,31 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        FastMathFunctions.c
+ * Description:  Combination of all fast math function source files.
+ *
+ * $Date:        16. March 2020
+ * $Revision:    V1.1.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2019-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "arm_vexp_f16.c"
+#include "arm_vlog_f16.c"
+#include "arm_vinverse_f16.c"
diff --git a/CMSIS/DSP/Source/FastMathFunctions/arm_vexp_f16.c b/CMSIS/DSP/Source/FastMathFunctions/arm_vexp_f16.c
new file mode 100755
index 0000000..abfaf74
--- /dev/null
+++ b/CMSIS/DSP/Source/FastMathFunctions/arm_vexp_f16.c
@@ -0,0 +1,84 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_vlog_f16.c
+ * Description:  Fast vectorized log
+ *
+ * $Date:        15. Octoboer 2020
+ * $Revision:    V1.6.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/fast_math_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include "arm_common_tables.h"
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM) || defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)
+#include "arm_vec_math_f16.h"
+#endif
+
+
+void arm_vexp_f16(
+  const float16_t * pSrc,
+        float16_t * pDst,
+        uint32_t blockSize)
+{
+   uint32_t blkCnt; 
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+   f16x8_t src;
+   f16x8_t dst;
+
+   blkCnt = blockSize >> 3;
+
+   while (blkCnt > 0U)
+   {
+      src = vld1q(pSrc);
+      dst = vexpq_f16(src);
+      vst1q(pDst, dst);
+
+      pSrc += 8;
+      pDst += 8;
+      /* Decrement loop counter */
+      blkCnt--;
+   }
+
+   blkCnt = blockSize & 7;
+#else
+   blkCnt = blockSize;
+#endif
+
+   while (blkCnt > 0U)
+   {
+      /* C = log(A) */
+  
+      /* Calculate log and store result in destination buffer. */
+      *pDst++ = expf(*pSrc++);
+  
+      /* Decrement loop counter */
+      blkCnt--;
+   }
+}
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/FastMathFunctions/arm_vinverse_f16.c b/CMSIS/DSP/Source/FastMathFunctions/arm_vinverse_f16.c
new file mode 100755
index 0000000..8eb6488
--- /dev/null
+++ b/CMSIS/DSP/Source/FastMathFunctions/arm_vinverse_f16.c
@@ -0,0 +1,81 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_vinverse_f16.c
+ * Description:  Fast vectorized inverse
+ *
+ * $Date:        15. Octoboer 2020
+ * $Revision:    V1.6.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/fast_math_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include "arm_common_tables.h"
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM) || defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)
+#include "arm_vec_math_f16.h"
+#endif
+
+void arm_vinverse_f16(
+  const float16_t * pSrc,
+        float16_t * pDst,
+        uint32_t blockSize)
+{
+   uint32_t blkCnt; 
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+   f16x8_t src;
+   f16x8_t dst;
+
+   blkCnt = blockSize >> 3;
+
+   while (blkCnt > 0U)
+   {
+      src = vld1q(pSrc);
+      dst = vrecip_hiprec_f16(src);
+      vst1q(pDst, dst);
+
+      pSrc += 8;
+      pDst += 8;
+      /* Decrement loop counter */
+      blkCnt--;
+   }
+
+   blkCnt = blockSize & 7;
+#else
+   blkCnt = blockSize;
+#endif
+
+   while (blkCnt > 0U)
+   {
+      
+      *pDst++ = 1.0 / *pSrc++;
+  
+      /* Decrement loop counter */
+      blkCnt--;
+   }
+}
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/FastMathFunctions/arm_vlog_f16.c b/CMSIS/DSP/Source/FastMathFunctions/arm_vlog_f16.c
new file mode 100755
index 0000000..88aa4c1
--- /dev/null
+++ b/CMSIS/DSP/Source/FastMathFunctions/arm_vlog_f16.c
@@ -0,0 +1,83 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_vlog_f16.c
+ * Description:  Fast vectorized log
+ *
+ * $Date:        15. Octoboer 2020
+ * $Revision:    V1.6.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/fast_math_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include "arm_common_tables.h"
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM) || defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)
+#include "arm_vec_math_f16.h"
+#endif
+
+void arm_vlog_f16(
+  const float16_t * pSrc,
+        float16_t * pDst,
+        uint32_t blockSize)
+{
+   uint32_t blkCnt; 
+
+#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+   f16x8_t src;
+   f16x8_t dst;
+
+   blkCnt = blockSize >> 3;
+
+   while (blkCnt > 0U)
+   {
+      src = vld1q(pSrc);
+      dst = vlogq_f16(src);
+      vst1q(pDst, dst);
+
+      pSrc += 8;
+      pDst += 8;
+      /* Decrement loop counter */
+      blkCnt--;
+   }
+
+   blkCnt = blockSize & 7;
+#else
+   blkCnt = blockSize;
+#endif
+
+   while (blkCnt > 0U)
+   {
+      /* C = log(A) */
+  
+      /* Calculate log and store result in destination buffer. */
+      *pDst++ = logf(*pSrc++);
+  
+      /* Decrement loop counter */
+      blkCnt--;
+   }
+}
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_init_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_init_f32.c
index b0739b1..7617126 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_init_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_init_f32.c
@@ -33,9 +33,18 @@
  *
  */
 
+/**
+  @ingroup groupSVM
+ */
 
 /**
- * @addtogroup groupSVM
+  @defgroup linearsvm Linear SVM
+
+  Linear SVM classifier
+ */
+
+/**
+ * @addtogroup linearsvm
  * @{
  */
 
@@ -77,5 +86,5 @@
 
 
 /**
- * @} end of groupSVM group
+ * @} end of linearsvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_predict_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_predict_f32.c
index 9cba7d1..c45426a 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_predict_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_linear_predict_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
- * @addtogroup groupSVM
+ * @addtogroup linearsvm
  * @{
  */
 
@@ -449,5 +449,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSVM group
+ * @} end of linearsvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_init_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_init_f32.c
index 45e89ef..5d42770 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_init_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_init_f32.c
@@ -28,12 +28,20 @@
 #include <limits.h>
 #include <math.h>
 
-
 /**
- * @addtogroup groupSVM
- * @{
+  @ingroup groupSVM
  */
 
+/**
+  @defgroup polysvm Polynomial SVM
+
+  Polynomial SVM classifier
+ */
+
+/**
+ * @addtogroup polysvm
+ * @{
+ */
 
 
 /**
@@ -83,5 +91,5 @@
 
 
 /**
- * @} end of groupSVM group
+ * @} end of polysvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c
index 4a108ff..5fca1e5 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_polynomial_predict_f32.c
@@ -33,7 +33,7 @@
 #endif
 
 /**
- * @addtogroup groupSVM
+ * @addtogroup polysvm
  * @{
  */
 
@@ -484,5 +484,5 @@
 
 
 /**
- * @} end of groupSVM group
+ * @} end of polysvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_init_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_init_f32.c
index c00f9eb..5e0d371 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_init_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_init_f32.c
@@ -28,9 +28,19 @@
 #include <limits.h>
 #include <math.h>
 
+/**
+  @ingroup groupSVM
+ */
 
 /**
- * @addtogroup groupSVM
+  @defgroup rbfsvm RBF SVM
+
+  RBF SVM classifier
+ */
+
+
+/**
+ * @addtogroup rbfsvm
  * @{
  */
 
@@ -75,5 +85,5 @@
 
 
 /**
- * @} end of groupSVM group
+ * @} end of rbfsvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_predict_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_predict_f32.c
index 0907dbb..d29a216 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_predict_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_rbf_predict_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
- * @addtogroup groupSVM
+ * @addtogroup rbfsvm
  * @{
  */
 
@@ -517,5 +517,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSVM group
+ * @} end of rbfsvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c
index 407b68f..2017289 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_init_f32.c
@@ -28,9 +28,18 @@
 #include <limits.h>
 #include <math.h>
 
+/**
+  @ingroup groupSVM
+ */
 
 /**
- * @addtogroup groupSVM
+  @defgroup sigmoidsvm Sigmoid SVM
+
+  Sigmoid SVM classifier
+ */
+
+/**
+ * @addtogroup sigmoidsvm
  * @{
  */
 
@@ -77,5 +86,5 @@
 
 
 /**
- * @} end of groupSVM group
+ * @} end of sigmoidsvm group
  */
diff --git a/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c b/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c
index f15e236..8397226 100755
--- a/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c
+++ b/CMSIS/DSP/Source/SVMFunctions/arm_svm_sigmoid_predict_f32.c
@@ -29,7 +29,7 @@
 #include <math.h>
 
 /**
- * @addtogroup groupSVM
+ * @addtogroup sigmoidsvm
  * @{
  */
 
@@ -481,5 +481,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSVM group
+ * @} end of sigmoidsvm group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt b/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
index b4310f3..67833f1 100644
--- a/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
@@ -59,4 +59,9 @@
 target_sources(CMSISDSPStatistics PRIVATE arm_rms_f16.c)
 target_sources(CMSISDSPStatistics PRIVATE arm_std_f16.c)
 target_sources(CMSISDSPStatistics PRIVATE arm_var_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_entropy_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_kullback_leibler_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_logsumexp_dot_prod_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_logsumexp_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_max_no_idx_f16.c)
 endif()
\ No newline at end of file
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c b/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c
index b542e97..14ceb1d 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c
@@ -33,3 +33,8 @@
 #include "arm_rms_f16.c"
 #include "arm_std_f16.c"
 #include "arm_var_f16.c"
+#include "arm_entropy_f16.c"
+#include "arm_kullback_leibler_f16.c"
+#include "arm_logsumexp_dot_prod_f16.c"
+#include "arm_logsumexp_f16.c"
+#include "arm_max_no_idx_f16.c"
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f16.c
new file mode 100755
index 0000000..a350178
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f16.c
@@ -0,0 +1,138 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_logsumexp_f16.c
+ * Description:  LogSumExp
+ *
+ *
+ * Target Processor: Cortex-M and Cortex-A cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include <limits.h>
+#include <math.h>
+
+/**
+  @ingroup groupStats
+ */
+
+/**
+  @defgroup Entropy Entropy
+
+  Computes the entropy of a distribution
+
+ */
+
+/**
+ * @addtogroup Entropy
+ * @{
+ */
+
+
+/**
+ * @brief Entropy
+ *
+ * @param[in]  pSrcA        Array of input values.
+ * @param[in]  blockSize    Number of samples in the input array.
+ * @return     Entropy      -Sum(p ln p)
+ *
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#include "arm_helium_utils.h"
+#include "arm_vec_math_f16.h"
+
+float16_t arm_entropy_f16(const float16_t * pSrcA,uint32_t blockSize)
+{
+    uint32_t        blkCnt;
+    float16_t       accum=0.0f,p;
+
+
+    blkCnt = blockSize;
+
+    f16x8_t         vSum = vdupq_n_f16(0.0f);
+    /* Compute 4 outputs at a time */
+    blkCnt = blockSize >> 3U;
+
+    while (blkCnt > 0U)
+    {
+        f16x8_t         vecIn = vld1q(pSrcA);
+
+        vSum = vaddq_f16(vSum, vmulq(vecIn, vlogq_f16(vecIn)));
+
+        /*
+         * Decrement the blockSize loop counter
+         * Advance vector source and destination pointers
+         */
+        pSrcA += 8;
+        blkCnt --;
+    }
+
+    accum = vecAddAcrossF16Mve(vSum);
+
+    /* Tail */
+    blkCnt = blockSize & 0x7;
+    while(blkCnt > 0)
+    {
+       p = *pSrcA++;
+       accum += p * logf(p);
+       
+       blkCnt--;
+    
+    }
+
+    return (-accum);
+}
+
+#else
+
+float16_t arm_entropy_f16(const float16_t * pSrcA,uint32_t blockSize)
+{
+    const float16_t *pIn;
+    uint32_t blkCnt;
+    float16_t accum, p;
+ 
+    pIn = pSrcA;
+    blkCnt = blockSize;
+
+    accum = 0.0f;
+
+    while(blkCnt > 0)
+    {
+       p = *pIn++;
+       accum += p * logf(p);
+       
+       blkCnt--;
+    
+    }
+
+    return(-accum);
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+ * @} end of Entropy group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f32.c
index 60c325d..ede07ec 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f32.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
- * @addtogroup groupStats
+ * @addtogroup Entropy
  * @{
  */
 
@@ -168,5 +168,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupStats group
+ * @} end of Entropy group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f64.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f64.c
index d2a6a49..7a9de50 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f64.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_entropy_f64.c
@@ -29,7 +29,7 @@
 #include <math.h>
 
 /**
- * @addtogroup groupStats
+ * @addtogroup Entropy
  * @{
  */
 
@@ -67,5 +67,5 @@
 }
 
 /**
- * @} end of groupStats group
+ * @} end of Entropy group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f16.c
new file mode 100755
index 0000000..06f4ba6
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f16.c
@@ -0,0 +1,150 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_logsumexp_f16.c
+ * Description:  LogSumExp
+ *
+ *
+ * Target Processor: Cortex-M and Cortex-A cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include <limits.h>
+#include <math.h>
+
+/**
+  @ingroup groupStats
+ */
+
+/**
+  @defgroup Kullback-Leibler Kullback-Leibler divergence
+
+  Computes the Kullback-Leibler divergence between two distributions
+
+ */
+
+
+/**
+ * @addtogroup Kullback-Leibler
+ * @{
+ */
+
+
+/**
+ * @brief Kullback-Leibler
+ *
+ * Distribution A may contain 0 with Neon version.
+ * Result will be right but some exception flags will be set.
+ *
+ * Distribution B must not contain 0 probability.
+ *
+ * @param[in]  *pSrcA         points to an array of input values for probaility distribution A.
+ * @param[in]  *pSrcB         points to an array of input values for probaility distribution B.
+ * @param[in]  blockSize      number of samples in the input array.
+ * @return Kullback-Leibler divergence D(A || B)
+ *
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#include "arm_helium_utils.h"
+#include "arm_vec_math_f16.h"
+
+float16_t arm_kullback_leibler_f16(const float16_t * pSrcA,const float16_t * pSrcB,uint32_t blockSize)
+{
+    uint32_t blkCnt;
+    float16_t accum, pA,pB;
+ 
+    
+    blkCnt = blockSize;
+
+    accum = 0.0f;
+
+    f16x8_t         vSum = vdupq_n_f16(0.0f);
+    blkCnt = blockSize >> 3;
+    while(blkCnt > 0)
+    {
+        f16x8_t         vecA = vld1q(pSrcA);
+        f16x8_t         vecB = vld1q(pSrcB);
+        f16x8_t         vRatio;
+
+        vRatio = vdiv_f16(vecB, vecA);
+        vSum = vaddq_f16(vSum, vmulq(vecA, vlogq_f16(vRatio)));
+
+        /*
+         * Decrement the blockSize loop counter
+         * Advance vector source and destination pointers
+         */
+        pSrcA += 8;
+        pSrcB += 8;
+        blkCnt --;
+    }
+
+    accum = vecAddAcrossF16Mve(vSum);
+
+    blkCnt = blockSize & 7;
+    while(blkCnt > 0)
+    {
+       pA = *pSrcA++;
+       pB = *pSrcB++;
+       accum += pA * logf(pB / pA);
+       
+       blkCnt--;
+    
+    }
+
+    return(-accum);
+}
+
+#else
+float16_t arm_kullback_leibler_f16(const float16_t * pSrcA,const float16_t * pSrcB,uint32_t blockSize)
+{
+    const float16_t *pInA, *pInB;
+    uint32_t blkCnt;
+    float16_t accum, pA,pB;
+ 
+    pInA = pSrcA;
+    pInB = pSrcB;
+    blkCnt = blockSize;
+
+    accum = 0.0f;
+
+    while(blkCnt > 0)
+    {
+       pA = *pInA++;
+       pB = *pInB++;
+       accum += pA * logf(pB / pA);
+       
+       blkCnt--;
+    
+    }
+
+    return(-accum);
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+ * @} end of Kullback-Leibler group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f32.c
index b664757..e7817cb 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f32.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
- * @addtogroup groupStats
+ * @addtogroup Kullback-Leibler
  * @{
  */
 
@@ -187,5 +187,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupStats group
+ * @} end of Kullback-Leibler group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f64.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f64.c
index ded2c6c..e56dc82 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f64.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_kullback_leibler_f64.c
@@ -29,7 +29,7 @@
 #include <math.h>
 
 /**
- * @addtogroup groupStats
+ * @addtogroup Kullback-Leibler
  * @{
  */
 
@@ -69,5 +69,5 @@
 }
 
 /**
- * @} end of groupStats group
+ * @} end of Kullback-Leibler group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f16.c
new file mode 100755
index 0000000..b76d17b
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f16.c
@@ -0,0 +1,82 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_logsumexp_f16.c
+ * Description:  LogSumExp
+ *
+ *
+ * Target Processor: Cortex-M and Cortex-A cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include <limits.h>
+#include <math.h>
+
+/**
+  @ingroup groupStats
+ */
+
+/**
+  @defgroup LogSumExp LogSumExp
+
+  LogSumExp optimizations to compute sum of probabilities with Gaussian distributions
+
+ */
+
+/**
+ * @addtogroup LogSumExp
+ * @{
+ */
+
+
+/**
+ * @brief Dot product with log arithmetic
+ *
+ * Vectors are containing the log of the samples
+ *
+ * @param[in]       *pSrcA points to the first input vector
+ * @param[in]       *pSrcB points to the second input vector
+ * @param[in]       blockSize number of samples in each vector
+ * @param[in]       *pTmpBuffer temporary buffer of length blockSize
+ * @return The log of the dot product.
+ *
+ */
+
+
+float16_t arm_logsumexp_dot_prod_f16(const float16_t * pSrcA,
+  const float16_t * pSrcB,
+  uint32_t blockSize,
+  float16_t *pTmpBuffer)
+{
+    float16_t result;
+    arm_add_f16((float16_t*)pSrcA, (float16_t*)pSrcB, pTmpBuffer, blockSize);
+
+    result = arm_logsumexp_f16(pTmpBuffer, blockSize);
+    return(result);
+}
+
+/**
+ * @} end of LogSumExp group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c
index 12ff09b..a473ef4 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_dot_prod_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
- * @addtogroup groupStats
+ * @addtogroup LogSumExp
  * @{
  */
 
@@ -62,5 +62,5 @@
 }
 
 /**
- * @} end of groupStats group
+ * @} end of LogSumExp group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f16.c
new file mode 100755
index 0000000..c851bf7
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f16.c
@@ -0,0 +1,170 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_logsumexp_f16.c
+ * Description:  LogSumExp
+ *
+ *
+ * Target Processor: Cortex-M and Cortex-A cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#include <limits.h>
+#include <math.h>
+
+
+/**
+ * @addtogroup LogSumExp
+ * @{
+ */
+
+
+/**
+ * @brief Computation of the LogSumExp
+ *
+ * In probabilistic computations, the dynamic of the probability values can be very
+ * wide because they come from gaussian functions.
+ * To avoid underflow and overflow issues, the values are represented by their log.
+ * In this representation, multiplying the original exp values is easy : their logs are added.
+ * But adding the original exp values is requiring some special handling and it is the
+ * goal of the LogSumExp function.
+ *
+ * If the values are x1...xn, the function is computing:
+ *
+ * ln(exp(x1) + ... + exp(xn)) and the computation is done in such a way that
+ * rounding issues are minimised.
+ *
+ * The max xm of the values is extracted and the function is computing:
+ * xm + ln(exp(x1 - xm) + ... + exp(xn - xm))
+ *
+ * @param[in]  *in         Pointer to an array of input values.
+ * @param[in]  blockSize   Number of samples in the input array.
+ * @return LogSumExp
+ *
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#include "arm_helium_utils.h"
+#include "arm_vec_math_f16.h"
+
+float16_t arm_logsumexp_f16(const float16_t *in, uint32_t blockSize)
+{
+    float16_t       maxVal;
+    const float16_t *pIn;
+    int32_t         blkCnt;
+    float16_t       accum=0.0f16;
+    float16_t       tmp;
+
+
+    arm_max_no_idx_f16((float16_t *) in, blockSize, &maxVal);
+
+
+    blkCnt = blockSize;
+    pIn = in;
+
+
+    f16x8_t         vSum = vdupq_n_f16(0.0f16);
+    blkCnt = blockSize >> 3;
+    while(blkCnt > 0)
+    {
+        f16x8_t         vecIn = vld1q(pIn);
+        f16x8_t         vecExp;
+
+        vecExp = vexpq_f16(vsubq_n_f16(vecIn, maxVal));
+
+        vSum = vaddq_f16(vSum, vecExp);
+
+        /*
+         * Decrement the blockSize loop counter
+         * Advance vector source and destination pointers
+         */
+        pIn += 8;
+        blkCnt --;
+    }
+
+    /* sum + log */
+    accum = vecAddAcrossF16Mve(vSum);
+
+    blkCnt = blockSize & 0x7;
+    while(blkCnt > 0)
+    {
+       tmp = *pIn++;
+       accum += expf(tmp - maxVal);
+       blkCnt--;
+    
+    }
+
+    accum = maxVal + logf(accum);
+
+    return (accum);
+}
+
+#else
+float16_t arm_logsumexp_f16(const float16_t *in, uint32_t blockSize)
+{
+    float16_t maxVal;
+    float16_t tmp;
+    const float16_t *pIn;
+    uint32_t blkCnt;
+    float16_t accum;
+ 
+    pIn = in;
+    blkCnt = blockSize;
+
+    maxVal = *pIn++;
+    blkCnt--;
+
+    while(blkCnt > 0)
+    {
+       tmp = *pIn++;
+
+       if (tmp > maxVal)
+       {
+          maxVal = tmp;
+       }
+       blkCnt--;
+    
+    }
+
+    blkCnt = blockSize;
+    pIn = in;
+    accum = 0;
+    while(blkCnt > 0)
+    {
+       tmp = *pIn++;
+       accum += expf(tmp - maxVal);
+       blkCnt--;
+    
+    }
+    accum = maxVal + logf(accum);
+
+    return(accum);
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+ * @} end of LogSumExp group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f32.c
index c2e1926..2233e04 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f32.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_logsumexp_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
- * @addtogroup groupStats
+ * @addtogroup LogSumExp
  * @{
  */
 
@@ -271,5 +271,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupStats group
+ * @} end of LogSumExp group
  */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_max_no_idx_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_no_idx_f16.c
new file mode 100755
index 0000000..88a6bee
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_no_idx_f16.c
@@ -0,0 +1,144 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_max_no_idx_f16.c
+ * Description:  Maximum value of a floating-point vector without returning the index
+ *
+ * $Date:        16. October 2020
+ * $Revision:    V1.6.0
+ *
+ * Target Processor: Cortex-M and Cortex-A cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE)
+#include <limits.h>
+#endif
+
+/**
+  @ingroup groupStats
+ */
+
+
+/**
+  @addtogroup Max
+  @{
+ */
+
+/**
+  @brief         Maximum value of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    maximum value returned here
+  @return        none
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+void arm_max_no_idx_f16(
+    const float16_t *pSrc,
+    uint32_t   blockSize,
+    float16_t *pResult)
+{
+   f16x8_t     vecSrc;
+   f16x8_t     curExtremValVec = vdupq_n_f16(F16_MIN);
+   float16_t   maxValue = F16_MIN;
+   float16_t   newVal;
+   uint32_t    blkCnt;
+
+   /* Loop unrolling: Compute 4 outputs at a time */
+   blkCnt = blockSize >> 3U;
+
+   while (blkCnt > 0U)
+   {
+
+        vecSrc = vldrhq_f16(pSrc);
+        /*
+         * update per-lane max.
+         */
+        curExtremValVec = vmaxnmq(vecSrc, curExtremValVec);
+        /*
+         * Decrement the blockSize loop counter
+         * Advance vector source and destination pointers
+         */
+        pSrc += 8;
+        blkCnt --;
+    }
+    /*
+     * Get max value across the vector
+     */
+    maxValue = vmaxnmvq(maxValue, curExtremValVec);
+
+    blkCnt = blockSize & 7;
+
+    while (blkCnt > 0U)
+    {
+        newVal = *pSrc++;
+
+        /* compare for the maximum value */
+        if (maxValue < newVal)
+        {
+            /* Update the maximum value and it's index */
+            maxValue = newVal;
+        }
+
+        blkCnt --;
+    }
+
+    *pResult = maxValue;
+}
+
+#else
+
+void arm_max_no_idx_f16(
+    const float16_t *pSrc,
+    uint32_t   blockSize,
+    float16_t *pResult)
+{
+   float16_t   maxValue = F16_MIN;
+   float16_t   newVal;
+
+   while (blockSize > 0U)
+   {
+       newVal = *pSrc++;
+   
+       /* compare for the maximum value */
+       if (maxValue < newVal)
+       {
+           /* Update the maximum value and it's index */
+           maxValue = newVal;
+       }
+   
+       blockSize --;
+   }
+    
+   *pResult = maxValue;
+}
+
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of Max group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c
index 727a594..af35628 100755
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c
@@ -74,15 +74,13 @@
     arm_mean_f16(pSrc, blockSize, &fMean);
 
 /* 6.14 bug */
-#if defined(SDCOMP_xxx)
-#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) && (__ARMCC_VERSION < 6150001)
     __asm volatile(
         "   vmov.i32                     %[acc], #0 \n"
         : [acc] "+t"(sumVec)
         : 
         : );
 #endif
-#endif
 
     blkCnt = blockSize;
     do {
diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f16.c b/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f16.c
index 18ae0f4..14bcc86 100755
--- a/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f16.c
+++ b/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f16.c
@@ -31,11 +31,21 @@
 #include <limits.h>
 #include <math.h>
 
-
 /**
   @ingroup groupSupport
  */
 
+/**
+  @defgroup barycenter Barycenter
+
+  Barycenter of weighted vectors
+ */
+
+/**
+  @addtogroup barycenter
+  @{
+ */
+
 
 /**
  * @brief Barycenter
@@ -255,7 +265,7 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSupport group
+ * @} end of barycenter group
  */
 
 #endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f32.c b/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f32.c
index e804093..a08fab1 100755
--- a/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f32.c
+++ b/CMSIS/DSP/Source/SupportFunctions/arm_barycenter_f32.c
@@ -30,7 +30,7 @@
 
 
 /**
-  @ingroup groupSupport
+  @ingroup barycenter
  */
 
 
@@ -408,5 +408,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSupport group
+ * @} end of barycenter group
  */
diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f16.c b/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f16.c
index 1f3df94..1d2c6ef 100755
--- a/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f16.c
+++ b/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f16.c
@@ -32,9 +32,19 @@
 
 #if defined(ARM_FLOAT16_SUPPORTED)
 
+/**
+  @ingroup groupSupport
+ */
 
 /**
- * @addtogroup groupSupport
+  @defgroup weightedsum Weighted Sum
+
+  Weighted sum of values
+ */
+
+
+/**
+ * @addtogroup weightedsum
  * @{
  */
 
@@ -128,7 +138,7 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSupport group
+ * @} end of weightedsum group
  */
 
 #endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f32.c b/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f32.c
index 9bbfe1d..fd8d535 100755
--- a/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f32.c
+++ b/CMSIS/DSP/Source/SupportFunctions/arm_weighted_sum_f32.c
@@ -31,7 +31,7 @@
 #include "dsp/support_functions.h"
 
 /**
- * @addtogroup groupSupport
+ * @addtogroup weightedsum
  * @{
  */
 
@@ -182,5 +182,5 @@
 #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
 
 /**
- * @} end of groupSupport group
+ * @} end of weightedsum group
  */
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
index ebc02ec..e6f4670 100644
--- a/CMSIS/DSP/Testing/CMakeLists.txt
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -339,6 +339,7 @@
   Source/Tests/TransformRF16.cpp
   Source/Tests/SupportTestsF16.cpp
   Source/Tests/SupportBarTestsF16.cpp
+  Source/Tests/FastMathF16.cpp
   )
 endif()
 endif() 
diff --git a/CMSIS/DSP/Testing/Include/Tests/FastMathF16.h b/CMSIS/DSP/Testing/Include/Tests/FastMathF16.h
new file mode 100755
index 0000000..d0fcf84
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/Tests/FastMathF16.h
@@ -0,0 +1,23 @@
+#include "Test.h"
+#include "Pattern.h"
+
+#include "dsp/fast_math_functions_f16.h"
+
+class FastMathF16:public Client::Suite
+    {
+        public:
+            FastMathF16(Testing::testID_t id);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+        private:
+            #include "FastMathF16_decl.h"
+            
+            Client::Pattern<float16_t> input;
+
+            Client::LocalPattern<float16_t> output;
+
+            // Reference patterns are not loaded when we are in dump mode
+            Client::RefPattern<float16_t> ref;
+
+           
+    };
diff --git a/CMSIS/DSP/Testing/PatternGeneration/FastMath.py b/CMSIS/DSP/Testing/PatternGeneration/FastMath.py
index e0b1cb5..6dc9b13 100755
--- a/CMSIS/DSP/Testing/PatternGeneration/FastMath.py
+++ b/CMSIS/DSP/Testing/PatternGeneration/FastMath.py
@@ -28,7 +28,7 @@
     vals[0] = -0.4
     sqrtvals[0] = 0.0
     
-    if format != 0:
+    if format != 0 and format != 16:
         angles=np.concatenate((a1,a2,a1))
         angles = angles / (2*math.pi)
     config.writeInput(1, angles,"Angles")
@@ -43,7 +43,7 @@
     config.writeInput(1, samples,"Samples")
 
 
-def writeTestsF32(config,format):
+def writeTestsFloat(config,format):
     writeTests(config,format)
 
     data1 = np.random.randn(20)
@@ -61,22 +61,30 @@
     v = np.exp(samples)
     config.writeReference(1, v,"Exp")
 
-    # For benchmarks
+    # For benchmarks and other tests
     samples=np.random.randn(NBSAMPLES)
     samples = np.abs(Tools.normalize(samples))
     config.writeInput(1, samples,"Samples")
 
+    v = 1.0 / samples
+    config.writeReference(1, v,"Inverse")
+
+
+
+
     
 def generatePatterns():
     PATTERNDIR = os.path.join("Patterns","DSP","FastMath","FastMath")
     PARAMDIR = os.path.join("Parameters","DSP","FastMath","FastMath")
     
     configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
+    configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
     configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
     configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
     
     
-    writeTestsF32(configf32,0)
+    writeTestsFloat(configf32,0)
+    writeTestsFloat(configf16,16)
     writeTests(configq31,31)
     writeTests(configq15,15)
 
diff --git a/CMSIS/DSP/Testing/PatternGeneration/Stats.py b/CMSIS/DSP/Testing/PatternGeneration/Stats.py
index e0610eb..9ff92ad 100755
--- a/CMSIS/DSP/Testing/PatternGeneration/Stats.py
+++ b/CMSIS/DSP/Testing/PatternGeneration/Stats.py
@@ -116,6 +116,13 @@
     config.writeInputS16(nb, dims,"Dims")
     config.writeReference(nb, outputs,"RefLogSumExpDot")
 
+def writeF16OnlyTests(config,nb):
+    entropyTest(config,nb)
+    logsumexpTest(config,nb+1)
+    klTest(config,nb+2)
+    logSumExpDotTest(config,nb+3)
+    return(nb+4)
+
 def writeF32OnlyTests(config,nb):
     entropyTest(config,nb)
     logsumexpTest(config,nb+1)
@@ -357,6 +364,7 @@
     writeTests(configq7,1,7)
 
     nb=writeTests(configf16,1,16)
+    nb=writeF16OnlyTests(configf16,22)
 
 if __name__ == '__main__':
   generatePatterns()
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Angles1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Angles1_f16.txt
new file mode 100755
index 0000000..23d60b6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Angles1_f16.txt
@@ -0,0 +1,48 @@
+H
+23
+// 0.000000
+0x0
+// 0.785398
+0x3a48
+// 1.570796
+0x3e48
+// 2.356194
+0x40b6
+// 3.141593
+0x4248
+// 3.926991
+0x43db
+// 4.712389
+0x44b6
+// 6.283184
+0x4648
+// -0.785398
+0xba48
+// -1.570796
+0xbe48
+// -2.356194
+0xc0b6
+// -3.141593
+0xc248
+// -3.926991
+0xc3db
+// -4.712389
+0xc4b6
+// -6.283186
+0xc648
+// 6.283185
+0x4648
+// 7.068583
+0x4712
+// 7.853982
+0x47db
+// 8.639380
+0x4852
+// 9.424778
+0x48b6
+// 10.210176
+0x491b
+// 10.995574
+0x497f
+// 12.566370
+0x4a48
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Cos1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Cos1_f16.txt
new file mode 100755
index 0000000..1162760
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Cos1_f16.txt
@@ -0,0 +1,48 @@
+H
+23
+// 1.000000
+0x3c00
+// 0.707107
+0x39a8
+// 0.000000
+0x0
+// -0.707107
+0xb9a8
+// -1.000000
+0xbc00
+// -0.707107
+0xb9a8
+// -0.000000
+0x8000
+// 1.000000
+0x3c00
+// 0.707107
+0x39a8
+// 0.000000
+0x0
+// -0.707107
+0xb9a8
+// -1.000000
+0xbc00
+// -0.707107
+0xb9a8
+// -0.000000
+0x8000
+// 1.000000
+0x3c00
+// 1.000000
+0x3c00
+// 0.707107
+0x39a8
+// 0.000000
+0x0
+// -0.707107
+0xb9a8
+// -1.000000
+0xbc00
+// -0.707107
+0xb9a8
+// -0.000000
+0x8000
+// 1.000000
+0x3c00
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Exp1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Exp1_f16.txt
new file mode 100755
index 0000000..ee6530f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Exp1_f16.txt
@@ -0,0 +1,106 @@
+H
+52
+// 1.000000
+0x3c00
+// 2.718282
+0x4170
+// 0.670320
+0x395d
+// 0.681354
+0x3973
+// 0.692569
+0x398a
+// 0.703969
+0x39a2
+// 0.715557
+0x39b9
+// 0.727336
+0x39d2
+// 0.739308
+0x39ea
+// 0.751477
+0x3a03
+// 0.763847
+0x3a1c
+// 0.776420
+0x3a36
+// 0.789201
+0x3a50
+// 0.802191
+0x3a6b
+// 0.815396
+0x3a86
+// 0.828818
+0x3aa1
+// 0.842460
+0x3abd
+// 0.856328
+0x3ada
+// 0.870423
+0x3af7
+// 0.884751
+0x3b14
+// 0.899315
+0x3b32
+// 0.914118
+0x3b50
+// 0.929165
+0x3b6f
+// 0.944459
+0x3b8e
+// 0.960005
+0x3bae
+// 0.975808
+0x3bce
+// 0.991870
+0x3bef
+// 1.008197
+0x3c08
+// 1.024792
+0x3c19
+// 1.041661
+0x3c2b
+// 1.058807
+0x3c3c
+// 1.076236
+0x3c4e
+// 1.093951
+0x3c60
+// 1.111958
+0x3c73
+// 1.130261
+0x3c85
+// 1.148866
+0x3c98
+// 1.167777
+0x3cac
+// 1.186999
+0x3cbf
+// 1.206538
+0x3cd3
+// 1.226398
+0x3ce8
+// 1.246585
+0x3cfd
+// 1.267105
+0x3d12
+// 1.287962
+0x3d27
+// 1.309163
+0x3d3d
+// 1.330712
+0x3d53
+// 1.352616
+0x3d69
+// 1.374881
+0x3d80
+// 1.397513
+0x3d97
+// 1.420516
+0x3daf
+// 1.443899
+0x3dc7
+// 1.467666
+0x3ddf
+// 1.491825
+0x3df8
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/ExpInput1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/ExpInput1_f16.txt
new file mode 100755
index 0000000..97b0292
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/ExpInput1_f16.txt
@@ -0,0 +1,106 @@
+H
+52
+// 0.000000
+0x0
+// 1.000000
+0x3c00
+// -0.400000
+0xb666
+// -0.383673
+0xb624
+// -0.367347
+0xb5e1
+// -0.351020
+0xb59e
+// -0.334694
+0xb55b
+// -0.318367
+0xb518
+// -0.302041
+0xb4d5
+// -0.285714
+0xb492
+// -0.269388
+0xb44f
+// -0.253061
+0xb40d
+// -0.236735
+0xb393
+// -0.220408
+0xb30e
+// -0.204082
+0xb288
+// -0.187755
+0xb202
+// -0.171429
+0xb17c
+// -0.155102
+0xb0f7
+// -0.138776
+0xb071
+// -0.122449
+0xafd6
+// -0.106122
+0xaecb
+// -0.089796
+0xadbf
+// -0.073469
+0xacb4
+// -0.057143
+0xab50
+// -0.040816
+0xa939
+// -0.024490
+0xa645
+// -0.008163
+0xa02e
+// 0.008163
+0x202e
+// 0.024490
+0x2645
+// 0.040816
+0x2939
+// 0.057143
+0x2b50
+// 0.073469
+0x2cb4
+// 0.089796
+0x2dbf
+// 0.106122
+0x2ecb
+// 0.122449
+0x2fd6
+// 0.138776
+0x3071
+// 0.155102
+0x30f7
+// 0.171429
+0x317c
+// 0.187755
+0x3202
+// 0.204082
+0x3288
+// 0.220408
+0x330e
+// 0.236735
+0x3393
+// 0.253061
+0x340d
+// 0.269388
+0x344f
+// 0.285714
+0x3492
+// 0.302041
+0x34d5
+// 0.318367
+0x3518
+// 0.334694
+0x355b
+// 0.351020
+0x359e
+// 0.367347
+0x35e1
+// 0.383673
+0x3624
+// 0.400000
+0x3666
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Inverse1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Inverse1_f16.txt
new file mode 100755
index 0000000..feaf72c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Inverse1_f16.txt
@@ -0,0 +1,514 @@
+H
+256
+// 13.282788
+0x4aa4
+// 74.795943
+0x54ad
+// 4.534229
+0x4489
+// 3.745299
+0x437e
+// 2.439216
+0x40e1
+// 6.181096
+0x462e
+// 4.004707
+0x4401
+// 11.283654
+0x49a4
+// 1.847747
+0x3f64
+// 5.549382
+0x458d
+// 1.536148
+0x3e25
+// 30.005060
+0x4f80
+// 31.475099
+0x4fde
+// 17.543195
+0x4c63
+// 2.419261
+0x40d7
+// 4.349753
+0x445a
+// 4.841152
+0x44d7
+// 8.101053
+0x480d
+// 7.775466
+0x47c7
+// 10.960573
+0x497b
+// 1.935619
+0x3fbe
+// 14.846755
+0x4b6c
+// 2.538388
+0x4114
+// 2.328174
+0x40a8
+// 1.187660
+0x3cc0
+// 9.459035
+0x48bb
+// 6.531679
+0x4688
+// 28.111782
+0x4f07
+// 2.775787
+0x418d
+// 1.610728
+0x3e71
+// 4.295367
+0x444c
+// 8.503271
+0x4840
+// 6.431921
+0x466f
+// 1.644415
+0x3e94
+// 5.022253
+0x4506
+// 46.675156
+0x51d6
+// 7.923678
+0x47ec
+// 1.986785
+0x3ff2
+// 12.264212
+0x4a22
+// 5.127496
+0x4521
+// 3.526537
+0x430e
+// 3.099069
+0x4233
+// 11.281743
+0x49a4
+// 5.690813
+0x45b1
+// 25.784472
+0x4e72
+// 31.172867
+0x4fcb
+// 5.406237
+0x4568
+// 1.003867
+0x3c04
+// 2.474874
+0x40f3
+// 5.259653
+0x4542
+// 6.833799
+0x46d5
+// 2.146320
+0x404b
+// 4.075154
+0x4413
+// 6.755841
+0x46c1
+// 3.298992
+0x4299
+// 3.211582
+0x426c
+// 154.452815
+0x58d4
+// 2.467569
+0x40ef
+// 13.353500
+0x4aad
+// 2.897118
+0x41cb
+// 11.198146
+0x4999
+// 2.095061
+0x4031
+// 5.949994
+0x45f3
+// 502.264324
+0x5fd9
+// 9.785310
+0x48e5
+// 24.679848
+0x4e2c
+// 9.141598
+0x4892
+// 4.842086
+0x44d8
+// 2.305929
+0x409d
+// 2.553810
+0x411c
+// 6.529844
+0x4688
+// 12.616308
+0x4a4f
+// 10.160835
+0x4915
+// 4.741947
+0x44be
+// 3.062033
+0x4220
+// 15.072163
+0x4b89
+// 19.437242
+0x4cdc
+// 304.465872
+0x5cc2
+// 3.697883
+0x4365
+// 1.200278
+0x3ccd
+// 12.039526
+0x4a05
+// 6.285477
+0x4649
+// 41.940922
+0x513e
+// 14.367260
+0x4b2f
+// 2.844286
+0x41b0
+// 2.434156
+0x40de
+// 18.803330
+0x4cb3
+// 3.590405
+0x432e
+// 45.916673
+0x51bd
+// 16.744938
+0x4c30
+// 9.513594
+0x48c2
+// 266.925697
+0x5c2c
+// 141.996772
+0x5870
+// 1.273840
+0x3d18
+// 4.064921
+0x4411
+// 3.059166
+0x421e
+// 3.063974
+0x4221
+// 12.270595
+0x4a23
+// 17.040917
+0x4c43
+// 1.259633
+0x3d0a
+// 2.821234
+0x41a4
+// 6.853772
+0x46db
+// 7.454620
+0x4774
+// 1.609663
+0x3e70
+// 11.592823
+0x49cc
+// 8.194720
+0x4819
+// 2.951149
+0x41e7
+// 2.312031
+0x40a0
+// 9.662832
+0x48d5
+// 1.513853
+0x3e0e
+// 93.930231
+0x55df
+// 91.754898
+0x55bc
+// 2.936342
+0x41df
+// 36.983413
+0x509f
+// 1.683027
+0x3ebb
+// 3.835847
+0x43ac
+// 4.018890
+0x4405
+// 8.686859
+0x4858
+// 3.832640
+0x43aa
+// 5.651256
+0x45a7
+// 167.057056
+0x5938
+// 10.621388
+0x4950
+// 2.039201
+0x4014
+// 3.169404
+0x4257
+// 121.699150
+0x579b
+// 1.962375
+0x3fd9
+// 3.588653
+0x432d
+// 6.551802
+0x468d
+// 2.273146
+0x408c
+// 6.206085
+0x4635
+// 1.260120
+0x3d0a
+// 1.328843
+0x3d51
+// 7.193014
+0x4731
+// 5.073456
+0x4513
+// 4.099381
+0x4419
+// 14.640782
+0x4b52
+// 8.470057
+0x483c
+// 35.841993
+0x507b
+// 25.902541
+0x4e7a
+// 8.278306
+0x4824
+// 6.579874
+0x4694
+// 3.183432
+0x425e
+// 3.157985
+0x4251
+// 30.987647
+0x4fbf
+// 4.960553
+0x44f6
+// 28.319462
+0x4f14
+// 3.360753
+0x42b9
+// 13.357196
+0x4aae
+// 7.617099
+0x479e
+// 12.543129
+0x4a46
+// 3.206430
+0x426a
+// 24.728589
+0x4e2f
+// 2.883364
+0x41c4
+// 4.739018
+0x44bd
+// 11.599710
+0x49cd
+// 9.538527
+0x48c5
+// 16.661500
+0x4c2a
+// 2.736285
+0x4179
+// 6.631133
+0x46a2
+// 11.402722
+0x49b4
+// 1.858302
+0x3f6f
+// 11.107479
+0x498e
+// 2.144436
+0x404a
+// 3.471115
+0x42f1
+// 7.195419
+0x4732
+// 2.250048
+0x4080
+// 5.355021
+0x455b
+// 2.175851
+0x405a
+// 6.975780
+0x46fa
+// 10.830583
+0x496a
+// 4.039975
+0x440a
+// 19.297319
+0x4cd3
+// 14.568924
+0x4b49
+// 1.760573
+0x3f0b
+// 4.344142
+0x4458
+// 1.911989
+0x3fa6
+// 125.811431
+0x57dd
+// 6.147110
+0x4626
+// 3.323063
+0x42a5
+// 141.465322
+0x586c
+// 2.428645
+0x40db
+// 5.057885
+0x450f
+// 17.465511
+0x4c5e
+// 5.487886
+0x457d
+// 3.693320
+0x4363
+// 5.722713
+0x45b9
+// 2.815819
+0x41a2
+// 17.741187
+0x4c6f
+// 156.719386
+0x58e6
+// 9.622230
+0x48d0
+// 3.582729
+0x432a
+// 7.122762
+0x471f
+// 3.801118
+0x439a
+// 21.059681
+0x4d44
+// 7.002552
+0x4701
+// 1.681254
+0x3eba
+// 26.237564
+0x4e8f
+// 2.196333
+0x4065
+// 3.057311
+0x421d
+// 43.974325
+0x517f
+// 4.871455
+0x44df
+// 58.682025
+0x5356
+// 1.935719
+0x3fbe
+// 50.178529
+0x5246
+// 14.081570
+0x4b0a
+// 2.276558
+0x408e
+// 15.295183
+0x4ba6
+// 3.718388
+0x4370
+// 3.839651
+0x43ae
+// 3.527233
+0x430e
+// 2.428714
+0x40dc
+// 11.062054
+0x4988
+// 5.778279
+0x45c7
+// 2.901877
+0x41ce
+// 4.614082
+0x449d
+// 2.846533
+0x41b1
+// 8.471893
+0x483c
+// 5.528337
+0x4587
+// 4.069745
+0x4412
+// 4.311615
+0x4450
+// 2.410911
+0x40d2
+// 4.794024
+0x44cb
+// 1.952501
+0x3fcf
+// 2.350841
+0x40b4
+// 2.240902
+0x407b
+// 5.954644
+0x45f4
+// 6.121318
+0x461f
+// 6.649823
+0x46a6
+// 16.968851
+0x4c3e
+// 1.000000
+0x3c00
+// 5.024657
+0x4506
+// 5.569085
+0x4592
+// 8.212669
+0x481b
+// 2.487941
+0x40fa
+// 1.966557
+0x3fde
+// 3.370575
+0x42be
+// 29.614104
+0x4f67
+// 3.196824
+0x4265
+// 1.470828
+0x3de2
+// 8.924856
+0x4876
+// 3.005112
+0x4203
+// 3.024847
+0x420d
+// 4.340886
+0x4457
+// 1.894158
+0x3f94
+// 3.562064
+0x4320
+// 3.233189
+0x4277
+// 1.628957
+0x3e84
+// 2.791436
+0x4195
+// 8.235823
+0x481e
+// 8.808764
+0x4868
+// 36.005208
+0x5080
+// 12.766707
+0x4a62
+// 5.964918
+0x45f7
+// 1.671910
+0x3eb0
+// 2.699011
+0x4166
+// 16.411460
+0x4c1a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Log1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Log1_f16.txt
new file mode 100755
index 0000000..d7ded17
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Log1_f16.txt
@@ -0,0 +1,52 @@
+H
+25
+// -2.302585
+0xc09b
+// -1.203973
+0xbcd1
+// -0.693147
+0xb98c
+// 0.000000
+0x0
+// 0.693147
+0x398c
+// -2.516839
+0xc109
+// 0.000000
+0x0
+// -5.908962
+0xc5e9
+// -1.345933
+0xbd62
+// -0.923815
+0xbb64
+// -4.046497
+0xc40c
+// -2.530234
+0xc10f
+// -0.724334
+0xb9cb
+// -1.436949
+0xbdbf
+// -1.327187
+0xbd4f
+// -1.741553
+0xbef7
+// -0.066722
+0xac45
+// -0.616041
+0xb8ee
+// -0.822195
+0xba94
+// -1.579204
+0xbe51
+// -1.333689
+0xbd56
+// -0.860545
+0xbae2
+// -1.080309
+0xbc52
+// -1.977120
+0xbfe9
+// -1.877663
+0xbf83
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/LogInput1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/LogInput1_f16.txt
new file mode 100755
index 0000000..3fde3aa
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/LogInput1_f16.txt
@@ -0,0 +1,52 @@
+H
+25
+// 0.100000
+0x2e66
+// 0.300000
+0x34cd
+// 0.500000
+0x3800
+// 1.000000
+0x3c00
+// 2.000000
+0x4000
+// 0.080714
+0x2d2a
+// 1.000000
+0x3c00
+// 0.002715
+0x198f
+// 0.260297
+0x342a
+// 0.397001
+0x365a
+// 0.017484
+0x247a
+// 0.079640
+0x2d19
+// 0.484647
+0x37c1
+// 0.237652
+0x339b
+// 0.265222
+0x343e
+// 0.175248
+0x319c
+// 0.935456
+0x3b7c
+// 0.540078
+0x3852
+// 0.439466
+0x3708
+// 0.206139
+0x3299
+// 0.263503
+0x3437
+// 0.422932
+0x36c4
+// 0.339491
+0x356f
+// 0.138467
+0x306e
+// 0.152947
+0x30e5
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Samples1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Samples1_f16.txt
new file mode 100755
index 0000000..295c0a4
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Samples1_f16.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.075285
+0x2cd1
+// 0.013370
+0x22d8
+// 0.220545
+0x330f
+// 0.267001
+0x3446
+// 0.409968
+0x368f
+// 0.161784
+0x312d
+// 0.249706
+0x33fe
+// 0.088624
+0x2dac
+// 0.541200
+0x3854
+// 0.180200
+0x31c4
+// 0.650979
+0x3935
+// 0.033328
+0x2844
+// 0.031771
+0x2811
+// 0.057002
+0x2b4c
+// 0.413349
+0x369d
+// 0.229898
+0x335b
+// 0.206562
+0x329c
+// 0.123441
+0x2fe6
+// 0.128610
+0x301e
+// 0.091236
+0x2dd7
+// 0.516631
+0x3822
+// 0.067355
+0x2c50
+// 0.393951
+0x364e
+// 0.429521
+0x36df
+// 0.841992
+0x3abc
+// 0.105719
+0x2ec4
+// 0.153100
+0x30e6
+// 0.035572
+0x288e
+// 0.360258
+0x35c4
+// 0.620837
+0x38f7
+// 0.232809
+0x3373
+// 0.117602
+0x2f87
+// 0.155475
+0x30fa
+// 0.608119
+0x38dd
+// 0.199114
+0x325f
+// 0.021425
+0x257c
+// 0.126204
+0x300a
+// 0.503326
+0x3807
+// 0.081538
+0x2d38
+// 0.195027
+0x323e
+// 0.283564
+0x3489
+// 0.322678
+0x352a
+// 0.088639
+0x2dac
+// 0.175722
+0x31a0
+// 0.038783
+0x28f7
+// 0.032079
+0x281b
+// 0.184972
+0x31eb
+// 0.996148
+0x3bf8
+// 0.404061
+0x3677
+// 0.190127
+0x3216
+// 0.146331
+0x30af
+// 0.465914
+0x3774
+// 0.245390
+0x33da
+// 0.148020
+0x30bd
+// 0.303123
+0x34da
+// 0.311373
+0x34fb
+// 0.006474
+0x1ea1
+// 0.405257
+0x367c
+// 0.074887
+0x2ccb
+// 0.345171
+0x3586
+// 0.089300
+0x2db7
+// 0.477313
+0x37a3
+// 0.168067
+0x3161
+// 0.001991
+0x1814
+// 0.102194
+0x2e8a
+// 0.040519
+0x2930
+// 0.109390
+0x2f00
+// 0.206523
+0x329c
+// 0.433665
+0x36f0
+// 0.391572
+0x3644
+// 0.153143
+0x30e7
+// 0.079262
+0x2d13
+// 0.098417
+0x2e4c
+// 0.210884
+0x32c0
+// 0.326580
+0x353a
+// 0.066347
+0x2c3f
+// 0.051448
+0x2a96
+// 0.003284
+0x1aba
+// 0.270425
+0x3454
+// 0.833140
+0x3aaa
+// 0.083060
+0x2d51
+// 0.159097
+0x3117
+// 0.023843
+0x261b
+// 0.069603
+0x2c74
+// 0.351582
+0x35a0
+// 0.410820
+0x3693
+// 0.053182
+0x2acf
+// 0.278520
+0x3475
+// 0.021779
+0x2593
+// 0.059720
+0x2ba5
+// 0.105113
+0x2eba
+// 0.003746
+0x1bac
+// 0.007042
+0x1f36
+// 0.785028
+0x3a48
+// 0.246007
+0x33df
+// 0.326886
+0x353b
+// 0.326374
+0x3539
+// 0.081496
+0x2d37
+// 0.058682
+0x2b83
+// 0.793882
+0x3a5a
+// 0.354455
+0x35ac
+// 0.145905
+0x30ab
+// 0.134145
+0x304b
+// 0.621248
+0x38f8
+// 0.086260
+0x2d85
+// 0.122030
+0x2fcf
+// 0.338851
+0x356c
+// 0.432520
+0x36ec
+// 0.103489
+0x2ea0
+// 0.660566
+0x3949
+// 0.010646
+0x2173
+// 0.010899
+0x2195
+// 0.340560
+0x3573
+// 0.027039
+0x26ec
+// 0.594168
+0x38c1
+// 0.260699
+0x342c
+// 0.248825
+0x33f6
+// 0.115116
+0x2f5e
+// 0.260917
+0x342d
+// 0.176952
+0x31aa
+// 0.005986
+0x1e21
+// 0.094150
+0x2e07
+// 0.490388
+0x37d9
+// 0.315517
+0x350c
+// 0.008217
+0x2035
+// 0.509586
+0x3814
+// 0.278656
+0x3475
+// 0.152630
+0x30e2
+// 0.439919
+0x370a
+// 0.161132
+0x3128
+// 0.793575
+0x3a59
+// 0.752534
+0x3a05
+// 0.139024
+0x3073
+// 0.197104
+0x324f
+// 0.243939
+0x33ce
+// 0.068302
+0x2c5f
+// 0.118063
+0x2f8e
+// 0.027900
+0x2724
+// 0.038606
+0x28f1
+// 0.120798
+0x2fbb
+// 0.151979
+0x30dd
+// 0.314126
+0x3507
+// 0.316658
+0x3511
+// 0.032271
+0x2821
+// 0.201590
+0x3273
+// 0.035311
+0x2885
+// 0.297552
+0x34c3
+// 0.074866
+0x2ccb
+// 0.131284
+0x3033
+// 0.079725
+0x2d1a
+// 0.311873
+0x34fd
+// 0.040439
+0x292d
+// 0.346817
+0x358d
+// 0.211014
+0x32c1
+// 0.086209
+0x2d84
+// 0.104838
+0x2eb6
+// 0.060019
+0x2baf
+// 0.365459
+0x35d9
+// 0.150804
+0x30d3
+// 0.087698
+0x2d9d
+// 0.538126
+0x384e
+// 0.090029
+0x2dc3
+// 0.466323
+0x3776
+// 0.288092
+0x349c
+// 0.138977
+0x3073
+// 0.444435
+0x371c
+// 0.186741
+0x31fa
+// 0.459590
+0x375a
+// 0.143353
+0x3096
+// 0.092331
+0x2de9
+// 0.247526
+0x33ec
+// 0.051821
+0x2aa2
+// 0.068639
+0x2c65
+// 0.567997
+0x388b
+// 0.230195
+0x335e
+// 0.523016
+0x382f
+// 0.007948
+0x2012
+// 0.162678
+0x3135
+// 0.300927
+0x34d1
+// 0.007069
+0x1f3d
+// 0.411752
+0x3697
+// 0.197711
+0x3254
+// 0.057256
+0x2b54
+// 0.182220
+0x31d5
+// 0.270759
+0x3455
+// 0.174742
+0x3197
+// 0.355136
+0x35af
+// 0.056366
+0x2b37
+// 0.006381
+0x1e89
+// 0.103926
+0x2ea7
+// 0.279117
+0x3477
+// 0.140395
+0x307e
+// 0.263080
+0x3436
+// 0.047484
+0x2a14
+// 0.142805
+0x3092
+// 0.594794
+0x38c2
+// 0.038113
+0x28e1
+// 0.455304
+0x3749
+// 0.327085
+0x353c
+// 0.022741
+0x25d2
+// 0.205277
+0x3292
+// 0.017041
+0x245d
+// 0.516604
+0x3822
+// 0.019929
+0x251a
+// 0.071015
+0x2c8c
+// 0.439260
+0x3707
+// 0.065380
+0x2c2f
+// 0.268934
+0x344e
+// 0.260440
+0x342b
+// 0.283508
+0x3489
+// 0.411741
+0x3696
+// 0.090399
+0x2dc9
+// 0.173062
+0x318a
+// 0.344605
+0x3584
+// 0.216728
+0x32ef
+// 0.351305
+0x359f
+// 0.118037
+0x2f8e
+// 0.180886
+0x31ca
+// 0.245716
+0x33dd
+// 0.231932
+0x336c
+// 0.414781
+0x36a3
+// 0.208593
+0x32ad
+// 0.512164
+0x3819
+// 0.425380
+0x36ce
+// 0.446249
+0x3724
+// 0.167936
+0x3160
+// 0.163364
+0x313a
+// 0.150380
+0x30d0
+// 0.058932
+0x2b8b
+// 1.000000
+0x3c00
+// 0.199019
+0x325e
+// 0.179563
+0x31bf
+// 0.121763
+0x2fcb
+// 0.401939
+0x366e
+// 0.508503
+0x3811
+// 0.296685
+0x34bf
+// 0.033768
+0x2852
+// 0.312811
+0x3501
+// 0.679889
+0x3970
+// 0.112047
+0x2f2c
+// 0.332766
+0x3553
+// 0.330595
+0x354a
+// 0.230368
+0x335f
+// 0.527939
+0x3839
+// 0.280736
+0x347e
+// 0.309292
+0x34f3
+// 0.613890
+0x38e9
+// 0.358239
+0x35bb
+// 0.121421
+0x2fc5
+// 0.113523
+0x2f44
+// 0.027774
+0x271c
+// 0.078329
+0x2d03
+// 0.167647
+0x315d
+// 0.598118
+0x38c9
+// 0.370506
+0x35ee
+// 0.060933
+0x2bcd
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Sin1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Sin1_f16.txt
new file mode 100755
index 0000000..5cf9624
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Sin1_f16.txt
@@ -0,0 +1,48 @@
+H
+23
+// 0.000000
+0x0
+// 0.707107
+0x39a8
+// 1.000000
+0x3c00
+// 0.707107
+0x39a8
+// 0.000000
+0x0
+// -0.707107
+0xb9a8
+// -1.000000
+0xbc00
+// -0.000001
+0x8011
+// -0.707107
+0xb9a8
+// -1.000000
+0xbc00
+// -0.707107
+0xb9a8
+// -0.000000
+0x8000
+// 0.707107
+0x39a8
+// 1.000000
+0x3c00
+// -0.000001
+0x8011
+// -0.000000
+0x8000
+// 0.707107
+0x39a8
+// 1.000000
+0x3c00
+// 0.707107
+0x39a8
+// 0.000000
+0x0
+// -0.707107
+0xb9a8
+// -1.000000
+0xbc00
+// -0.000001
+0x8011
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Sqrt1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Sqrt1_f16.txt
new file mode 100755
index 0000000..6e52506
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/Sqrt1_f16.txt
@@ -0,0 +1,18 @@
+H
+8
+// 0.000000
+0x0
+// 0.000000
+0x0
+// 0.316228
+0x350f
+// 1.000000
+0x3c00
+// 1.414214
+0x3da8
+// 1.732051
+0x3eee
+// 1.870829
+0x3f7c
+// 1.897367
+0x3f97
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/SqrtInput1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/SqrtInput1_f16.txt
new file mode 100755
index 0000000..9226084
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/FastMath/FastMathF16/SqrtInput1_f16.txt
@@ -0,0 +1,18 @@
+H
+8
+// -0.400000
+0xb666
+// 0.000000
+0x0
+// 0.100000
+0x2e66
+// 1.000000
+0x3c00
+// 2.000000
+0x4000
+// 3.000000
+0x4200
+// 3.500000
+0x4300
+// 3.600000
+0x4333
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims22_s16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims22_s16.txt
new file mode 100755
index 0000000..b8c911f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims22_s16.txt
@@ -0,0 +1,24 @@
+H
+11
+// 10
+0x000A
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims23_s16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims23_s16.txt
new file mode 100755
index 0000000..b8c911f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims23_s16.txt
@@ -0,0 +1,24 @@
+H
+11
+// 10
+0x000A
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims24_s16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims24_s16.txt
new file mode 100755
index 0000000..b8c911f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims24_s16.txt
@@ -0,0 +1,24 @@
+H
+11
+// 10
+0x000A
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims25_s16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims25_s16.txt
new file mode 100755
index 0000000..b8c911f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Dims25_s16.txt
@@ -0,0 +1,24 @@
+H
+11
+// 10
+0x000A
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
+// 9
+0x0009
+// 12
+0x000C
+// 3
+0x0003
+// 8
+0x0008
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input22_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input22_f16.txt
new file mode 100755
index 0000000..7313f06
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input22_f16.txt
@@ -0,0 +1,152 @@
+H
+75
+// 0.322836
+0x352a
+// 0.198525
+0x325a
+// 0.478639
+0x37a9
+// 0.026143
+0x26b1
+// 0.098991
+0x2e56
+// 0.143166
+0x3095
+// 0.085541
+0x2d7a
+// 0.068541
+0x2c63
+// 0.211153
+0x32c2
+// 0.181133
+0x31cc
+// 0.185330
+0x31ee
+// 0.089042
+0x2db3
+// 0.147745
+0x30ba
+// 0.095482
+0x2e1c
+// 0.040729
+0x2937
+// 0.148711
+0x30c2
+// 0.132218
+0x303b
+// 0.141558
+0x3088
+// 0.075285
+0x2cd1
+// 0.129230
+0x3023
+// 0.111640
+0x2f25
+// 0.120751
+0x2fba
+// 0.013239
+0x22c7
+// 0.060065
+0x2bb0
+// 0.127400
+0x3014
+// 0.094640
+0x2e0f
+// 0.106302
+0x2ece
+// 0.047992
+0x2a25
+// 0.051468
+0x2a97
+// 0.125120
+0x3001
+// 0.120732
+0x2fba
+// 0.020651
+0x2549
+// 0.144559
+0x30a0
+// 0.511255
+0x3817
+// 0.344187
+0x3582
+// 0.115065
+0x2f5d
+// 0.068302
+0x2c5f
+// 0.205347
+0x3292
+// 0.160452
+0x3122
+// 0.065289
+0x2c2e
+// 0.127455
+0x3014
+// 0.248741
+0x33f6
+// 0.009349
+0x20c9
+// 0.100586
+0x2e70
+// 0.102405
+0x2e8e
+// 0.188184
+0x3206
+// 0.192786
+0x322b
+// 0.160000
+0x311f
+// 0.027773
+0x271c
+// 0.112430
+0x2f32
+// 0.001022
+0x142f
+// 0.114814
+0x2f59
+// 0.056143
+0x2b30
+// 0.122610
+0x2fd9
+// 0.165753
+0x314e
+// 0.135443
+0x3056
+// 0.019103
+0x24e4
+// 0.028083
+0x2730
+// 0.013344
+0x22d5
+// 0.165378
+0x314b
+// 0.075133
+0x2ccf
+// 0.056506
+0x2b3c
+// 0.005057
+0x1d2e
+// 0.157446
+0x310a
+// 0.426391
+0x36d2
+// 0.165223
+0x314a
+// 0.408385
+0x3689
+// 0.017004
+0x245a
+// 0.296335
+0x34be
+// 0.005781
+0x1deb
+// 0.076763
+0x2cea
+// 0.223549
+0x3327
+// 0.055634
+0x2b1f
+// 0.222075
+0x331b
+// 0.102857
+0x2e95
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input23_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input23_f16.txt
new file mode 100755
index 0000000..4914250
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input23_f16.txt
@@ -0,0 +1,152 @@
+H
+75
+// 0.475515
+0x379c
+// 0.270052
+0x3452
+// 0.254433
+0x3412
+// 0.055055
+0x2b0c
+// 0.202411
+0x327a
+// 0.124266
+0x2ff4
+// 0.046322
+0x29ee
+// 0.178920
+0x31ba
+// 0.078939
+0x2d0d
+// 0.111714
+0x2f26
+// 0.202373
+0x327a
+// 0.187127
+0x31fd
+// 0.154401
+0x30f1
+// 0.054258
+0x2af2
+// 0.123123
+0x2fe1
+// 0.099707
+0x2e62
+// 0.011955
+0x221f
+// 0.166787
+0x3156
+// 0.088390
+0x2da8
+// 0.114251
+0x2f50
+// 0.070847
+0x2c89
+// 0.118218
+0x2f91
+// 0.057549
+0x2b5e
+// 0.143263
+0x3096
+// 0.031234
+0x27ff
+// 0.169478
+0x316c
+// 0.045658
+0x29d8
+// 0.170969
+0x3179
+// 0.011664
+0x21f9
+// 0.043150
+0x2986
+// 0.056999
+0x2b4c
+// 0.080973
+0x2d2f
+// 0.301702
+0x34d4
+// 0.375561
+0x3602
+// 0.322737
+0x352a
+// 0.069801
+0x2c78
+// 0.234393
+0x3380
+// 0.188541
+0x3209
+// 0.233770
+0x337b
+// 0.089282
+0x2db7
+// 0.019572
+0x2503
+// 0.075178
+0x2cd0
+// 0.089462
+0x2dba
+// 0.116452
+0x2f74
+// 0.111320
+0x2f20
+// 0.215334
+0x32e4
+// 0.119770
+0x2faa
+// 0.058668
+0x2b82
+// 0.204849
+0x328e
+// 0.009485
+0x20db
+// 0.158639
+0x3114
+// 0.005484
+0x1d9e
+// 0.137894
+0x306a
+// 0.154182
+0x30ef
+// 0.008037
+0x201d
+// 0.040326
+0x2929
+// 0.038281
+0x28e6
+// 0.082787
+0x2d4c
+// 0.046186
+0x29e9
+// 0.118893
+0x2f9c
+// 0.034195
+0x2860
+// 0.090605
+0x2dcc
+// 0.156341
+0x3101
+// 0.092273
+0x2de8
+// 0.578286
+0x38a0
+// 0.049254
+0x2a4e
+// 0.372461
+0x35f6
+// 0.021948
+0x259e
+// 0.059545
+0x2b9f
+// 0.138834
+0x3071
+// 0.220685
+0x3310
+// 0.062460
+0x2bff
+// 0.201480
+0x3273
+// 0.087765
+0x2d9e
+// 0.207282
+0x32a2
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputA24_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputA24_f16.txt
new file mode 100755
index 0000000..bd93a48
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputA24_f16.txt
@@ -0,0 +1,152 @@
+H
+75
+// 0.066000
+0x2c39
+// 0.029316
+0x2781
+// 0.904684
+0x3b3d
+// 0.055167
+0x2b10
+// 0.210490
+0x32bc
+// 0.148163
+0x30be
+// 0.189833
+0x3213
+// 0.038896
+0x28fb
+// 0.138513
+0x306f
+// 0.022802
+0x25d6
+// 0.196137
+0x3247
+// 0.076794
+0x2cea
+// 0.010108
+0x212d
+// 0.220958
+0x3312
+// 0.129726
+0x3027
+// 0.099061
+0x2e57
+// 0.136545
+0x305f
+// 0.232233
+0x336e
+// 0.014392
+0x235e
+// 0.080182
+0x2d22
+// 0.004332
+0x1c70
+// 0.083574
+0x2d59
+// 0.080585
+0x2d28
+// 0.117765
+0x2f89
+// 0.162459
+0x3133
+// 0.019641
+0x2507
+// 0.075399
+0x2cd3
+// 0.144758
+0x30a2
+// 0.064852
+0x2c27
+// 0.130529
+0x302d
+// 0.026411
+0x26c3
+// 0.089694
+0x2dbe
+// 0.345746
+0x3588
+// 0.286879
+0x3497
+// 0.367375
+0x35e1
+// 0.099391
+0x2e5c
+// 0.081898
+0x2d3e
+// 0.075065
+0x2cce
+// 0.179149
+0x31bc
+// 0.135742
+0x3058
+// 0.071606
+0x2c95
+// 0.174743
+0x3197
+// 0.182405
+0x31d6
+// 0.067165
+0x2c4c
+// 0.071465
+0x2c93
+// 0.128327
+0x301b
+// 0.219746
+0x3308
+// 0.104638
+0x2eb2
+// 0.145188
+0x30a5
+// 0.010493
+0x215f
+// 0.166402
+0x3153
+// 0.086577
+0x2d8a
+// 0.134145
+0x304b
+// 0.007296
+0x1f79
+// 0.070782
+0x2c88
+// 0.104541
+0x2eb1
+// 0.119510
+0x2fa6
+// 0.109169
+0x2efd
+// 0.070861
+0x2c89
+// 0.052457
+0x2ab7
+// 0.013363
+0x22d7
+// 0.067024
+0x2c4a
+// 0.142142
+0x308c
+// 0.108710
+0x2ef5
+// 0.182145
+0x31d4
+// 0.359778
+0x35c2
+// 0.458077
+0x3754
+// 0.166456
+0x3154
+// 0.192489
+0x3229
+// 0.161820
+0x312e
+// 0.183137
+0x31dc
+// 0.038873
+0x28fa
+// 0.103665
+0x2ea2
+// 0.103497
+0x2ea0
+// 0.050063
+0x2a68
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputA25_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputA25_f16.txt
new file mode 100755
index 0000000..e78320d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputA25_f16.txt
@@ -0,0 +1,152 @@
+H
+75
+// -0.959212
+0xbbac
+// -0.670324
+0xb95d
+// -2.232477
+0xc077
+// -1.387737
+0xbd8d
+// -4.329000
+0xc454
+// -1.806354
+0xbf3a
+// -2.749885
+0xc180
+// -1.850150
+0xbf67
+// -1.610971
+0xbe72
+// -3.493034
+0xc2fc
+// -2.050449
+0xc01a
+// -2.407527
+0xc0d1
+// -2.544094
+0xc117
+// -2.448739
+0xc0e6
+// -1.799126
+0xbf32
+// -1.731562
+0xbeed
+// -1.709799
+0xbed7
+// -4.335314
+0xc456
+// -2.254958
+0xc083
+// -2.192057
+0xc062
+// -1.938937
+0xbfc1
+// -2.430444
+0xc0dc
+// -4.417635
+0xc46b
+// -2.415578
+0xc0d5
+// -2.538128
+0xc114
+// -3.305833
+0xc29d
+// -3.357861
+0xc2b7
+// -2.316667
+0xc0a2
+// -2.270840
+0xc08b
+// -2.387285
+0xc0c6
+// -2.154695
+0xc04f
+// -2.140212
+0xc048
+// -1.657703
+0xbea1
+// -0.645126
+0xb929
+// -1.248875
+0xbcff
+// -1.603551
+0xbe6a
+// -2.633577
+0xc144
+// -1.835578
+0xbf58
+// -2.357818
+0xc0b7
+// -3.324743
+0xc2a6
+// -1.648598
+0xbe98
+// -2.037842
+0xc013
+// -2.109987
+0xc038
+// -1.195792
+0xbcc8
+// -2.659356
+0xc152
+// -1.980175
+0xbfec
+// -2.161604
+0xc053
+// -1.794321
+0xbf2d
+// -2.246154
+0xc07e
+// -2.408418
+0xc0d1
+// -3.953591
+0xc3e8
+// -6.752190
+0xc6c1
+// -2.878867
+0xc1c2
+// -2.157113
+0xc050
+// -2.660457
+0xc152
+// -2.162948
+0xc053
+// -3.034069
+0xc211
+// -2.095012
+0xc031
+// -4.019581
+0xc405
+// -1.844349
+0xbf61
+// -2.773310
+0xc18c
+// -2.257637
+0xc084
+// -4.031211
+0xc408
+// -2.102431
+0xc034
+// -1.073346
+0xbc4b
+// -0.878225
+0xbb07
+// -1.408060
+0xbda2
+// -2.406489
+0xc0d0
+// -1.872983
+0xbf7e
+// -2.021809
+0xc00b
+// -1.781448
+0xbf20
+// -1.769868
+0xbf14
+// -1.823862
+0xbf4c
+// -2.119634
+0xc03d
+// -4.550491
+0xc48d
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputB24_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputB24_f16.txt
new file mode 100755
index 0000000..2eb02f8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputB24_f16.txt
@@ -0,0 +1,152 @@
+H
+75
+// 0.320653
+0x3521
+// 0.199694
+0x3264
+// 0.479652
+0x37ad
+// 0.102236
+0x2e8b
+// 0.105106
+0x2eba
+// 0.201341
+0x3271
+// 0.132813
+0x3040
+// 0.088571
+0x2dab
+// 0.058607
+0x2b80
+// 0.249883
+0x33ff
+// 0.061443
+0x2bdd
+// 0.071180
+0x2c8e
+// 0.107576
+0x2ee3
+// 0.057274
+0x2b55
+// 0.105606
+0x2ec2
+// 0.152027
+0x30dd
+// 0.103325
+0x2e9d
+// 0.049270
+0x2a4e
+// 0.220453
+0x330e
+// 0.133290
+0x3044
+// 0.105547
+0x2ec1
+// 0.084060
+0x2d61
+// 0.137416
+0x3066
+// 0.030274
+0x27c0
+// 0.048675
+0x2a3b
+// 0.127130
+0x3011
+// 0.046091
+0x29e6
+// 0.066165
+0x2c3c
+// 0.067586
+0x2c53
+// 0.097630
+0x2e40
+// 0.072033
+0x2c9c
+// 0.117393
+0x2f83
+// 0.453053
+0x3740
+// 0.081985
+0x2d3f
+// 0.464962
+0x3770
+// 0.052770
+0x2ac1
+// 0.131843
+0x3038
+// 0.057721
+0x2b63
+// 0.152657
+0x30e3
+// 0.210732
+0x32be
+// 0.038870
+0x28fa
+// 0.265057
+0x343e
+// 0.090349
+0x2dc8
+// 0.153684
+0x30eb
+// 0.057884
+0x2b69
+// 0.057020
+0x2b4c
+// 0.071140
+0x2c8e
+// 0.261764
+0x3430
+// 0.015038
+0x23b3
+// 0.081591
+0x2d39
+// 0.262766
+0x3434
+// 0.039113
+0x2902
+// 0.156950
+0x3106
+// 0.095202
+0x2e18
+// 0.025249
+0x2677
+// 0.037328
+0x28c7
+// 0.083821
+0x2d5d
+// 0.104429
+0x2eaf
+// 0.087592
+0x2d9b
+// 0.114188
+0x2f4f
+// 0.056203
+0x2b32
+// 0.004401
+0x1c82
+// 0.095480
+0x2e1c
+// 0.139157
+0x3074
+// 0.294734
+0x34b7
+// 0.268507
+0x344c
+// 0.436759
+0x36fd
+// 0.009448
+0x20d6
+// 0.081745
+0x2d3b
+// 0.168340
+0x3163
+// 0.148550
+0x30c1
+// 0.136539
+0x305f
+// 0.036541
+0x28ad
+// 0.253112
+0x340d
+// 0.165724
+0x314e
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputB25_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputB25_f16.txt
new file mode 100755
index 0000000..2ff588a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/InputB25_f16.txt
@@ -0,0 +1,152 @@
+H
+75
+// -0.550708
+0xb868
+// -1.086194
+0xbc58
+// -2.430874
+0xc0dd
+// -2.189178
+0xc061
+// -1.915799
+0xbfaa
+// -1.850925
+0xbf67
+// -1.791474
+0xbf2a
+// -1.795864
+0xbf2f
+// -1.805296
+0xbf39
+// -3.914507
+0xc3d4
+// -2.609097
+0xc138
+// -2.791088
+0xc195
+// -1.657411
+0xbea1
+// -3.818442
+0xc3a3
+// -2.085128
+0xc02c
+// -1.898179
+0xbf98
+// -5.553102
+0xc58e
+// -1.827261
+0xbf4f
+// -2.342852
+0xc0b0
+// -1.613762
+0xbe74
+// -2.609171
+0xc138
+// -1.941609
+0xbfc4
+// -3.429489
+0xc2dc
+// -3.528022
+0xc30e
+// -2.070397
+0xc024
+// -1.926029
+0xbfb4
+// -3.317714
+0xc2a3
+// -2.238273
+0xc07a
+// -1.737780
+0xbef3
+// -3.121640
+0xc23e
+// -4.527533
+0xc487
+// -2.446193
+0xc0e4
+// -2.637576
+0xc146
+// -1.176571
+0xbcb5
+// -0.474604
+0xb798
+// -3.033151
+0xc211
+// -1.835852
+0xbf58
+// -1.691092
+0xbec4
+// -1.805705
+0xbf39
+// -2.648123
+0xc14c
+// -2.160886
+0xc052
+// -2.461351
+0xc0ec
+// -1.718385
+0xbee0
+// -3.930567
+0xc3dc
+// -2.625716
+0xc140
+// -1.569582
+0xbe47
+// -1.492665
+0xbdf8
+// -2.078453
+0xc028
+// -2.391468
+0xc0c8
+// -3.195368
+0xc264
+// -2.475005
+0xc0f3
+// -1.956577
+0xbfd4
+// -2.960791
+0xc1ec
+// -2.717495
+0xc16f
+// -2.590550
+0xc12e
+// -2.850811
+0xc1b4
+// -2.901796
+0xc1ce
+// -2.290420
+0xc095
+// -2.218488
+0xc070
+// -2.282453
+0xc091
+// -2.319957
+0xc0a4
+// -2.432125
+0xc0dd
+// -2.239578
+0xc07b
+// -2.294428
+0xc097
+// -0.590827
+0xb8ba
+// -1.218422
+0xbce0
+// -1.881018
+0xbf86
+// -1.877314
+0xbf82
+// -2.526120
+0xc10d
+// -1.792010
+0xbf2b
+// -1.845023
+0xbf61
+// -1.752139
+0xbf02
+// -2.295159
+0xc097
+// -3.509155
+0xc305
+// -1.928857
+0xbfb7
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefEntropy22_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefEntropy22_f16.txt
new file mode 100755
index 0000000..c6fbbd8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefEntropy22_f16.txt
@@ -0,0 +1,22 @@
+H
+10
+// 1.038650
+0x3c28
+// 1.946771
+0x3fc9
+// 2.139348
+0x4047
+// 2.343983
+0x40b0
+// 0.989680
+0x3beb
+// 1.881268
+0x3f86
+// 1.990067
+0x3ff6
+// 2.193480
+0x4063
+// 1.026660
+0x3c1b
+// 1.720281
+0x3ee2
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefKL24_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefKL24_f16.txt
new file mode 100755
index 0000000..7d2c584
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefKL24_f16.txt
@@ -0,0 +1,22 @@
+H
+10
+// 0.413470
+0x369e
+// 0.394708
+0x3651
+// 0.582607
+0x38a9
+// 0.396809
+0x3659
+// 0.179323
+0x31bd
+// 0.111712
+0x2f26
+// 0.515907
+0x3821
+// 0.325282
+0x3534
+// 0.039444
+0x290c
+// 0.581119
+0x38a6
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefLogSumExp23_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefLogSumExp23_f16.txt
new file mode 100755
index 0000000..bcc850d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefLogSumExp23_f16.txt
@@ -0,0 +1,22 @@
+H
+10
+// 1.437131
+0x3dc0
+// 2.206211
+0x406a
+// 2.309694
+0x409f
+// 2.569599
+0x4124
+// 1.432431
+0x3dbb
+// 2.207405
+0x406a
+// 2.310898
+0x409f
+// 2.569412
+0x4124
+// 1.455066
+0x3dd2
+// 2.207080
+0x406a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefLogSumExpDot25_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefLogSumExpDot25_f16.txt
new file mode 100755
index 0000000..79a361e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RefLogSumExpDot25_f16.txt
@@ -0,0 +1,22 @@
+H
+10
+// -0.908800
+0xbb45
+// -1.999736
+0xc000
+// -2.257576
+0xc084
+// -2.442263
+0xc0e2
+// -1.038944
+0xbc28
+// -2.090152
+0xc02e
+// -2.287087
+0xc093
+// -2.463247
+0xc0ed
+// -1.051243
+0xbc34
+// -2.074013
+0xc026
diff --git a/CMSIS/DSP/Testing/Source/Tests/FastMathF16.cpp b/CMSIS/DSP/Testing/Source/Tests/FastMathF16.cpp
new file mode 100755
index 0000000..ba91fc0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/Tests/FastMathF16.cpp
@@ -0,0 +1,243 @@
+#include "FastMathF16.h"
+#include <stdio.h>
+#include "Error.h"
+#include "arm_vec_math_f16.h"
+#include "Test.h"
+
+
+#define SNR_THRESHOLD 60
+#define SNR_LOG_THRESHOLD 40
+
+/* 
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define REL_ERROR (1.0e-3)
+#define ABS_ERROR (1.0e-3)
+
+#define REL_LOG_ERROR (3.0e-2)
+#define ABS_LOG_ERROR (3.0e-2)
+
+#if 0
+    void FastMathF16::test_cos_f16()
+    {
+        const float16_t *inp  = input.ptr();
+        float16_t *outp  = output.ptr();
+        unsigned long i;
+
+        for(i=0; i < ref.nbSamples(); i++)
+        {
+          outp[i]=arm_cos_f16(inp[i]);
+        }
+
+        ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+        ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR);
+
+    }
+
+    void FastMathF16::test_sin_f16()
+    {
+        const float16_t *inp  = input.ptr();
+        float16_t *outp  = output.ptr();
+        unsigned long i;
+
+        for(i=0; i < ref.nbSamples(); i++)
+        {
+          outp[i]=arm_sin_f16(inp[i]);
+        }
+
+        ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+        ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR);
+
+    }
+
+#endif 
+
+    void FastMathF16::test_sqrt_f16()
+    {
+        const float16_t *inp  = input.ptr();
+        float16_t *outp  = output.ptr();
+        arm_status status;
+        unsigned long i;
+
+        for(i=0; i < ref.nbSamples(); i++)
+        {
+           status=arm_sqrt_f16(inp[i],&outp[i]);
+           ASSERT_TRUE((status == ARM_MATH_SUCCESS) || ((inp[i] < 0.0f) && (status == ARM_MATH_ARGUMENT_ERROR)));
+        }
+
+
+        ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+        ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR);
+
+
+    }
+
+    void FastMathF16::test_vlog_f16()
+    {
+        const float16_t *inp  = input.ptr();
+        float16_t *outp  = output.ptr();
+
+        arm_vlog_f16(inp,outp,ref.nbSamples());
+    
+        ASSERT_SNR(ref,output,(float16_t)SNR_LOG_THRESHOLD);
+        ASSERT_CLOSE_ERROR(ref,output,ABS_LOG_ERROR,REL_LOG_ERROR);
+        ASSERT_EMPTY_TAIL(output);
+
+    }
+
+    void FastMathF16::test_vexp_f16()
+    {
+        const float16_t *inp  = input.ptr();
+        float16_t *outp  = output.ptr();
+
+        arm_vexp_f16(inp,outp,ref.nbSamples());
+    
+        ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR);
+        ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+        ASSERT_EMPTY_TAIL(output);
+
+    }
+
+    void FastMathF16::test_inverse_f16()
+    {
+        const float16_t *inp  = input.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_vinverse_f16(inp,outp,ref.nbSamples());
+
+        ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR,REL_ERROR);
+        ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+        ASSERT_EMPTY_TAIL(output);
+
+    }
+
+  
+    void FastMathF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
+    {
+        (void)paramsArgs;
+        switch(id)
+        {
+#if 0
+            case FastMathF16::TEST_COS_F16_1:
+            {
+               input.reload(FastMathF16::ANGLES1_F16_ID,mgr);
+               ref.reload(FastMathF16::COS1_F16_ID,mgr);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_SIN_F16_2:
+            {
+               input.reload(FastMathF16::ANGLES1_F16_ID,mgr);
+               ref.reload(FastMathF16::SIN1_F16_ID,mgr);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+#endif 
+          
+            case FastMathF16::TEST_SQRT_F16_3:
+            {
+               input.reload(FastMathF16::SQRTINPUT1_F16_ID,mgr);
+               ref.reload(FastMathF16::SQRT1_F16_ID,mgr);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VLOG_F16_4:
+            {
+               input.reload(FastMathF16::LOGINPUT1_F16_ID,mgr);
+               ref.reload(FastMathF16::LOG1_F16_ID,mgr);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VLOG_F16_5:
+            {
+               input.reload(FastMathF16::LOGINPUT1_F16_ID,mgr,7);
+               ref.reload(FastMathF16::LOG1_F16_ID,mgr,7);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VLOG_F16_6:
+            {
+               input.reload(FastMathF16::LOGINPUT1_F16_ID,mgr,16);
+               ref.reload(FastMathF16::LOG1_F16_ID,mgr,16);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VLOG_F16_7:
+            {
+               input.reload(FastMathF16::LOGINPUT1_F16_ID,mgr,23);
+               ref.reload(FastMathF16::LOG1_F16_ID,mgr,23);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VEXP_F16_8:
+            {
+              
+              input.reload(FastMathF16::EXPINPUT1_F16_ID,mgr);
+              ref.reload(FastMathF16::EXP1_F16_ID,mgr);
+              output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VEXP_F16_9:
+            {
+               input.reload(FastMathF16::EXPINPUT1_F16_ID,mgr,7);
+               ref.reload(FastMathF16::EXP1_F16_ID,mgr,7);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VEXP_F16_10:
+            {
+               input.reload(FastMathF16::EXPINPUT1_F16_ID,mgr,16);
+               ref.reload(FastMathF16::EXP1_F16_ID,mgr,16);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_VEXP_F16_11:
+            {
+               input.reload(FastMathF16::EXPINPUT1_F16_ID,mgr,23);
+               ref.reload(FastMathF16::EXP1_F16_ID,mgr,23);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+
+            case FastMathF16::TEST_INVERSE_F16_12:
+            {
+               input.reload(FastMathF16::INPUT1_F16_ID,mgr);
+               ref.reload(FastMathF16::INVERSE1_F16_ID,mgr);
+               output.create(ref.nbSamples(),FastMathF16::OUT_F16_ID,mgr);
+
+            }
+            break;
+        }
+        
+    }
+
+    void FastMathF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+    {
+      (void)id;
+      output.dump(mgr);
+      
+    }
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp
index 909651d..1887a86 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp
@@ -4,14 +4,18 @@
 #include "Test.h"
 
 
-#define SNR_THRESHOLD 50
+#define SNR_THRESHOLD 48
+#define SNR_KULLBACK_THRESHOLD 40
 /* 
 
 Reference patterns are generated with
 a double precision computation.
 
 */
-#define REL_ERROR (3.0e-3)
+#define REL_ERROR (6.0e-3)
+
+#define REL_KULLBACK_ERROR (5.0e-3)
+#define ABS_KULLBACK_ERROR (5.0e-3)
 
     void StatsTestsF16::test_max_f16()
     {
@@ -39,7 +43,7 @@
 
     }
 
-#if 0
+
     void StatsTestsF16::test_max_no_idx_f16()
     {
         const float16_t *inp  = inputA.ptr();
@@ -59,7 +63,7 @@
         ASSERT_EQ(result,refp[this->refOffset]);
 
     }
-#endif 
+
 
     void StatsTestsF16::test_min_f16()
     {
@@ -241,7 +245,7 @@
 
     }
 
-#if 0
+
     void StatsTestsF16::test_entropy_f16()
     {
       const float16_t *inp  = inputA.ptr();
@@ -298,9 +302,9 @@
          inpB += dimsp[i+1];
       }
 
-      ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+      ASSERT_SNR(ref,output,(float16_t)SNR_KULLBACK_THRESHOLD);
 
-      ASSERT_REL_ERROR(ref,output,REL_ERROR);
+      ASSERT_CLOSE_ERROR(ref,output,ABS_KULLBACK_ERROR,REL_KULLBACK_ERROR);
     } 
 
     void StatsTestsF16::test_logsumexp_dot_prod_f16()
@@ -325,7 +329,7 @@
       ASSERT_REL_ERROR(ref,output,REL_ERROR);
     } 
 
-  #endif
+
   
     void StatsTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
     {
@@ -595,7 +599,7 @@
                refOffset = 2;
             }
             break;
-#if 0
+
             case StatsTestsF16::TEST_ENTROPY_F16_22:
             {
                inputA.reload(StatsTestsF16::INPUT22_F16_ID,mgr);
@@ -651,7 +655,7 @@
 
             case StatsTestsF16::TEST_MAX_NO_IDX_F16_26:
             {
-               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,3);
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
               
                ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
                
@@ -684,7 +688,7 @@
                refOffset = 2;
             }
             break;
-#endif
+
             case TEST_MEAN_F16_29:
                inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,100);
               
diff --git a/CMSIS/DSP/Testing/desc_f16.txt b/CMSIS/DSP/Testing/desc_f16.txt
index b5f2750..21635bf 100755
--- a/CMSIS/DSP/Testing/desc_f16.txt
+++ b/CMSIS/DSP/Testing/desc_f16.txt
@@ -25,23 +25,23 @@
               Pattern STDVALS_F16_ID : StdVals6_f16.txt
               Pattern VARVALS_F16_ID : VarVals7_f16.txt
 
-              //Pattern INPUT22_F16_ID : Input22_f16.txt 
-              //Pattern DIM22_S16_ID : Dims22_s16.txt 
-              //Pattern REF22_ENTROPY_F16_ID : RefEntropy22_f16.txt
-              //
-              //Pattern INPUT23_F16_ID : Input23_f16.txt 
-              //Pattern DIM23_S16_ID : Dims23_s16.txt 
-              //Pattern REF23_LOGSUMEXP_F16_ID : RefLogSumExp23_f16.txt
-              //
-              //Pattern INPUTA24_F16_ID : InputA24_f16.txt 
-              //Pattern INPUTB24_F16_ID : InputB24_f16.txt
-              //Pattern DIM24_S16_ID : Dims24_s16.txt 
-              //Pattern REF24_KL_F16_ID : RefKL24_f16.txt
-              //
-              //Pattern INPUTA25_F16_ID : InputA25_f16.txt 
-              //Pattern INPUTB25_F16_ID : InputB25_f16.txt
-              //Pattern DIM25_S16_ID : Dims25_s16.txt 
-              //Pattern REF25_LOGSUMEXP_DOT_F16_ID : RefLogSumExpDot25_f16.txt
+              Pattern INPUT22_F16_ID : Input22_f16.txt 
+              Pattern DIM22_S16_ID : Dims22_s16.txt 
+              Pattern REF22_ENTROPY_F16_ID : RefEntropy22_f16.txt
+              
+              Pattern INPUT23_F16_ID : Input23_f16.txt 
+              Pattern DIM23_S16_ID : Dims23_s16.txt 
+              Pattern REF23_LOGSUMEXP_F16_ID : RefLogSumExp23_f16.txt
+              
+              Pattern INPUTA24_F16_ID : InputA24_f16.txt 
+              Pattern INPUTB24_F16_ID : InputB24_f16.txt
+              Pattern DIM24_S16_ID : Dims24_s16.txt 
+              Pattern REF24_KL_F16_ID : RefKL24_f16.txt
+              
+              Pattern INPUTA25_F16_ID : InputA25_f16.txt 
+              Pattern INPUTB25_F16_ID : InputB25_f16.txt
+              Pattern DIM25_S16_ID : Dims25_s16.txt 
+              Pattern REF25_LOGSUMEXP_DOT_F16_ID : RefLogSumExpDot25_f16.txt
 
               Output  OUT_F16_ID : Output
               Output  OUT_S16_ID : Index
@@ -76,14 +76,14 @@
                 Test nb=8n   arm_var_f16:test_var_f16
                 Test nb=8n+1 arm_var_f16:test_var_f16
 
-                disabled{arm_entropy_f16:test_entropy_f16}
-                disabled{arm_logsumexp_f16:test_logsumexp_f16}
-                disabled{arm_kullback_leibler_f16:test_kullback_leibler_f16}
-                disabled{arm_logsumexp_dot_prod_f16:test_logsumexp_dot_prod_f16}
+                arm_entropy_f16:test_entropy_f16
+                arm_logsumexp_f16:test_logsumexp_f16
+                arm_kullback_leibler_f16:test_kullback_leibler_f16
+                arm_logsumexp_dot_prod_f16:test_logsumexp_dot_prod_f16
 
-                disabled{Test nb=7    arm_max_no_idx_f16:test_max_no_idx_f16}
-                disabled{Test nb=8n   arm_max_no_idx_f16:test_max_no_idx_f16}
-                disabled{Test nb=8n+1 arm_max_no_idx_f16:test_max_no_idx_f16}
+                Test nb=7    arm_max_no_idx_f16:test_max_no_idx_f16
+                Test nb=8n   arm_max_no_idx_f16:test_max_no_idx_f16
+                Test nb=8n+1 arm_max_no_idx_f16:test_max_no_idx_f16
 
                 Test long  arm_mean_f16:test_mean_f16
                 Test long  arm_rms_f16:test_rms_f16
@@ -342,6 +342,46 @@
 
         }
 
+        group Fast Maths Tests {
+          class = FastMath
+          folder = FastMath 
+
+          suite Fast Maths F16 {
+              class = FastMathF16
+              folder = FastMathF16
+
+              Pattern ANGLES1_F16_ID : Angles1_f16.txt
+              Pattern SQRTINPUT1_F16_ID : SqrtInput1_f16.txt
+              Pattern LOGINPUT1_F16_ID : LogInput1_f16.txt
+              Pattern EXPINPUT1_F16_ID : ExpInput1_f16.txt
+              Pattern INPUT1_F16_ID : Samples1_f16.txt
+
+              Pattern COS1_F16_ID : Cos1_f16.txt 
+              Pattern SIN1_F16_ID : Sin1_f16.txt 
+              Pattern SQRT1_F16_ID : Sqrt1_f16.txt 
+              Pattern LOG1_F16_ID : Log1_f16.txt 
+              Pattern EXP1_F16_ID : Exp1_f16.txt 
+              Pattern INVERSE1_F16_ID : Inverse1_f16.txt
+
+              Output  OUT_F16_ID : Output
+
+              Functions {
+                disabled{test_cos_f16:test_cos_f16}
+                disabled{test_sin_f16:test_sin_f16}
+                test_sqrt_f16:test_sqrt_f16
+                test_vlog_f16:test_vlog_f16
+                test_vlog_f16 nb=3:test_vlog_f16
+                test_vlog_f16 nb=4n:test_vlog_f16
+                test_vlog_f16 nb=4n+1:test_vlog_f16
+                test_vexp_f16:test_vexp_f16
+                test_vexp_f16 nb=3:test_vexp_f16
+                test_vexp_f16 nb=4n:test_vexp_f16
+                test_vexp_f16 nb=4n+1:test_vexp_f16
+                test_inverse_f16:test_inverse_f16
+              }
+          }
+        }
+
         group Filtering Tests {
            class = FilteringTests
            folder = Filtering