CMSIS-DSP: Improved tests
diff --git a/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp b/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
index 58759c1..53de1c8 100755
--- a/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
@@ -1,9 +1,7 @@
 #include "TransformF32.h"
 #include "Error.h"
 #include "arm_math.h"
-#include "arm_const_structs.h"
 
-   
     void TransformF32::test_cfft_f32()
     { 
        arm_cfft_f32(&(this->cfftInstance), this->pDst, this->ifft,this->bitRev);
diff --git a/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ15.cpp b/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ15.cpp
index 6955bc4..f52eb76 100755
--- a/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ15.cpp
@@ -1,98 +1,6 @@
 #include "TransformQ15.h"
 #include "Error.h"
-#include "arm_const_structs.h"
 
-#define CFFT_INIT(typ, suffix, S, fftLen)                                       \
-                                                                                \
-{                                                                               \
-                                                                                \
-        /*  Initialise the default arm status */                                \
-        arm_status status = ARM_MATH_SUCCESS;                                   \
-                                                                                \
-        /*  Initialise the FFT length */                                        \
-        S->fftLen = fftLen;                                                     \
-                                                                                \
-        /*  Initialise the Twiddle coefficient pointer */                       \
-        S->pTwiddle = (typ *)twiddleCoef_4096_##suffix;                         \
-                                                                                \
-                                                                                \
-        /*  Initializations of Instance structure depending on the FFT length */\
-        switch (S->fftLen) {                                                    \
-                                                          \
-                                                                                \
-            /*  Initializations of structure parameters for 2048 point FFT */   \
-        case 2048U:                                                             \
-            /*  Initialise the bit reversal table modifier */                   \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH;      \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048;       \
-            S->pTwiddle = (typ *)twiddleCoef_2048_##suffix;                     \
-            break;                                                              \
-                                                                                \
-            /*  Initializations of structure parameters for 1024 point FFT */   \
-        case 1024U:                                                             \
-            /*  Initialise the bit reversal table modifier */                   \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH;      \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024;       \
-            S->pTwiddle = (typ *)twiddleCoef_1024_##suffix;                     \
-            break;                                                              \
-                                                                                \
-            /*  Initializations of structure parameters for 512 point FFT */    \
-        case 512U:                                                              \
-            /*  Initialise the bit reversal table modifier */                   \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH;       \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512;        \
-            S->pTwiddle = (typ *)twiddleCoef_512_##suffix;                      \
-            break;                                                              \
-                                                                                \
-        case 256U:                                                              \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH;       \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256;        \
-            S->pTwiddle = (typ *)twiddleCoef_256_##suffix;                      \
-                                                                                \
-            break;                                                              \
-                                                                                \
-        case 128U:                                                              \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH;       \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128;        \
-            S->pTwiddle = (typ *)twiddleCoef_128_##suffix;                      \
-                                                                                \
-            break;                                                              \
-                                                                                \
-        case 64U:                                                               \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH;        \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64;         \
-            S->pTwiddle = (typ *)twiddleCoef_64_##suffix;                       \
-            break;                                                              \
-                                                                                \
-        case 32U:                                                               \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH;        \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32;         \
-            S->pTwiddle = (typ *)twiddleCoef_32_##suffix;                       \
-            break;                                                              \
-                                                                                \
-        case 16U:                                                               \
-            /*  Initializations of structure parameters for 16 point FFT */     \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH;        \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16;         \
-            S->pTwiddle = (typ *)twiddleCoef_16_##suffix;                       \
-            break;                                                              \
-                                                                                \
-                                                                                \
-        default:                                                                \
-            /*  Reporting argument error if fftSize is not valid value */       \
-            status = ARM_MATH_ARGUMENT_ERROR;                                   \
-            break;                                                              \
-        }                                                                       \
-                                                                                \
-                                                                                \
-        return (status);                                                        \
-                                                                                \
-}
-
-arm_status arm_cfft_init_q15(arm_cfft_instance_q15 *S, uint16_t fftLen)
-{
-    CFFT_INIT(q15_t, q15, S, fftLen);
-}
 
     void TransformQ15::test_cfft_q15()
     { 
diff --git a/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ31.cpp b/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ31.cpp
index 34a5e0e..3e81c80 100755
--- a/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Benchmarks/TransformQ31.cpp
@@ -1,97 +1,5 @@
 #include "TransformQ31.h"
 #include "Error.h"
-#include "arm_const_structs.h"
-
-#define CFFT_INIT(typ, suffix, S, fftLen)                                       \
-                                                                                \
-{                                                                               \
-                                                                                \
-        /*  Initialise the default arm status */                                \
-        arm_status status = ARM_MATH_SUCCESS;                                   \
-                                                                                \
-        /*  Initialise the FFT length */                                        \
-        S->fftLen = fftLen;                                                     \
-                                                                                \
-        /*  Initialise the Twiddle coefficient pointer */                       \
-        S->pTwiddle = (typ *)twiddleCoef_4096_##suffix;                         \
-                                                                                \
-                                                                                \
-        /*  Initializations of Instance structure depending on the FFT length */\
-        switch (S->fftLen) {                                                    \
-                                                          \
-            /*  Initializations of structure parameters for 2048 point FFT */   \
-        case 2048U:                                                             \
-            /*  Initialise the bit reversal table modifier */                   \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH;      \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048;       \
-            S->pTwiddle = (typ *)twiddleCoef_2048_##suffix;                     \
-            break;                                                              \
-                                                                                \
-            /*  Initializations of structure parameters for 1024 point FFT */   \
-        case 1024U:                                                             \
-            /*  Initialise the bit reversal table modifier */                   \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH;      \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024;       \
-            S->pTwiddle = (typ *)twiddleCoef_1024_##suffix;                     \
-            break;                                                              \
-                                                                                \
-            /*  Initializations of structure parameters for 512 point FFT */    \
-        case 512U:                                                              \
-            /*  Initialise the bit reversal table modifier */                   \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH;       \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512;        \
-            S->pTwiddle = (typ *)twiddleCoef_512_##suffix;                      \
-            break;                                                              \
-                                                                                \
-        case 256U:                                                              \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH;       \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256;        \
-            S->pTwiddle = (typ *)twiddleCoef_256_##suffix;                      \
-                                                                                \
-            break;                                                              \
-                                                                                \
-        case 128U:                                                              \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH;       \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128;        \
-            S->pTwiddle = (typ *)twiddleCoef_128_##suffix;                      \
-                                                                                \
-            break;                                                              \
-                                                                                \
-        case 64U:                                                               \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH;        \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64;         \
-            S->pTwiddle = (typ *)twiddleCoef_64_##suffix;                       \
-            break;                                                              \
-                                                                                \
-        case 32U:                                                               \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH;        \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32;         \
-            S->pTwiddle = (typ *)twiddleCoef_32_##suffix;                       \
-            break;                                                              \
-                                                                                \
-        case 16U:                                                               \
-            /*  Initializations of structure parameters for 16 point FFT */     \
-            S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH;        \
-            S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16;         \
-            S->pTwiddle = (typ *)twiddleCoef_16_##suffix;                       \
-            break;                                                              \
-                                                                                \
-                                                                                \
-        default:                                                                \
-            /*  Reporting argument error if fftSize is not valid value */       \
-            status = ARM_MATH_ARGUMENT_ERROR;                                   \
-            break;                                                              \
-        }                                                                       \
-                                                                                \
-                                                                                \
-        return (status);                                                        \
-                                                                                \
-}
-
-arm_status arm_cfft_init_q31(arm_cfft_instance_q31 *S, uint16_t fftLen)
-{
-    CFFT_INIT(q31_t, q31, S, fftLen);
-}
 
     void TransformQ31::test_cfft_q31()
     { 
diff --git a/CMSIS/DSP/Testing/addToDB.py b/CMSIS/DSP/Testing/addToDB.py
index fb72f81..4d7b668 100755
--- a/CMSIS/DSP/Testing/addToDB.py
+++ b/CMSIS/DSP/Testing/addToDB.py
@@ -215,7 +215,11 @@
        for field in common:
         if field in VALKEYFIELD:
             if field == "CATEGORY":
-              val = findInTable(conn,"CATEGORY","category",row[field],"categoryid")
+              # Remove type extension to get category name so that
+              # all types are maped to same category which will
+              # help for post processing.
+              testField=re.sub(r'^(.*)[:]([^:]+)(F16|F32|F64|Q31|Q15|Q7)$',r'\1',row[field])
+              val = findInTable(conn,"CATEGORY","category",testField,"categoryid")
               keys[field]=val
             if field == "CORE":
               val = findInTable(conn,"CORE","coredef",row[field],"coreid")
diff --git a/CMSIS/DSP/Testing/addToRegDB.py b/CMSIS/DSP/Testing/addToRegDB.py
index 9fdbe7d..3e7a54a 100755
--- a/CMSIS/DSP/Testing/addToRegDB.py
+++ b/CMSIS/DSP/Testing/addToRegDB.py
@@ -223,7 +223,11 @@
        for field in common:
         if field in VALKEYFIELD:
             if field == "CATEGORY":
-              val = findInTable(conn,"CATEGORY","category",row[field],"categoryid")
+              # Remove type extension to get category name so that
+              # all types are maped to same category which will
+              # help for post processing.
+              testField=re.sub(r'^(.*)[:]([^:]+)(F16|F32|F64|Q31|Q15|Q7)$',r'\1',row[field])
+              val = findInTable(conn,"CATEGORY","category",testField,"categoryid")
               keys[field]=val
             if field == "CORE":
               val = findInTable(conn,"CORE","coredef",row[field],"coreid")
diff --git a/CMSIS/DSP/Testing/bench.txt b/CMSIS/DSP/Testing/bench.txt
index c95e6d4..c4a9a3a 100755
--- a/CMSIS/DSP/Testing/bench.txt
+++ b/CMSIS/DSP/Testing/bench.txt
@@ -1297,6 +1297,12 @@
                   REV = [0,1]
                 }
 
+                Params CFFT4_PARAM_ID = {
+                  NB = [16,64,256]
+                  IFFT = [0,1]
+                  REV = [0,1]
+                }
+
                 Params RFFT_PARAM_ID = {
                   NB = [32,64,128,256]
                   IFFT = [0,1]
@@ -1313,7 +1319,7 @@
                    test_cfft_f32:test_cfft_f32 -> CFFT_PARAM_ID
                    test_rfft_f32:test_rfft_f32 -> RFFT_PARAM_ID
                    test_dct4_f32:test_dct4_f32 -> DCT_PARAM_ID
-                   test_cfft_radix4_f32:test_cfft_radix4_f32 -> CFFT_PARAM_ID
+                   test_cfft_radix4_f32:test_cfft_radix4_f32 -> CFFT4_PARAM_ID
                    test_cfft_radix2_f32:test_cfft_radix2_f32 -> CFFT_PARAM_ID
                 }
            }
@@ -1341,6 +1347,12 @@
                   REV = [0,1]
                 }
 
