CMSIS-DSP: Corrected compilation issues with ARM AC5 compiler.
Added AC5 support to the test framework.
Upgraded gcc support.
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC5/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC5/lnk.sct
new file mode 100755
index 0000000..bc03375
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC5/lnk.sct
@@ -0,0 +1,75 @@
+#! armcc -E
+; command above MUST be in first line (no comment above!)
+
+/*
+;-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
+*/
+
+#include "mem_ARMCM7.h"
+
+/*--------------------- Flash Configuration ----------------------------------
+; <h> Flash Configuration
+;   <o0> Flash Base Address <0x0-0xFFFFFFFF:8>
+;   <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+ *----------------------------------------------------------------------------*/
+#define __ROM_BASE     0x00000000
+#define __ROM_SIZE     0x00200000
+
+/*--------------------- Embedded RAM Configuration ---------------------------
+; <h> RAM Configuration
+;   <o0> RAM Base Address    <0x0-0xFFFFFFFF:8>
+;   <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+ *----------------------------------------------------------------------------*/
+#define __RAM_BASE     0x20000000
+#define __RAM_SIZE     0x00200000
+
+/*--------------------- Stack / Heap Configuration ---------------------------
+; <h> Stack / Heap Configuration
+;   <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;   <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+ *----------------------------------------------------------------------------*/
+#define __STACK_SIZE       STACK_SIZE
+#define __HEAP_SIZE        HEAP_SIZE
+
+
+/*----------------------------------------------------------------------------
+  User Stack & Heap boundery definition
+ *----------------------------------------------------------------------------*/
+#define __STACK_TOP        (__RAM_BASE + __RAM_SIZE)      /* starts at end of RAM */
+#define __HEAP_BASE        (AlignExpr(+0, 8))             /* starts after RW_RAM section, 8 byte aligned */
+
+
+/*----------------------------------------------------------------------------
+  Scatter File Definitions definition
+ *----------------------------------------------------------------------------*/
+#define __RO_BASE         __ROM_BASE
+#define __RO_SIZE         __ROM_SIZE
+
+#define __RW_BASE        (__RAM_BASE        )
+#define __RW_SIZE        (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE)
+
+
+
+LR_ROM __RO_BASE __RO_SIZE  {                       ; load region size_region
+  ER_ROM __RO_BASE __RO_SIZE  {                     ; load address = execution address
+   *.o (RESET, +First)
+   *(InRoot$$Sections)
+   .ANY (+RO)
+   .ANY (+XO)
+  }
+
+  RW_RAM __RW_BASE __RW_SIZE  {                     ; RW data
+   .ANY (+RW +ZI)
+  }
+
+#if __HEAP_SIZE > 0
+  ARM_LIB_HEAP  __HEAP_BASE EMPTY  __HEAP_SIZE  {   ; Reserve empty region for heap
+  }
+#endif
+
+  ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE {   ; Reserve empty region for stack
+  }
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC5/mem_ARMCM7.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC5/mem_ARMCM7.h
new file mode 100755
index 0000000..84a1ff1
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC5/mem_ARMCM7.h
@@ -0,0 +1,38 @@
+/**************************************************************************//**
+ * @file     mem_ARMCM7.h
+ * @brief    Memory base and size definitions (used in scatter file)
+ * @version  V1.1.0
+ * @date     15. May 2019
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2019 Arm Limited. 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 __MEM_ARMCM7_H
+#define __MEM_ARMCM7_H
+
+
+
+#define STACK_SIZE     0x00003000
+#define HEAP_SIZE      0x00100000
+
+
+
+#endif /* __MEM_ARMCM7_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
index cc86072..dd8398d 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
@@ -33,7 +33,7 @@
   </h>
   -----------------------------------------------------------------------------*/
 __ROM_BASE = 0x00000000;
-__ROM_SIZE = 0x00100000;
+__ROM_SIZE = 0x00300000;
 
 /*--------------------- Embedded RAM Configuration ----------------------------
   <h> RAM Configuration
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC5/startup_ARMCM7.s b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC5/startup_ARMCM7.s
new file mode 100755
index 0000000..333d358
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC5/startup_ARMCM7.s
@@ -0,0 +1,168 @@
+;/**************************************************************************//**
+; * @file     startup_ARMCM7.s
+; * @brief    CMSIS Core Device Startup File for
+; *           ARMCM7 Device
+; * @version  V5.4.0
+; * @date     12. December 2018
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2018 Arm Limited. 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.
+; */
+
+;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+
+#include "mem_ARMCM7.h"
+
+;<h> Stack Configuration
+;  <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Stack_Size      EQU      STACK_SIZE
+
+                AREA     STACK, NOINIT, READWRITE, ALIGN=3
+__stack_limit
+Stack_Mem       SPACE    Stack_Size
+__initial_sp
+
+
+;<h> Heap Configuration
+;  <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Heap_Size       EQU      HEAP_SIZE
+
+                IF       Heap_Size != 0                      ; Heap is provided
+                AREA     HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem        SPACE    Heap_Size
+__heap_limit
+                ENDIF
+
+
+                PRESERVE8
+                THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+                AREA     RESET, DATA, READONLY
+                EXPORT   __Vectors
+                EXPORT   __Vectors_End
+                EXPORT   __Vectors_Size
+
+__Vectors       DCD      __initial_sp                        ;     Top of Stack
+                DCD      Reset_Handler                       ;     Reset Handler
+                DCD      NMI_Handler                         ; -14 NMI Handler
+                DCD      HardFault_Handler                   ; -13 Hard Fault Handler
+                DCD      MemManage_Handler                   ; -12 MPU Fault Handler
+                DCD      BusFault_Handler                    ; -11 Bus Fault Handler
+                DCD      UsageFault_Handler                  ; -10 Usage Fault Handler
+                DCD      0                                   ;     Reserved
+                DCD      0                                   ;     Reserved
+                DCD      0                                   ;     Reserved
+                DCD      0                                   ;     Reserved
+                DCD      SVC_Handler                         ;  -5 SVCall Handler
+                DCD      DebugMon_Handler                    ;  -4 Debug Monitor Handler
+                DCD      0                                   ;     Reserved
+                DCD      PendSV_Handler                      ;  -2 PendSV Handler
+                DCD      SysTick_Handler                     ;  -1 SysTick Handler
+
+                ; Interrupts
+                DCD      Interrupt0_Handler                  ;   0 Interrupt 0
+                DCD      Interrupt1_Handler                  ;   1 Interrupt 1
+                DCD      Interrupt2_Handler                  ;   2 Interrupt 2
+                DCD      Interrupt3_Handler                  ;   3 Interrupt 3
+                DCD      Interrupt4_Handler                  ;   4 Interrupt 4
+                DCD      Interrupt5_Handler                  ;   5 Interrupt 5
+                DCD      Interrupt6_Handler                  ;   6 Interrupt 6
+                DCD      Interrupt7_Handler                  ;   7 Interrupt 7
+                DCD      Interrupt8_Handler                  ;   8 Interrupt 8
+                DCD      Interrupt9_Handler                  ;   9 Interrupt 9
+
+                SPACE    (214 * 4)                           ; Interrupts 10 .. 224 are left out
+__Vectors_End
+__Vectors_Size  EQU      __Vectors_End - __Vectors
+
+
+                AREA     |.text|, CODE, READONLY
+
+; Reset Handler
+
+Reset_Handler   PROC
+                EXPORT   Reset_Handler             [WEAK]
+                IMPORT   SystemInit
+                IMPORT   __main
+
+                LDR      R0, =SystemInit
+                BLX      R0
+                LDR      R0, =__main
+                BX       R0
+                ENDP
+
+
+; Macro to define default exception/interrupt handlers.
+; Default handler are weak symbols with an endless loop.
+; They can be overwritten by real handlers.
+                MACRO
+                Set_Default_Handler  $Handler_Name
+$Handler_Name   PROC
+                EXPORT   $Handler_Name             [WEAK]
+                B        .
+                ENDP
+                MEND
+
+
+; Default exception/interrupt handler
+
+                Set_Default_Handler  NMI_Handler
+                Set_Default_Handler  HardFault_Handler
+                Set_Default_Handler  MemManage_Handler
+                Set_Default_Handler  BusFault_Handler
+                Set_Default_Handler  UsageFault_Handler
+                Set_Default_Handler  SVC_Handler
+                Set_Default_Handler  DebugMon_Handler
+                Set_Default_Handler  PendSV_Handler
+                Set_Default_Handler  SysTick_Handler
+
+                Set_Default_Handler  Interrupt0_Handler
+                Set_Default_Handler  Interrupt1_Handler
+                Set_Default_Handler  Interrupt2_Handler
+                Set_Default_Handler  Interrupt3_Handler
+                Set_Default_Handler  Interrupt4_Handler
+                Set_Default_Handler  Interrupt5_Handler
+                Set_Default_Handler  Interrupt6_Handler
+                Set_Default_Handler  Interrupt7_Handler
+                Set_Default_Handler  Interrupt8_Handler
+                Set_Default_Handler  Interrupt9_Handler
+
+                ALIGN
+
+
+; User setup Stack & Heap
+
+                IF       :LNOT::DEF:__MICROLIB
+                IMPORT   __use_two_region_memory
+                ENDIF
+
+                EXPORT   __stack_limit
+                EXPORT   __initial_sp
+                IF       Heap_Size != 0                      ; Heap is provided
+                EXPORT   __heap_base
+                EXPORT   __heap_limit
+                ENDIF
+
+                END
diff --git a/CMSIS/DSP/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c b/CMSIS/DSP/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c
index e75e017..b7db22b 100755
--- a/CMSIS/DSP/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c
+++ b/CMSIS/DSP/Source/BayesFunctions/arm_gaussian_naive_bayes_predict_f32.c
@@ -276,7 +276,7 @@
         for(nbDim = 0; nbDim < S->vectorDimension; nbDim++)
         {
            sigma = *pSigma + S->epsilon;
-           acc1 += log(2.0 * PI_F * sigma);
+           acc1 += log(2.0f * PI_F * sigma);
            acc2 += (*pIn - *pTheta) * (*pIn - *pTheta) / sigma;
 
            pIn++;
@@ -284,8 +284,8 @@
            pSigma++;
         }
 
-        tmp = -0.5 * acc1;
-        tmp -= 0.5 * acc2;
+        tmp = -0.5f * acc1;
+        tmp -= 0.5f * acc2;
 
 
         *buffer = tmp + log(*pPrior++);
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_boolean_distance_template.h b/CMSIS/DSP/Source/DistanceFunctions/arm_boolean_distance_template.h
index cac9e3d..992cd11 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_boolean_distance_template.h
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_boolean_distance_template.h
@@ -96,7 +96,7 @@
     uint32_t _cft=0;
 #endif
     uint32_t nbBoolBlock;
-    uint32_t a,b,ba,bb,cc=1;
+    uint32_t a,b,ba,bb;
     int shift;
     uint32x4_t aV, bV;
 #ifdef TT
@@ -315,7 +315,7 @@
 #ifdef FT
     uint32_t _cft=0;
 #endif
-    uint32_t a,b,ba,bb,cc=1;
+    uint32_t a,b,ba,bb;
     int shift;
 
     while(numberOfBools >= 32)
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_braycurtis_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_braycurtis_distance_f32.c
index 41d73e0..c5d067b 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_braycurtis_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_braycurtis_distance_f32.c
@@ -114,7 +114,6 @@
 float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize)
 {
    float32_t accumDiff=0.0, accumSum=0.0, tmpA, tmpB;
-   uint32_t i;
 
    while(blockSize > 0)
    {
@@ -141,4 +140,4 @@
 
 /**
  * @} end of groupDistance group
- */
\ No newline at end of file
+ */
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_canberra_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_canberra_distance_f32.c
index 05a49ad..bdae6ab 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_canberra_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_canberra_distance_f32.c
@@ -128,7 +128,7 @@
 
       diff = fabs(tmpA - tmpB);
       sum = fabs(tmpA) + fabs(tmpB);
-      if ((tmpA != 0.0) || (tmpB != 0.0))
+      if ((tmpA != 0.0f) || (tmpB != 0.0f))
       {
          accum += (diff / sum);
       }
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_chebyshev_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_chebyshev_distance_f32.c
index c7267bc..cbd3fd2 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_chebyshev_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_chebyshev_distance_f32.c
@@ -129,7 +129,6 @@
 float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize)
 {
    float32_t diff=0.0,  maxVal,tmpA, tmpB;
-   uint32_t i;
 
    tmpA = *pA++;
    tmpB = *pB++;
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_cityblock_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_cityblock_distance_f32.c
index 6d96d47..8788f84 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_cityblock_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_cityblock_distance_f32.c
@@ -90,8 +90,7 @@
 #else
 float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize)
 {
-   float32_t diff=0.0,  accum,tmpA, tmpB;
-   uint32_t i;
+   float32_t accum,tmpA, tmpB;
 
    accum = 0.0;
    while(blockSize > 0)
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_correlation_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_correlation_distance_f32.c
index 807e6c0..cee07fd 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_correlation_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_correlation_distance_f32.c
@@ -52,7 +52,6 @@
 float32_t arm_correlation_distance_f32(float32_t *pA,float32_t *pB, uint32_t blockSize)
 {
     float32_t ma,mb,pwra,pwrb,dot,tmp;
-    uint32_t i;
 
     arm_mean_f32(pA, blockSize, &ma);
     arm_mean_f32(pB, blockSize, &mb);
@@ -71,7 +70,7 @@
 
     arm_sqrt_f32(pwra * pwrb,&tmp);
  
-    return(1.0 - dot / tmp);
+    return(1.0f - dot / tmp);
 
    
 }
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_cosine_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_cosine_distance_f32.c
index 8adbbd9..b35b5ee 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_cosine_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_cosine_distance_f32.c
@@ -50,7 +50,6 @@
 float32_t arm_cosine_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize)
 {
     float32_t pwra,pwrb,dot,tmp;
-    uint32_t i;
 
     arm_power_f32(pA, blockSize, &pwra);
     arm_power_f32(pB, blockSize, &pwrb);
@@ -58,7 +57,7 @@
     arm_dot_prod_f32(pA,pB,blockSize,&dot);
 
     arm_sqrt_f32(pwra * pwrb, &tmp);
-    return(1.0 - dot / tmp);
+    return(1.0f - dot / tmp);
 
 }
 
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_dice_distance.c b/CMSIS/DSP/Source/DistanceFunctions/arm_dice_distance.c
index dfd3a7e..81533a6 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_dice_distance.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_dice_distance.c
@@ -87,4 +87,4 @@
 
 /**
  * @} end of groupDistance group
- */
\ No newline at end of file
+ */
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_euclidean_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_euclidean_distance_f32.c
index 07b99a7..e26291d 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_euclidean_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_euclidean_distance_f32.c
@@ -88,7 +88,6 @@
 float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize)
 {
    float32_t accum=0.0,tmp;
-   uint32_t i;
 
    while(blockSize > 0)
    {
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c
index 80fe391..143dac3 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_jensenshannon_distance_f32.c
@@ -30,7 +30,7 @@
 #include <math.h>
 
 
-static inline float32_t rel_entr(float32_t x, float32_t y)
+__STATIC_INLINE float32_t rel_entr(float32_t x, float32_t y)
 {
     return (x * log(x / y));
 }
@@ -160,14 +160,14 @@
     right = 0.0;
     for(i=0; i < blockSize; i++)
     {
-      tmp = (pA[i] + pB[i]) / 2.0;
+      tmp = (pA[i] + pB[i]) / 2.0f;
       left  += rel_entr(pA[i], tmp);
       right += rel_entr(pB[i], tmp);
     }
 
 
     sum = left + right;
-    arm_sqrt_f32(sum/2.0, &result);
+    arm_sqrt_f32(sum/2.0f, &result);
     return(result);
 
 }
diff --git a/CMSIS/DSP/Source/DistanceFunctions/arm_minkowski_distance_f32.c b/CMSIS/DSP/Source/DistanceFunctions/arm_minkowski_distance_f32.c
index c2cbf66..78f727d 100755
--- a/CMSIS/DSP/Source/DistanceFunctions/arm_minkowski_distance_f32.c
+++ b/CMSIS/DSP/Source/DistanceFunctions/arm_minkowski_distance_f32.c
@@ -98,7 +98,7 @@
 
 float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize)
 {
-    float32_t sum,diff;
+    float32_t sum;
     uint32_t i;
 
     sum = 0.0; 
@@ -108,7 +108,7 @@
     }
 
 
-    return(pow(sum,(1.0/order)));
+    return(pow(sum,(1.0f/order)));
 
 }
 #endif
diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c
index b5d0a66..a1fc70f 100644
--- a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c
+++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c
@@ -78,6 +78,8 @@
 
 /**
   @brief         Processing function for the floating-point RFFT/RIFFT.
+                 Source buffer is modified by this function.
+                 
   @deprecated    Do not use this function.  It has been superceded by \ref arm_rfft_fast_f32 and will be removed in the future.
   @param[in]     S    points to an instance of the floating-point RFFT/RIFFT structure
   @param[in]     pSrc points to the input buffer
diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c
index 7a1af14..e2be2a5 100644
--- a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c
+++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c
@@ -238,6 +238,8 @@
   @par
                    The complex transforms used internally include scaling to prevent fixed-point
                    overflows.  The overall scaling equals 1/(fftLen/2).
+                   Due to the use of complex transform internally, the source buffer is
+                   modified by the rfft.
   @par
                    A separate instance structure must be defined for each transform used but
                    twiddle factor and bit reversal tables can be reused.
@@ -279,7 +281,7 @@
 /**
   @brief         Processing function for the floating-point real FFT.
   @param[in]     S         points to an arm_rfft_fast_instance_f32 structure
-  @param[in]     p         points to input buffer
+  @param[in]     p         points to input buffer (Source buffer is modified by this function.)
   @param[in]     pOut      points to output buffer
   @param[in]     ifftFlag
                    - value = 0: RFFT
diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q15.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q15.c
index fdc9bab..be34ca0 100644
--- a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q15.c
+++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q15.c
@@ -56,7 +56,7 @@
 /**
   @brief         Processing function for the Q15 RFFT/RIFFT.
   @param[in]     S     points to an instance of the Q15 RFFT/RIFFT structure
-  @param[in]     pSrc  points to input buffer
+  @param[in]     pSrc  points to input buffer (Source buffer is modified by this function.)
   @param[out]    pDst  points to output buffer
   @return        none
 
diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q31.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q31.c
index d16600d..62ab7af 100644
--- a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q31.c
+++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_q31.c
@@ -56,7 +56,7 @@
 /**
   @brief         Processing function for the Q31 RFFT/RIFFT.
   @param[in]     S     points to an instance of the Q31 RFFT/RIFFT structure
-  @param[in]     pSrc  points to input buffer
+  @param[in]     pSrc  points to input buffer (Source buffer is modified by this function)
   @param[out]    pDst  points to output buffer
   @return        none
 
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h b/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h
index 5720af5..21e0025 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h
@@ -41,9 +41,9 @@
    public:
     ArrayMemory(char* ptr, size_t bufferLength,int aligned, bool tail);
     ArrayMemory(char* ptr, size_t bufferLength);
-    char *NewBuffer(size_t length);
-    void FreeMemory();
-    bool HasMemError();
+    virtual char *NewBuffer(size_t length);
+    virtual void FreeMemory();
+    virtual bool HasMemError();
    
    private:
      // Pointer to C array used for memory
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Calibrate.h b/CMSIS/DSP/Testing/FrameworkInclude/Calibrate.h
index 8747446..30f4d75 100755
--- a/CMSIS/DSP/Testing/FrameworkInclude/Calibrate.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Calibrate.h
@@ -5,6 +5,6 @@
         public:
             Calibrate(Testing::testID_t id);
             void empty();
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
     };
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Error.h b/CMSIS/DSP/Testing/FrameworkInclude/Error.h
index 9872161..c939ae3 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Error.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Error.h
@@ -159,4 +159,4 @@
 #define ASSERT_SNR(A,B,SNR) Client::assert_snr_error(__LINE__,A,B,SNR)
 #define ASSERT_TRUE(A) Client::assert_true(__LINE__,A)
 #define ASSERT_FALSE(A) Client::assert_false(__LINE__,A)
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h b/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
index 89a2517..395cc59 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
@@ -28,6 +28,7 @@
 #ifndef _FPGA_H_
 #define _FPGA_H_
 #include <string>
+#include "stdlib.h"
 
 namespace Client
 {
@@ -46,41 +47,40 @@
      public:
       FPGA(const char *testDesc,const char *patterns);
       ~FPGA();
-      void ReadIdentification();
-      void ReadTestIdentification();
-      Testing::nbParameters_t ReadNbParameters();
-      void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t);
-      void EndGroup();
-      void ImportPattern(Testing::PatternID_t);
-      void ReadPatternList();
-      void ReadOutputList();
-      void ReadParameterList(Testing::nbParameters_t);
-      Testing::nbSamples_t GetPatternSize(Testing::PatternID_t);
+      virtual void ReadIdentification();
+      virtual void ReadTestIdentification();
+      virtual Testing::nbParameters_t ReadNbParameters();
+      virtual void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t);
+      virtual void EndGroup();
+      virtual void ReadPatternList();
+      virtual void ReadOutputList();
+      virtual void ReadParameterList(Testing::nbParameters_t);
+      virtual Testing::nbSamples_t GetPatternSize(Testing::PatternID_t);
 
-      void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
-      void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+      virtual void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
 
-      void DumpParams(std::vector<Testing::param_t>&);
-      Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &,Testing::ParameterKind &);
-      bool hasParam();
-      Testing::PatternID_t getParamID();
+      virtual void DumpParams(std::vector<Testing::param_t>&);
+      virtual Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &,Testing::ParameterKind &);
+      virtual bool hasParam();
+      virtual Testing::PatternID_t getParamID();
 
-      void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t* data);
-      void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t* data);
-      void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t* data);
-      void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t* data);
-      void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t* data);
-      void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t* data);
-      void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t* data);
-      void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t* data);
+      virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t* data);
+      virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t* data);
+      virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t* data);
+      virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t* data);
+      virtual void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t* data);
+      virtual void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t* data);
+      virtual void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t* data);
+      virtual void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t* data);
       
-      Testing::testID_t CurrentTestID();
+      virtual Testing::testID_t CurrentTestID();
      private:
       void recomputeTestDir();
       void DeleteParams();
@@ -137,4 +137,4 @@
   };
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Generators.h b/CMSIS/DSP/Testing/FrameworkInclude/Generators.h
index 01e1145..2d09bee 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Generators.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Generators.h
@@ -8,4 +8,4 @@
 extern void generate3(Testing::param_t *,Testing::param_t *,Testing::nbParameterEntries_t &);
 extern void generate4(Testing::param_t *,Testing::param_t *,Testing::nbParameterEntries_t &);
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h b/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h
index ced7189..80c8e4f 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h
@@ -38,8 +38,8 @@
       IORunner(IO*,PatternMgr*);
       IORunner(IO*,PatternMgr*, Testing::RunningMode);
       ~IORunner();
-      Testing::TestStatus run(Suite *s);
-      Testing::TestStatus run(Group *g);
+      virtual Testing::TestStatus run(Suite *s);
+      virtual Testing::TestStatus run(Group *g);
      private:
       IO *m_io;
       PatternMgr *m_mgr;
@@ -50,4 +50,4 @@
 
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h b/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
index 117227c..bebebed 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
@@ -283,4 +283,4 @@
 
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h b/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
index c2c599e..423897e 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
@@ -29,7 +29,7 @@
 #define _SEMIHOSTING_H_
 #include <string>
 #include <memory>
-
+#include <stdio.h>
 
 namespace Client
 {
@@ -49,43 +49,43 @@
             ,std::string outputRootPath
             ,std::string parameterRootPath);
       ~Semihosting();
-      void ReadIdentification();
-      void ReadTestIdentification();
-      Testing::nbParameters_t ReadNbParameters();
-      void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t);
-      void EndGroup();
-      void ImportPattern(Testing::PatternID_t);
-      void ReadPatternList();
-      void ReadOutputList();
-      void ReadParameterList(Testing::nbParameters_t);
-      Testing::nbSamples_t GetPatternSize(Testing::PatternID_t);
+      virtual void ReadIdentification();
+      virtual void ReadTestIdentification();
+      virtual Testing::nbParameters_t ReadNbParameters();
+      virtual void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t);
+      virtual void EndGroup();
+      virtual void ImportPattern(Testing::PatternID_t);
+      virtual void ReadPatternList();
+      virtual void ReadOutputList();
+      virtual void ReadParameterList(Testing::nbParameters_t);
+      virtual Testing::nbSamples_t GetPatternSize(Testing::PatternID_t);
       //Testing::nbSamples_t GetParameterSize(Testing::PatternID_t);
       
-      void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
-      void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+      virtual void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
 
-      void DumpParams(std::vector<Testing::param_t>&);
-      Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &,Testing::ParameterKind &);
+      virtual void DumpParams(std::vector<Testing::param_t>&);
+      virtual Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &,Testing::ParameterKind &);
 
-      bool hasParam();
-      Testing::PatternID_t getParamID();
+      virtual bool hasParam();
+      virtual Testing::PatternID_t getParamID();
 
-      void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*);
-      void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*);
-      void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*);
-      void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*);
-      void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t*);
-      void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t*);
-      void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t*);
-      void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t*);
+      virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*);
+      virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*);
+      virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*);
+      virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*);
+      virtual void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t*);
+      virtual void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t*);
+      virtual void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t*);
+      virtual void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t*);
       
-      Testing::testID_t CurrentTestID();
+      virtual Testing::testID_t CurrentTestID();
      private:
       void DeleteParams();
       void recomputeTestDir();
@@ -137,4 +137,4 @@
   };
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Test.h b/CMSIS/DSP/Testing/FrameworkInclude/Test.h
index e7ba412..8740f6c 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Test.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Test.h
@@ -567,4 +567,4 @@
 }
 
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Timing.h b/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
index ac82bc6..f70de6e 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
@@ -90,4 +90,4 @@
 
 #endif 
 
-#endif
\ No newline at end of file
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp b/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp
index af1df83..5d824a7 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp
@@ -123,4 +123,4 @@
         this->memError=false;
 
     }
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Error.cpp b/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
index 8514cde..196fc25 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
@@ -65,7 +65,7 @@
     float32_t rel,delta,average;
 
     delta=abs(a-b);
-    average = (abs(a) + abs(b)) / 2.0;
+    average = (abs(a) + abs(b)) / 2.0f;
     if (average !=0)
     {
         rel = delta / average;
@@ -377,4 +377,4 @@
    }
 }
 
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp b/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
index 48accea..c2c6098 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
@@ -340,9 +340,8 @@
            }
            else
            {
-              unsigned long kind,nbInputSamples,nbOutputSamples,dimensions,len,sample;
+              unsigned long kind,nbInputSamples,nbOutputSamples,dimensions,sample;
               Testing::param_t *p,*current;
-              size_t length;
 
               // Generator kind
               this->read32(&kind);
@@ -432,10 +431,8 @@
     Testing::param_t* FPGA::ImportParams(Testing::PatternID_t id,Testing::nbParameterEntries_t &nbEntries,Testing::ParameterKind &paramKind)
     {
         nbEntries=0;
-        unsigned long offset,i;
+        unsigned long offset;
 
-        Testing::param_t *p;
-        uint32_t val;
 
         Testing::nbSamples_t len;
         struct offsetOrGen gen = this->getParameterDesc(id);
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp b/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp
index 6f86b26..39c835a 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp
@@ -2,11 +2,10 @@
 
 void generate1(Testing::param_t *result,Testing::param_t *data,Testing::nbParameterEntries_t &nbEntries)
 {
-    Testing::param_t *pa,*paStart,va;
+    Testing::param_t *pa,va;
 
     pa = data;
     int nba = *pa++;
-    paStart = pa;
     nbEntries = 0;
     for(int ia=0; ia < nba ; ia ++)
     {
@@ -170,4 +169,4 @@
        }
     }
 
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp b/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
index bf05ab4..0ef94bf 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
@@ -32,6 +32,7 @@
 
 #include <string>
 #include <cstddef>
+#include <stdlib.h>
 #include "IORunner.h"
 #include "Error.h"
 #include "Timing.h"
@@ -325,4 +326,4 @@
       }
 
 
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp b/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
index 997b864..758701f 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
@@ -171,4 +171,4 @@
 }
 
 
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp b/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
index 900ddde..d9ea1c2 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
@@ -238,4 +238,4 @@
     m_mem->FreeMemory();
 }
 
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp b/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
index 862353f..5c5760c 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
@@ -32,10 +32,12 @@
 
 #include <string>
 #include <cstddef>
-#include "Semihosting.h"
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "Generators.h"
+#include "Semihosting.h"
+
 
 namespace Client
 {
@@ -175,9 +177,9 @@
            //   Samples
            else
            {
-              int kind,nbInputSamples,nbOutputSamples,dimensions,len,sample;
+              int kind,nbInputSamples,nbOutputSamples,dimensions,sample;
               Testing::param_t *p,*current;
-              size_t length;
+             
               // Generator kind. Not yet used since there is only one kind of generator
               fscanf(this->infile,"%d\n",&kind);
               // Input data in config file
@@ -1026,4 +1028,4 @@
     
 
 
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Test.cpp b/CMSIS/DSP/Testing/FrameworkSource/Test.cpp
index 4a4f5a2..41c80f8 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Test.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Test.cpp
@@ -47,9 +47,9 @@
 /* Client */
 
   Suite::Suite(Testing::testID_t id):