+                Params CFFT4_PARAM_ID = {
+                  NB = [16,64,256]
+                  IFFT = [0,1]
+                  REV = [0,1]
+                }
+
                 Params RFFT_PARAM_ID = {
                   NB = [32,64,128,256]
                   IFFT = [0,1]
@@ -1357,7 +1369,7 @@
                    test_cfft_q31:test_cfft_q31 -> CFFT_PARAM_ID
                    test_rfft_q31:test_rfft_q31 -> RFFT_PARAM_ID
                    test_dct4_q31:test_dct4_q31 -> DCT_PARAM_ID
-                   test_cfft_radix4_q31:test_cfft_radix4_q31 -> CFFT_PARAM_ID
+                   test_cfft_radix4_q31:test_cfft_radix4_q31 -> CFFT4_PARAM_ID
                    test_cfft_radix2_q31:test_cfft_radix2_q31 -> CFFT_PARAM_ID
                 }
            }
@@ -1385,6 +1397,12 @@
                   REV = [0,1]
                 }
 
+                Params CFFT4_PARAM_ID = {
+                  NB = [16,64,256]
+                  IFFT = [0,1]
+                  REV = [0,1]
+                }
+
                 Params RFFT_PARAM_ID = {
                   NB = [32,64,128,256]
                   IFFT = [0,1]
@@ -1401,7 +1419,7 @@
                    test_cfft_q15:test_cfft_q15 -> CFFT_PARAM_ID
                    test_rfft_q15:test_rfft_q15 -> RFFT_PARAM_ID
                    test_dct4_q15:test_dct4_q15 -> DCT_PARAM_ID
-                   test_cfft_radix4_q15:test_cfft_radix4_q15 -> CFFT_PARAM_ID
+                   test_cfft_radix4_q15:test_cfft_radix4_q15 -> CFFT4_PARAM_ID
                    test_cfft_radix2_q15:test_cfft_radix2_q15 -> CFFT_PARAM_ID
                 }
            }
diff --git a/CMSIS/DSP/configCore.cmake b/CMSIS/DSP/configCore.cmake
index e6ab198..0a94d40 100644
--- a/CMSIS/DSP/configCore.cmake
+++ b/CMSIS/DSP/configCore.cmake
@@ -8,6 +8,7 @@
 option(LITTLEENDIAN "Little endian" ON)
 option(FASTMATHCOMPUTATIONS "Fast Math enabled" OFF)
 option(FLOAT16 "Scalar float16 supported" OFF)
+option(HYBRID "Hybrid instrinsics" ON)
 
 # More detailed identification for benchmark results
 SET(COREID ARMCM7)
@@ -95,6 +96,9 @@
     SET(HARDFP ON)
     SET(LITTLEENDIAN ON)
     SET(COREID ARMv81MML_DSP_DP_MVE_FP PARENT_SCOPE)    
+    if (HYBRID)
+      target_compile_definitions(${PROJECTNAME} PRIVATE  __ARM_MVE_HYBRID_INTRINSICS)
+    endif()
   endif()
   
   # CORTEX-M35