+     TestContainer(id),
      m_tests(std::vector<test>()),
-     m_testIds(std::vector<Testing::testID_t>()),
-     TestContainer(id)
+     m_testIds(std::vector<Testing::testID_t>())
   {
 
   }
@@ -74,8 +74,8 @@
 
 
   Group::Group(Testing::testID_t id):
-     m_groups(std::vector<TestContainer*>()),
-     TestContainer(id)
+     TestContainer(id),
+     m_groups(std::vector<TestContainer*>())
   {
 
   }
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp b/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp
index abc73ec..a2fbc43 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp
@@ -153,5 +153,4 @@
     return(value - startCycles);
 #endif
 
-    return(0);
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h
index ae2a926..8489f74 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h
@@ -4,8 +4,8 @@
     {
         public:
             BIQUADF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BIQUADF32_decl.h"
             Client::Pattern<float32_t> samples;
@@ -25,4 +25,4 @@
             const float32_t *pSrc;
             float32_t *pDst;     
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h
index 5f52b57..4b044d8 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h
@@ -4,8 +4,8 @@
     {
         public:
             BIQUADF64(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BIQUADF64_decl.h"
             Client::Pattern<float64_t> samples;
@@ -22,4 +22,4 @@
             const float64_t *pSrc;
             float64_t *pDst;     
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h
index db406d4..b67565f 100644
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h
@@ -4,8 +4,8 @@
     {
         public:
             BasicMathsBenchmarksF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BasicMathsBenchmarksF32_decl.h"
             Client::Pattern<float32_t> input1;
@@ -18,4 +18,4 @@
             float32_t *inp2;
             float32_t *outp;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h
index 791a608..b054ed8 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             BasicMathsBenchmarksQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BasicMathsBenchmarksQ15_decl.h"
             Client::Pattern<q15_t> input1;
@@ -18,4 +18,4 @@
             q15_t *inp2;
             q15_t *outp;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h
index 738f800..be3eec8 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             BasicMathsBenchmarksQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BasicMathsBenchmarksQ31_decl.h"
             Client::Pattern<q31_t> input1;
@@ -17,4 +17,4 @@
             q31_t *inp1;
             q31_t *inp2;
             q31_t *outp;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h
index 59c0292..72207f7 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h
@@ -4,8 +4,8 @@
     {
         public:
             BasicMathsBenchmarksQ7(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BasicMathsBenchmarksQ7_decl.h"
             Client::Pattern<q7_t> input1;
@@ -17,4 +17,4 @@
             q7_t *inp1;
             q7_t *inp2;
             q7_t *outp;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h
index 83a767f..be0b18d 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h
@@ -4,8 +4,8 @@
     {
         public:
             BinaryF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BinaryF32_decl.h"
             Client::Pattern<float32_t> input1;
@@ -20,4 +20,4 @@
             arm_matrix_instance_f32 in2;
             arm_matrix_instance_f32 out;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h
index e39e767..a803253 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             BinaryQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BinaryQ15_decl.h"
             Client::Pattern<q15_t> input1;
@@ -23,4 +23,4 @@
 
             q15_t *pState;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h
index a7c1501..e8fe7c8 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             BinaryQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BinaryQ31_decl.h"
             Client::Pattern<q31_t> input1;
@@ -20,4 +20,4 @@
             arm_matrix_instance_q31 in2;
             arm_matrix_instance_q31 out;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h
index a408b0c..433b42a 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h
@@ -4,8 +4,8 @@
     {
         public:
             ComplexMathsBenchmarksF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "ComplexMathsBenchmarksF32_decl.h"
             Client::Pattern<float32_t> input1;
@@ -21,4 +21,4 @@
             const float32_t *inp3;
             float32_t *outp;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h
index 235cae0..00700d0 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             ComplexMathsBenchmarksQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "ComplexMathsBenchmarksQ15_decl.h"
             Client::Pattern<q15_t> input1;
@@ -21,4 +21,4 @@
             const q15_t *inp3;
             q15_t *outp;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h
index ae97226..b44f389 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             ComplexMathsBenchmarksQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "ComplexMathsBenchmarksQ31_decl.h"
             Client::Pattern<q31_t> input1;
@@ -21,4 +21,4 @@
             const q31_t *inp3;
             q31_t *outp;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h
index 8d8f5fa..8adcbd2 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h
@@ -4,8 +4,8 @@
     {
         public:
             ControllerF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "ControllerF32_decl.h"
             Client::Pattern<float32_t> samples;
@@ -19,4 +19,4 @@
             float32_t *pDst;
             
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h
index 8b17ff3..6f7537e 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             ControllerQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "ControllerQ15_decl.h"
             Client::Pattern<q15_t> samples;
@@ -19,4 +19,4 @@
             q15_t *pDst;
             
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h
index fd47522..f4a55cb 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             ControllerQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "ControllerQ31_decl.h"
             Client::Pattern<q31_t> samples;
@@ -19,4 +19,4 @@
             q31_t *pDst;
             
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h
index 0fae16f..acd0d0b 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h
@@ -4,8 +4,8 @@
     {
         public:
             DECIMF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "DECIMF32_decl.h"
             Client::Pattern<float32_t> coefs;
@@ -25,4 +25,4 @@
             const float32_t *pSrc;
             float32_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h
index 8d05f0b..c4697ac 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             DECIMQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "DECIMQ15_decl.h"
             Client::Pattern<q15_t> coefs;
@@ -25,4 +25,4 @@
             const q15_t *pSrc;
             q15_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h
index c4f807e..f122a30 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             DECIMQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "DECIMQ31_decl.h"
             Client::Pattern<q31_t> coefs;
@@ -25,4 +25,4 @@
             const q31_t *pSrc;
             q31_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h
index 2e10f5d..9be0955 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h
@@ -4,8 +4,8 @@
     {
         public:
             FIRF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FIRF32_decl.h"
             Client::Pattern<float32_t> coefs;
@@ -29,4 +29,4 @@
             const float32_t *pRef;
             float32_t *pErr;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h
index 4e6f8d1..f5b0ad5 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             FIRQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FIRQ15_decl.h"
             Client::Pattern<q15_t> coefs;
@@ -29,4 +29,4 @@
             const q15_t *pRef;
             q15_t *pErr;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h
index 7da188e..943c7f5 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             FIRQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FIRQ31_decl.h"
             Client::Pattern<q31_t> coefs;
@@ -28,4 +28,4 @@
             q31_t *pDst;
             const q31_t *pRef;
             q31_t *pErr;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h
index 8a237c9..d1064fd 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h
@@ -4,8 +4,8 @@
     {
         public:
             FastMathF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FastMathF32_decl.h"
             Client::Pattern<float32_t> samples;
@@ -18,4 +18,4 @@
             float32_t *pDst;
             
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h
index 649f160..631fba4 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             FastMathQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FastMathQ15_decl.h"
             Client::Pattern<q15_t> samples;
@@ -18,4 +18,4 @@
             q15_t *pDst;
             
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h
index 0237038..854ae74 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             FastMathQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FastMathQ31_decl.h"
             Client::Pattern<q31_t> samples;
@@ -18,4 +18,4 @@
             q31_t *pDst;
             
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FullyConnectedBench.h b/CMSIS/DSP/Testing/Include/Benchmarks/FullyConnectedBench.h
index 25f3621..9184700 100644
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FullyConnectedBench.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FullyConnectedBench.h
@@ -4,8 +4,8 @@
     {
         public:
             FullyConnectedBench(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FullyConnectedBench_decl.h"
             
@@ -24,4 +24,4 @@
             q7_t *outp;
             q7_t *refp;
             q15_t *tempp;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h
index 558cb5a..b2a5b39 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h
@@ -4,8 +4,8 @@
     {
         public:
             MISCF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "MISCF32_decl.h"
             Client::Pattern<float32_t> input1;
@@ -19,4 +19,4 @@
             const float32_t *inp2;
             float32_t *outp;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h
index 3e9d57a..0cb92c7 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             MISCQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "MISCQ15_decl.h"
             Client::Pattern<q15_t> input1;
@@ -18,4 +18,4 @@
             const q15_t *inp1;
             const q15_t *inp2;
             q15_t *outp;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h
index 1fc7fb0..ed595cb 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             MISCQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "MISCQ31_decl.h"
             Client::Pattern<q31_t> input1;
@@ -18,4 +18,4 @@
             const q31_t *inp1;
             const q31_t *inp2;
             q31_t *outp;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h
index b0cad56..3c9060d 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h
@@ -4,8 +4,8 @@
     {
         public:
             MISCQ7(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "MISCQ7_decl.h"
             Client::Pattern<q7_t> input1;
@@ -18,4 +18,4 @@
             const q7_t *inp1;
             const q7_t *inp2;
             q7_t *outp;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/PoolingBench.h b/CMSIS/DSP/Testing/Include/Benchmarks/PoolingBench.h
index 48fb392..ab15da0 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/PoolingBench.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/PoolingBench.h
@@ -4,8 +4,8 @@
     {
         public:
             PoolingBench(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "PoolingBench_decl.h"
             
@@ -38,4 +38,4 @@
             q7_t *outp;
             q15_t *tempp;
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h
index db54d7a..370a0df 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportBarF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SupportBarF32_decl.h"
             Client::Pattern<float32_t> input;
@@ -22,4 +22,4 @@
             float32_t *outp;
 
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h
index d8fec24..14517db 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SupportF32_decl.h"
             Client::Pattern<float32_t> samples;
@@ -27,4 +27,4 @@
 
             float32_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h
index 32248fb..be82fd2 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SupportQ15_decl.h"
             Client::Pattern<q15_t> samples;
@@ -24,4 +24,4 @@
 
             q15_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h
index 42c94f1..b72513a 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SupportQ31_decl.h"
             Client::Pattern<q31_t> samples;
@@ -22,4 +22,4 @@
             q7_t *pSrcQ7;
             q31_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h
index 880c2e0..c0f1156 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportQ7(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SupportQ7_decl.h"
             Client::Pattern<q7_t> samples;
@@ -25,4 +25,4 @@
 
             q7_t *pDst;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h
index ce2906a..d3478c9 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h
@@ -4,8 +4,8 @@
     {
         public:
             TransformF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "TransformF32_decl.h"
             Client::Pattern<float32_t> samples;
@@ -29,4 +29,4 @@
             arm_cfft_radix4_instance_f32 cfftRadix4Instance;
             arm_cfft_radix2_instance_f32 cfftRadix2Instance;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h
index cff7ff9..9736a70 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             TransformQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "TransformQ15_decl.h"
             Client::Pattern<q15_t> samples;
@@ -28,4 +28,4 @@
             arm_cfft_radix4_instance_q15 cfftRadix4Instance;
             arm_cfft_radix2_instance_q15 cfftRadix2Instance;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h
index 7109485..2abfc1d 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             TransformQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "TransformQ31_decl.h"
             Client::Pattern<q31_t> samples;
@@ -28,4 +28,4 @@
             arm_cfft_radix4_instance_q31 cfftRadix4Instance;
             arm_cfft_radix2_instance_q31 cfftRadix2Instance;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h
index 3bfec3f..976a666 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h
@@ -4,8 +4,8 @@
     {
         public:
             UnaryF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "UnaryF32_decl.h"
             Client::Pattern<float32_t> input1;
@@ -16,4 +16,4 @@
 
             arm_matrix_instance_f32 in1;
             arm_matrix_instance_f32 out;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h
index 432a199..a047a66 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h
@@ -4,8 +4,8 @@
     {
         public:
             UnaryF64(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "UnaryF64_decl.h"
             Client::Pattern<float64_t> input1;
@@ -16,4 +16,4 @@
 
             arm_matrix_instance_f64 in1;
             arm_matrix_instance_f64 out;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h
index 072925e..9e7a8ba 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             UnaryQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "UnaryQ15_decl.h"
             Client::Pattern<q15_t> input1;
@@ -16,4 +16,4 @@
 
             arm_matrix_instance_q15 in1;
             arm_matrix_instance_q15 out;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h
index 5de7178..89683b4 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             UnaryQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "UnaryQ31_decl.h"
             Client::Pattern<q31_t> input1;
@@ -16,4 +16,4 @@
 
             arm_matrix_instance_q31 in1;
             arm_matrix_instance_q31 out;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h
index a277c99..944a5c3 100644
--- a/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h
@@ -4,8 +4,8 @@
     {
         public:
             BasicTestsF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "BasicTestsF32_decl.h"
             
@@ -14,4 +14,4 @@
             Client::LocalPattern<float32_t> output;
             // Reference patterns are not loaded when we are in dump mode
             Client::RefPattern<float32_t> ref;
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/BayesF32.h b/CMSIS/DSP/Testing/Include/Tests/BayesF32.h
index 0aa75c4..892538f 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BayesF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BayesF32.h
@@ -4,8 +4,8 @@
     {
         public:
             BayesF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "BayesF32_decl.h"
             
@@ -28,4 +28,4 @@
 
             arm_gaussian_naive_bayes_instance_f32 bayes;
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h
index b9cf4e1..fdddaed 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h
@@ -4,8 +4,8 @@
     {
         public:
             DistanceTestsF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "DistanceTestsF32_decl.h"
             
@@ -24,4 +24,4 @@
             int nbPatterns;
 
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h
index c0e92ab..e14f16e 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h
@@ -4,8 +4,8 @@
     {
         public:
             DistanceTestsU32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "DistanceTestsU32_decl.h"
             
@@ -22,4 +22,4 @@
             int bitVecDim;
             int nbPatterns;
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/FullyConnected.h b/CMSIS/DSP/Testing/Include/Tests/FullyConnected.h
index 8e4ddff..8496cb8 100644
--- a/CMSIS/DSP/Testing/Include/Tests/FullyConnected.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FullyConnected.h
@@ -4,8 +4,8 @@
     {
         public:
             FullyConnected(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "FullyConnected_decl.h"
 
@@ -33,4 +33,4 @@
 
 
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/NNSupport.h b/CMSIS/DSP/Testing/Include/Tests/NNSupport.h
index 6f90b6b..648a34e 100755
--- a/CMSIS/DSP/Testing/Include/Tests/NNSupport.h
+++ b/CMSIS/DSP/Testing/Include/Tests/NNSupport.h
@@ -4,11 +4,11 @@
     {
         public:
             NNSupport(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "NNSupport_decl.h"
             
            
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/Pooling.h b/CMSIS/DSP/Testing/Include/Tests/Pooling.h
index c189b8a..b9d3a26 100755
--- a/CMSIS/DSP/Testing/Include/Tests/Pooling.h
+++ b/CMSIS/DSP/Testing/Include/Tests/Pooling.h
@@ -4,8 +4,8 @@
     {
         public:
             Pooling(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "Pooling_decl.h"
             
@@ -32,4 +32,4 @@
             int ACT_MIN;
             int ACT_MAX;
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/SVMF32.h b/CMSIS/DSP/Testing/Include/Tests/SVMF32.h
index 2912495..6bb96e1 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SVMF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SVMF32.h
@@ -4,8 +4,8 @@
     {
         public:
             SVMF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SVMF32_decl.h"
             Client::Pattern<float32_t> samples;
@@ -21,7 +21,7 @@
             arm_svm_sigmoid_instance_f32 sigmoid;
 
             int vecDim,nbSupportVectors,nbTestSamples,degree;
-            int classes[2]={0,0};
+            int32_t classes[2]={0,0};
             float32_t intercept;
             const float32_t *supportVectors;
             const float32_t *dualCoefs;
@@ -35,4 +35,4 @@
             } kind;
 
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/Softmax.h b/CMSIS/DSP/Testing/Include/Tests/Softmax.h
index 401e940..2e15357 100755
--- a/CMSIS/DSP/Testing/Include/Tests/Softmax.h
+++ b/CMSIS/DSP/Testing/Include/Tests/Softmax.h
@@ -4,8 +4,8 @@
     {
         public:
             Softmax(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "Softmax_decl.h"
             
@@ -22,4 +22,4 @@
             int vecDim;
            
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h
index ad73192..c35bb24 100755
--- a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h
@@ -4,8 +4,8 @@
     {
         public:
             StatsTestsF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "StatsTestsF32_decl.h"
             
@@ -24,4 +24,4 @@
 
            
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h
index d137f15..8532276 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportBarTestsF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
         private:
             #include "SupportBarTestsF32_decl.h"
             Client::Pattern<float32_t> input;
@@ -19,4 +19,4 @@
             int nbVecs;
             int vecDim;
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h
index f82ea91..a3ecc28 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h
@@ -4,8 +4,8 @@
     {
         public:
             SupportTestsF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "SupportTestsF32_decl.h"
             
@@ -19,4 +19,4 @@
 
             int nbSamples;
 
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformF32.h b/CMSIS/DSP/Testing/Include/Tests/TransformF32.h
index e3fa47f..7827189 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformF32.h
@@ -4,8 +4,8 @@
     {
         public:
             TransformF32(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "TransformF32_decl.h"
             
@@ -18,4 +18,4 @@
 
             int ifft;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformQ15.h b/CMSIS/DSP/Testing/Include/Tests/TransformQ15.h
index 99c7983..ac65c7c 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformQ15.h
@@ -4,8 +4,8 @@
     {
         public:
             TransformQ15(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "TransformQ15_decl.h"
             
@@ -28,4 +28,4 @@
             */
             int scaling;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformQ31.h b/CMSIS/DSP/Testing/Include/Tests/TransformQ31.h
index 7305058..9a44f20 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformQ31.h
@@ -4,8 +4,8 @@
     {
         public:
             TransformQ31(Testing::testID_t id);
-            void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
-            void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+            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 "TransformQ31_decl.h"
             
@@ -28,4 +28,4 @@
             */
             int scaling;
             
-    };
\ No newline at end of file
+    };
diff --git a/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp b/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
index 1547a40..6f817b0 100755
--- a/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
@@ -7,31 +7,22 @@
 switch (fftLen) {
      case 16:
        return(&arm_cfft_sR_f32_len16);
-       break;
      case 32:
        return(&arm_cfft_sR_f32_len32);
-       break;
      case 64:
        return(&arm_cfft_sR_f32_len64);
-       break;
      case 128:
        return(&arm_cfft_sR_f32_len128);
-       break;
      case 256:
        return(&arm_cfft_sR_f32_len256);
-       break;
      case 512:
        return(&arm_cfft_sR_f32_len512);
-       break;
      case 1024:
        return(&arm_cfft_sR_f32_len1024);
-       break;
      case 2048:
        return(&arm_cfft_sR_f32_len2048);
-       break;
      case 4096:
        return(&arm_cfft_sR_f32_len4096);
-       break;
    }
    return(NULL);
 }
diff --git a/CMSIS/DSP/Testing/Source/Tests/FullyConnected.cpp b/CMSIS/DSP/Testing/Source/Tests/FullyConnected.cpp
index 380d204..70593c4 100644
--- a/CMSIS/DSP/Testing/Source/Tests/FullyConnected.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/FullyConnected.cpp
@@ -2,6 +2,7 @@
 #include "Error.h"
 #include "arm_nnfunctions.h"
 #include "Test.h"
+#include "stdio.h"
 
 #include <cstdio>
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp
index 0b1c7d2..d848be7 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp
@@ -12,7 +12,6 @@
 
       float32_t *refp         = ref.ptr();
       float32_t *outp         = output.ptr();
-      float32_t *result;
 
       for(int i=0;i < this->nbPatterns; i++)
       {
@@ -30,7 +29,6 @@
 
       float32_t *refp         = ref.ptr();
       float32_t *outp         = output.ptr();
-      float32_t *result;
 
       for(int i=0;i < this->nbPatterns; i++)
       {
@@ -50,7 +48,6 @@
 
       float32_t *refp         = ref.ptr();
       float32_t *outp         = output.ptr();
-      float32_t *result;
 
       for(int i=0;i < this->nbPatterns; i++)
       {
@@ -71,7 +68,6 @@
       float32_t *refp         = ref.ptr();
       float32_t *outp         = output.ptr();
       float32_t *tmpp         = tmp.ptr();
-      float32_t *result;
 
       for(int i=0;i < this->nbPatterns; i++)
       {
diff --git a/CMSIS/DSP/Testing/TestScripts/CodeGen.py b/CMSIS/DSP/Testing/TestScripts/CodeGen.py
index 57c9814..487dc12 100644
--- a/CMSIS/DSP/Testing/TestScripts/CodeGen.py
+++ b/CMSIS/DSP/Testing/TestScripts/CodeGen.py
@@ -12,7 +12,7 @@
         %s
      }
     private:
-        %s;
+        %s
 };
 """
 
diff --git a/CMSIS/DSP/Testing/main.cpp b/CMSIS/DSP/Testing/main.cpp
index ece7321..d9de3636 100644
--- a/CMSIS/DSP/Testing/main.cpp
+++ b/CMSIS/DSP/Testing/main.cpp
@@ -3,4 +3,4 @@
 int main()
 {
     return(testmain());
-}
\ No newline at end of file
+}
diff --git a/CMSIS/DSP/Toolchain/AC5.cmake b/CMSIS/DSP/Toolchain/AC5.cmake
new file mode 100755
index 0000000..af7211b
--- /dev/null
+++ b/CMSIS/DSP/Toolchain/AC5.cmake
@@ -0,0 +1,95 @@
+#include(CMakePrintHelpers)
+include(AddFileDependencies)
+
+function(compilerVersion)
+  execute_process(COMMAND "${CMAKE_C_COMPILER}" --version_number
+     OUTPUT_VARIABLE CVERSION
+     ERROR_VARIABLE CVERSION
+    )
+  SET(COMPILERVERSION ${CVERSION} PARENT_SCOPE)
+  #cmake_print_variables(CVERSION)
+  #cmake_print_variables(CMAKE_C_COMPILER)
+  #MESSAGE( STATUS "CMD_OUTPUT:" ${CVERSION})
+endfunction()
+
+function(compilerSpecificCompileOptions PROJECTNAME ROOT)
+  #cmake_print_properties(TARGETS ${PROJECTNAME} PROPERTIES DISABLEOPTIMIZATION)
+  get_target_property(DISABLEOPTIM ${PROJECTNAME} DISABLEOPTIMIZATION)
+  if ((OPTIMIZED) AND (NOT DISABLEOPTIM))
+    #cmake_print_variables(DISABLEOPTIM)
+    target_compile_options(${PROJECTNAME} PRIVATE "-O2")
+  endif()
+
+  if (FASTMATHCOMPUTATIONS)
+      target_compile_options(${PROJECTNAME} PUBLIC "-ffast-math")
+  endif()
+  
+  #if (HARDFP)
+  #  target_compile_options(${PROJECTNAME} PUBLIC "-mfloat-abi=hard")
+  #endif()
+  
+  #if (LITTLEENDIAN)
+  #  target_compile_options(${PROJECTNAME} PUBLIC "-mlittle-endian")
+  #endif()
+
+   if (ARM_CPU STREQUAL "Cortex-M7.fp.dp" )
+        target_compile_options(${PROJECTNAME} PUBLIC "--fpu=FPv5_D16")
+        target_compile_options(${PROJECTNAME} PUBLIC "--thumb")
+  endif()
+  
+
+  if(EXPERIMENTAL)
+    experimentalCompilerSpecificCompileOptions(${PROJECTNAME} ${ROOT})
+  endif()
+endfunction()
+
+
+function(toolchainSpecificLinkForCortexM PROJECTNAME ROOT CORE PLATFORMFOLDER HASCSTARTUP)
+    # A specific library is created for ASM file
+    # since we do not want standard compile flags (for C) to be applied to 
+    # ASM files.
+    if (HASCSTARTUP)
+      target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/AC5/startup_${CORE}.c)
+    else()
+      target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/AC5/startup_${CORE}.s)
+    endif() 
+    target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/AC5)
+
+    set(SCATTERFILE "${PLATFORMFOLDER}/${CORE}/LinkScripts/AC5/lnk.sct")
+
+    set_target_properties(${PROJECTNAME} PROPERTIES LINK_DEPENDS "${SCATTERFILE};${PLATFORMFOLDER}/${CORE}/LinkScripts/AC5/mem_${CORE}.h")
+   
+    #target_link_options(${PROJECTNAME} PRIVATE "--info=sizes")
+    target_link_options(${PROJECTNAME} PRIVATE "--entry=Reset_Handler;--scatter=${SCATTERFILE}")
+
+endfunction()
+
+function(toolchainSpecificLinkForCortexA PROJECTNAME ROOT CORE PLATFORMFOLDER)
+    target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/AC5/startup_${CORE}.c)
+    
+
+    # RTE Components.h
+    target_include_directories(${PROJECTNAME} PRIVATE ${ROOT}/CMSIS/DSP/Testing)
+
+    set(SCATTERFILE "${PLATFORMFOLDER}/${CORE}/LinkScripts/AC5/lnk.sct")
+
+    set_target_properties(${PROJECTNAME} PROPERTIES LINK_DEPENDS "${SCATTERFILE};${PLATFORMFOLDER}/${CORE}/LinkScripts/AC5/mem_${CORE}.h")
+
+    target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/AC5)
+
+    #target_link_options(${PROJECTNAME} PRIVATE "--info=sizes")
+    target_link_options(${PROJECTNAME} PRIVATE "--entry=Vectors;--scatter=${SCATTERFILE}")
+
+endfunction()
+
+function(compilerSpecificPlatformConfigLibForM PROJECTNAME ROOT)
+endfunction()
+
+function(compilerSpecificPlatformConfigLibForA PROJECTNAME ROOT)
+endfunction()
+
+function(compilerSpecificPlatformConfigAppForM PROJECTNAME ROOT)
+endfunction()
+
+function(compilerSpecificPlatformConfigAppForA PROJECTNAME ROOT)
+endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/Toolchain/GCC.cmake b/CMSIS/DSP/Toolchain/GCC.cmake
index 6efee1a..b495c9d 100644
--- a/CMSIS/DSP/Toolchain/GCC.cmake
+++ b/CMSIS/DSP/Toolchain/GCC.cmake
@@ -98,6 +98,7 @@
 
     target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC)
 
+    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tempLink)
     set(SCATTERFILE ${CMAKE_CURRENT_BINARY_DIR}/tempLink/lnk.ld)
     preprocessScatter(${CORE} ${PLATFORMFOLDER} ${SCATTERFILE})
 
diff --git a/CMSIS/DSP/Toolchain/Tools.cmake b/CMSIS/DSP/Toolchain/Tools.cmake
index 2b3163e..fb31858 100644
--- a/CMSIS/DSP/Toolchain/Tools.cmake
+++ b/CMSIS/DSP/Toolchain/Tools.cmake
@@ -1,8 +1,13 @@
 SET(COMPILERVERSION "")
+
 if (ARMAC6)
     include(Toolchain/AC6)
 endif()
 
+if (ARMAC5)
+    include(Toolchain/AC5)
+endif()
+
 if (GCC)
     include(Toolchain/GCC)
 endif()
diff --git a/CMSIS/DSP/armac5.cmake b/CMSIS/DSP/armac5.cmake
new file mode 100755
index 0000000..3fd40b9
--- /dev/null
+++ b/CMSIS/DSP/armac5.cmake
@@ -0,0 +1,68 @@
+# Setting Linux is forcing th extension to be .o instead of .obj when building on WIndows.
+# It is important because armlink is failing when files have .obj extensions (error with
+# scatter file section not found)
+SET(CMAKE_SYSTEM_NAME Linux)
+SET(CMAKE_SYSTEM_PROCESSOR arm)
+
+
+
+#SET(tools "C:/PROGRA~1/ARM/DEVELO~1.0/sw/ARMCOM~1.12")
+
+find_program(CMAKE_C_COMPILER NAMES armcc armcc.exe)
+find_program(CMAKE_CXX_COMPILER NAMES armcc armcc.exe)
+find_program(CMAKE_ASM_COMPILER NAMES armasm armasm.exe)
+
+#SET(CMAKE_C_COMPILER "${tools}/bin/armclang.exe")
+#SET(CMAKE_CXX_COMPILER "${tools}/bin/armclang.exe")
+#SET(CMAKE_ASM_COMPILER "${tools}/bin/armclang.exe")
+
+find_program(CMAKE_AR NAMES armar armar.exe)
+
+#SET(CMAKE_AR "${tools}/bin/armar.exe")
+find_program(CMAKE_CXX_COMPILER_AR NAMES armar armar.exe)
+find_program(CMAKE_C_COMPILER_AR NAMES armar armar.exe)
+
+find_program(CMAKE_LINKER NAMES armlink armlink.exe)
+#SET(CMAKE_LINKER "${tools}/bin/armlink.exe")
+
+SET(CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> -o <TARGET> <LINK_LIBRARIES> <OBJECTS>")
+SET(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> -o <TARGET> <LINK_LIBRARIES> <OBJECTS>")
+
+SET(CMAKE_C_RESPONSE_FILE_LINK_FLAG "--via ")
+SET(CMAKE_C_OUTPUT_EXTENSION .o)
+SET(CMAKE_CXX_OUTPUT_EXTENSION .o)
+SET(CMAKE_ASM_OUTPUT_EXTENSION .o)
+# When library defined as STATIC, this line is needed to describe how the .a file must be
+# create. Some changes to the line may be needed.
+SET(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+
+#SET(CMAKE_ASM_CREATE_STATIC_LIBRARY "${tools}/bin/armar.exe -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+
+
+set(ARMAC5 ON)
+
+if(NOT ARM_CPU)
+    set(
+            ARM_CPU "Cortex-A5.neon"
+            CACHE STRING "Set ARM CPU. Default : cortex-a5"
+    )
+endif(NOT ARM_CPU)
+
+
+SET(CMAKE_C_FLAGS "--c99 --cpu ${ARM_CPU}" CACHE INTERNAL "C compiler common flags")
+SET(CMAKE_CXX_FLAGS "--exceptions --cpp11 --cpp_compat --cpu ${ARM_CPU}" CACHE INTERNAL "C compiler common flags")
+SET(CMAKE_ASM_FLAGS " --cpreproc --cpu ${ARM_CPU}" CACHE INTERNAL "ASM compiler common flags")
+#SET(CMAKE_ASM_FLAGS "--cpu=${ARM_CPU}" CACHE INTERNAL "ASM compiler common flags")
+#SET(CMAKE_EXE_LINKER_FLAGS "-flto" CACHE INTERNAL "linker flags")
+
+# Where is the target environment
+#SET(CMAKE_FIND_ROOT_PATH "${tools}")
+# Search for programs in the build host directories
+SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+# For libraries and headers in the target directories
+SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+#include(CMakePrintHelpers)
+#cmake_print_variables(${ASM_DIALECT})
diff --git a/CMSIS/DSP/armcc.cmake b/CMSIS/DSP/armac6.cmake
similarity index 100%
rename from CMSIS/DSP/armcc.cmake
rename to CMSIS/DSP/armac6.cmake
diff --git a/CMSIS/DSP/configBoot.cmake b/CMSIS/DSP/configBoot.cmake
index fd3c663..fc8bc9c 100755
--- a/CMSIS/DSP/configBoot.cmake
+++ b/CMSIS/DSP/configBoot.cmake
@@ -60,98 +60,19 @@
   endif()
   ###################
   #
-  # Cortex cortex-m7
+  # Cortex M
   #
-  if (ARM_CPU STREQUAL "cortex-m7")
+  if (ARM_CPU MATCHES  "^[cC]ortex-[Mm].*$")
     cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)    
     
   endif()
   
-  ###################
-  #
-  # Cortex cortex-m4
-  #
-  if (ARM_CPU STREQUAL "cortex-m4")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)
-  endif()
-  
-  ###################
-  #
-  # Cortex cortex-m35p
-  #
-  if (ARM_CPU STREQUAL "cortex-m35")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)
-      
-  endif()
-  
-  ###################
-  #
-  # Cortex cortex-m33
-  #
-  if (ARM_CPU STREQUAL "cortex-m33")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)
-      
-  endif()
-  
-  ###################
-  #
-  # Cortex cortex-m23
-  #
-  if (ARM_CPU STREQUAL "cortex-m23")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)
-     
-  endif()
-
-  ###################
-  #
-  # Cortex cortex-m0+
-  #
-  if (ARM_CPU STREQUAL "cortex-m0p")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)
-      
-  endif()
-
-  ###################
-  #
-  # Cortex cortex-m0
-  #
-  if (ARM_CPU STREQUAL "cortex-m0")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)
-      
-  endif()
   
   ###################
   #
   # Cortex cortex-a5
   #
-  if (ARM_CPU STREQUAL "cortex-a5")
-    cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
-    
-  endif()
-
-  ###################
-  #
-  # Cortex cortex-a7
-  #
-  if (ARM_CPU STREQUAL "cortex-a7")
-    cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
-    
-  endif()
-
-  ###################
-  #
-  # Cortex cortex-a9
-  #
-  if (ARM_CPU STREQUAL "cortex-a9")
-    cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
-    
-  endif()
-
-  ###################
-  #
-  # Cortex cortex-a15
-  #
-  if (ARM_CPU STREQUAL "cortex-a15")
+  if (ARM_CPU MATCHES "^[cC]ortex-[Aa].*")
     cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
     
   endif()
diff --git a/CMSIS/DSP/configCore.cmake b/CMSIS/DSP/configCore.cmake
index f7a24f6..5ff2055 100644
--- a/CMSIS/DSP/configCore.cmake
+++ b/CMSIS/DSP/configCore.cmake
@@ -29,7 +29,7 @@
   #
 
   # CORTEX-A15
-  if (ARM_CPU STREQUAL "cortex-a15" )
+  if (ARM_CPU  MATCHES  "^[cC]ortex-[aA]15([^0-9].*)?$" )
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
     SET(CORTEXM OFF)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A) 
@@ -41,7 +41,7 @@
   endif()
   
   # CORTEX-A9
-  if (ARM_CPU STREQUAL "cortex-a9" )
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]9([^0-9].*)?$" )
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
     SET(CORTEXM OFF)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A) 
@@ -54,7 +54,7 @@
   endif()
   
   # CORTEX-A7
-  if (ARM_CPU STREQUAL "cortex-a7" )
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]7([^0-9].*)?$" )
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
     SET(CORTEXM OFF)
   
@@ -68,7 +68,7 @@
   endif()
   
   # CORTEX-A5
-  if (ARM_CPU STREQUAL "cortex-a5" )
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]5([^0-9].*)?$" )
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
     SET(CORTEXM OFF)
     
@@ -87,7 +87,7 @@
   #
   
   # CORTEX-M35
-  if (ARM_CPU STREQUAL "cortex-m35")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]35([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM35P_DSP_FP)
@@ -98,7 +98,7 @@
   endif()
   
   # CORTEX-M33
-  if (ARM_CPU STREQUAL "cortex-m33")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]33([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM33_DSP_FP)
@@ -109,7 +109,7 @@
   endif()
   
   # CORTEX-M23
-  if (ARM_CPU STREQUAL "cortex-m23")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]23([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM23)
@@ -120,7 +120,7 @@
   endif()
   
   # CORTEX-M7
-  if (ARM_CPU STREQUAL "cortex-m7")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]7([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")  
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM7_DP)
@@ -131,7 +131,7 @@
   endif()
   
   # CORTEX-M4
-  if (ARM_CPU STREQUAL "cortex-m4")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]4([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM4_FP)
@@ -142,7 +142,7 @@
   endif()
   
   # CORTEX-M3
-  if (ARM_CPU STREQUAL "cortex-m3")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]3([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM3)
@@ -153,7 +153,7 @@
   endif()
   
   # CORTEX-M0plus
-  if (ARM_CPU STREQUAL "cortex-m0p")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]0p([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0P)
@@ -164,7 +164,7 @@
   endif()
   
   # CORTEX-M0
-  if (ARM_CPU STREQUAL "cortex-m0")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]0([^0-9].*)?$")
     target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
     target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
     target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0)
diff --git a/CMSIS/DSP/configPlatform.cmake b/CMSIS/DSP/configPlatform.cmake
index bd306ad..95b2443 100644
--- a/CMSIS/DSP/configPlatform.cmake
+++ b/CMSIS/DSP/configPlatform.cmake
@@ -26,7 +26,7 @@
   #
   # Cortex cortex-m7
   #
-  if (ARM_CPU STREQUAL "cortex-m7")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]7([^0-9].*)?$")
     SET(CORE ARMCM7 PARENT_SCOPE)    
   endif()
   
@@ -34,7 +34,7 @@
   #
   # Cortex cortex-m4
   #
-  if (ARM_CPU STREQUAL "cortex-m4")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]4([^0-9].*)?$")
       SET(CORE ARMCM4 PARENT_SCOPE)
   endif()
   
@@ -42,7 +42,7 @@
   #
   # Cortex cortex-m35p
   #
-  if (ARM_CPU STREQUAL "cortex-m35")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]35([^0-9].*)?$")
       SET(CORE ARMCM35P PARENT_SCOPE)
       
   endif()
@@ -51,7 +51,7 @@
   #
   # Cortex cortex-m33
   #
-  if (ARM_CPU STREQUAL "cortex-m33")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]33([^0-9].*)?$")
       SET(CORE ARMCM33 PARENT_SCOPE)
       
   endif()
@@ -60,7 +60,7 @@
   #
   # Cortex cortex-m23
   #
-  if (ARM_CPU STREQUAL "cortex-m23")
+  if (ARM_CPU  MATCHES "^[cC]ortex-[mM]23([^0-9].*)?$")
       SET(CORE ARMCM23 PARENT_SCOPE)
      
   endif()
@@ -69,7 +69,7 @@
   #
   # Cortex cortex-m0+
   #
-  if (ARM_CPU STREQUAL "cortex-m0p")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]0p([^0-9].*)?$")
       SET(CORE ARMCM0plus PARENT_SCOPE)
       
   endif()
@@ -78,7 +78,7 @@
   #
   # Cortex cortex-m0
   #
-  if (ARM_CPU STREQUAL "cortex-m0")
+  if (ARM_CPU MATCHES "^[cC]ortex-[mM]0([^0-9].*)?$")
       SET(CORE ARMCM0 PARENT_SCOPE)
       
   endif()
@@ -87,7 +87,7 @@
   #
   # Cortex cortex-a5
   #
-  if (ARM_CPU STREQUAL "cortex-a5")
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]5([^0-9].*)?$")
     SET(CORE ARMCA5 PARENT_SCOPE)
     
   endif()
@@ -96,7 +96,7 @@
   #
   # Cortex cortex-a7
   #
-  if (ARM_CPU STREQUAL "cortex-a7")
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]7([^0-9].*)?$")
     SET(CORE ARMCA7 PARENT_SCOPE)
     
   endif()
@@ -105,7 +105,7 @@
   #
   # Cortex cortex-a9
   #
-  if (ARM_CPU STREQUAL "cortex-a9")
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]9([^0-9].*)?$")
     SET(CORE ARMCA9 PARENT_SCOPE)
     
   endif()
@@ -114,7 +114,7 @@
   #
   # Cortex cortex-a15
   #
-  if (ARM_CPU STREQUAL "cortex-a15")
+  if (ARM_CPU MATCHES "^[cC]ortex-[aA]15([^0-9].*)?$")
     SET(CORE ARMCA15 PARENT_SCOPE)
   endif()
 endfunction()
diff --git a/CMSIS/DSP/gcc.cmake b/CMSIS/DSP/gcc.cmake
index 2e1abea..77378d1 100644
--- a/CMSIS/DSP/gcc.cmake
+++ b/CMSIS/DSP/gcc.cmake
@@ -58,6 +58,8 @@
     add_link_options("--specs=nosys.specs")
 endif()
 
+add_link_options("-Wl,--start-group")
+
 # Where is the target environment
 #SET(CMAKE_FIND_ROOT_PATH "${tools}")
 # Search for programs in the build host directories