CMSIS-DSP: Updated tests to use the new headers.
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA32/system_ARMCA32.c b/CMSIS/DSP/Platforms/FVP/ARMCA32/system_ARMCA32.c
index 69cb0aa..4aa1968 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMCA32/system_ARMCA32.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA32/system_ARMCA32.c
@@ -25,16 +25,66 @@
  * limitations under the License.
  */
 
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
+
+#include "ARMCA32.h"
 #include "RTE_Components.h"
 #include CMSIS_device_header
-//#include "irq_ctrl.h"
+
+
+
+#define SERIAL_BASE_ADDRESS (0x13000000)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+#define SOFTWARE_MARK  *((volatile unsigned *) (SERIAL_BASE_ADDRESS+4))
+
+void start_ipss_measurement()
+{
+  SOFTWARE_MARK = 1;
+}
+
+void stop_ipss_measurement()
+{
+  SOFTWARE_MARK = 0;
+}
+
+int stdout_putchar(char txchar)
+{
+    SERIAL_DATA = txchar; 
+    return(txchar);                    
+}
+
+int stderr_putchar(char txchar)
+{
+    return stdout_putchar(txchar);
+}
+
+void ttywrch (int ch)
+{
+  stdout_putchar(ch);
+}
+
+extern void enable_caches();
 
 /*----------------------------------------------------------------------------
   System Initialization
  *----------------------------------------------------------------------------*/
 void SystemInit (void)
 {
-
 /* do not use global variables because this function is called before
    reaching pre-main. RW section may be overwritten afterwards.          */
 
@@ -52,7 +102,7 @@
   __ISB();
 
   //  Invalidate data cache
-  L1C_InvalidateDCacheAll();
+  //L1C_InvalidateDCacheAll();
 
 #if ((__FPU_PRESENT == 1) && (__FPU_USED == 1))
   // Enable FPU
@@ -67,8 +117,8 @@
 
   // Enable Caches
   L1C_EnableCaches();
-  L1C_EnableBTAC();
 
+  //L1C_EnableBTAC();
 
 #if (__L2C_PRESENT == 1) 
   // Enable GIC
@@ -78,4 +128,449 @@
   // IRQ Initialize
   //IRQ_Initialize();
 
+
 }
+
+__attribute__((constructor(255)))
+void platform_init(void)
+{
+    printf("\n_[TEST START]____________________________________________________\n");
+}
+
+
+#if __IS_COMPILER_ARM_COMPILER_6__
+__asm(".global __use_no_semihosting\n\t");
+#   ifndef __MICROLIB
+__asm(".global __ARM_use_no_argv\n\t");
+#   endif
+#endif
+
+/**
+   Writes the character specified by c (converted to an unsigned char) to
+   the output stream pointed to by stream, at the position indicated by the
+   associated file position indicator (if defined), and advances the
+   indicator appropriately. If the file position indicator is not defined,
+   the character is appended to the output stream.
+ 
+  \param[in] c       Character
+  \param[in] stream  Stream handle
+ 
+  \return    The character written. If a write error occurs, the error
+             indicator is set and fputc returns EOF.
+*/
+__attribute__((weak))
+int fputc (int c, FILE * stream) 
+{
+    if (stream == &__stdout) {
+        return (stdout_putchar(c));
+    }
+
+    if (stream == &__stderr) {
+        return (stderr_putchar(c));
+    }
+
+    return (-1);
+}
+
+#ifndef GCCCOMPILER
+/* IO device file handles. */
+#define FH_STDIN    0x8001
+#define FH_STDOUT   0x8002
+#define FH_STDERR   0x8003
+
+const char __stdin_name[]  = ":STDIN";
+const char __stdout_name[] = ":STDOUT";
+const char __stderr_name[] = ":STDERR";
+
+#define RETARGET_SYS        1
+#define RTE_Compiler_IO_STDOUT  1
+#define RTE_Compiler_IO_STDERR  1
+/**
+  Defined in rt_sys.h, this function opens a file.
+ 
+  The _sys_open() function is required by fopen() and freopen(). These
+  functions in turn are required if any file input/output function is to
+  be used.
+  The openmode parameter is a bitmap whose bits mostly correspond directly to
+  the ISO mode specification. Target-dependent extensions are possible, but
+  freopen() must also be extended.
+ 
+  \param[in] name     File name
+  \param[in] openmode Mode specification bitmap
+ 
+  \return    The return value is ?1 if an error occurs.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+FILEHANDLE _sys_open (const char *name, int openmode) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)openmode;
+#endif
+ 
+  if (name == NULL) {
+    return (-1);
+  }
+ 
+  if (name[0] == ':') {
+    if (strcmp(name, ":STDIN") == 0) {
+      return (FH_STDIN);
+    }
+    if (strcmp(name, ":STDOUT") == 0) {
+      return (FH_STDOUT);
+    }
+    if (strcmp(name, ":STDERR") == 0) {
+      return (FH_STDERR);
+    }
+    return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_open(name, openmode));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function closes a file previously opened
+  with _sys_open().
+  
+  This function must be defined if any input/output function is to be used.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is 0 if successful. A nonzero value indicates
+             an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_close (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_close(fh));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function writes the contents of a buffer to a file
+  previously opened with _sys_open().
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return    The return value is either:
+             - a positive number representing the number of characters not
+               written (so any nonzero return value denotes a failure of
+               some sort)
+             - a negative number indicating an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_write (FILEHANDLE fh, const uint8_t *buf, uint32_t len, int mode) {
+#if (defined(RTE_Compiler_IO_STDOUT) || defined(RTE_Compiler_IO_STDERR))
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+#ifdef RTE_Compiler_IO_STDOUT
+      for (; len; len--) {
+        ch = *buf++;
+
+        stdout_putchar(ch);
+      }
+#endif
+      return (0);
+    case FH_STDERR:
+#ifdef RTE_Compiler_IO_STDERR
+      for (; len; len--) {
+        ch = *buf++;
+
+        stderr_putchar(ch);
+      }
+#endif
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_write(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function reads the contents of a file into a buffer.
+ 
+  Reading up to and including the last byte of data does not turn on the EOF
+  indicator. The EOF indicator is only reached when an attempt is made to read
+  beyond the last byte of data. The target-independent code is capable of
+  handling:
+    - the EOF indicator being returned in the same read as the remaining bytes
+      of data that precede the EOF
+    - the EOF indicator being returned on its own after the remaining bytes of
+      data have been returned in a previous read.
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return     The return value is one of the following:
+              - The number of bytes not read (that is, len - result number of
+                bytes were read).
+              - An error indication.
+              - An EOF indicator. The EOF indication involves the setting of
+                0x80000000 in the normal result.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_read (FILEHANDLE fh, uint8_t *buf, uint32_t len, int mode) {
+#ifdef RTE_Compiler_IO_STDIN
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+#ifdef RTE_Compiler_IO_STDIN
+      ch = stdin_getchar();
+      if (ch < 0) {
+        return ((int)(len | 0x80000000U));
+      }
+      *buf++ = (uint8_t)ch;
+#if (STDIN_ECHO != 0)
+      stdout_putchar(ch);
+#endif
+      len--;
+      return ((int)(len));
+#else
+      return ((int)(len | 0x80000000U));
+#endif
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_read(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+
+ 
+ 
+/**
+  Defined in rt_sys.h, this function determines if a file handle identifies
+  a terminal.
+ 
+  When a file is connected to a terminal device, this function is used to
+  provide unbuffered behavior by default (in the absence of a call to
+  set(v)buf) and to prohibit seeking.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is one of the following values:
+             - 0:     There is no interactive device.
+             - 1:     There is an interactive device.
+             - other: An error occurred.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_istty (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (1);
+    case FH_STDOUT:
+      return (1);
+    case FH_STDERR:
+      return (1);
+  }
+ 
+  return (0);
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function puts the file pointer at offset pos from
+  the beginning of the file.
+ 
+  This function sets the current read or write position to the new location pos
+  relative to the start of the current file fh.
+ 
+  \param[in] fh  File handle
+  \param[in] pos File pointer offset
+ 
+  \return    The result is:
+             - non-negative if no error occurs
+             - negative if an error occurs
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_seek (FILEHANDLE fh, long pos) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)pos;
+#endif
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_seek(fh, (uint32_t)pos));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function returns the current length of a file.
+ 
+  This function is used by _sys_seek() to convert an offset relative to the
+  end of a file into an offset relative to the beginning of the file.
+  You do not have to define _sys_flen() if you do not intend to use fseek().
+  If you retarget at system _sys_*() level, you must supply _sys_flen(),
+  even if the underlying system directly supports seeking relative to the
+  end of a file.
+ 
+  \param[in] fh File handle
+ 
+  \return    This function returns the current length of the file fh,
+             or a negative error indicator.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+long _sys_flen (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_flen(fh));
+#endif
+#else
+  return (0);
+#endif
+}
+#endif
+ 
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
+
+#endif
+
+#define log_str(...)                                \
+    do {                                                \
+        const char *pchSrc = __VA_ARGS__;               \
+        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
+        do {                                            \
+            stdout_putchar(*pchSrc++);                  \
+        } while(--hwSize);                              \
+    } while(0)
+
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#else
+void _sys_exit(int n)
+{
+    (void)n;
+  log_str("\n");
+  log_str("_[TEST COMPLETE]_________________________________________________\n");
+  log_str("\n\n");
+  stdout_putchar(4);
+  while(1);
+}
+#endif 
+
+extern void ttywrch (int ch);
+__attribute__((weak))
+void _ttywrch (int ch) 
+{
+    ttywrch(ch);
+}
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/AC6/lnk.sct
index 78bc35e..fcdf3e4 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/AC6/lnk.sct
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/AC6/lnk.sct
@@ -7,69 +7,27 @@
 
 #include "mem_ARMCM0.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     0x00300000
+LOAD_REGION 0x0
+{
+    CODE +0 0x0007ffff
+    {
+        *.o (RESET, +First)
+        * (InRoot$$$Sections)
+        * (+RO-CODE)                              
+    }
 
-/*--------------------- 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
+    DATA 0x20000000 0x60000
+    {
+    * (+RO-DATA)
+    * (+RW,+ZI)                         
+    }
 
-/*--------------------- 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
+    ARM_LIB_STACK 0x20062000 ALIGN 64 EMPTY -0x00002000  
+    {}
+    ARM_LIB_HEAP 0x20062000 ALIGN 64 EMPTY 0x0050000 
+    {}
 
-
-/*----------------------------------------------------------------------------
-  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/ARMCM0/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/lnk.ld
index d2485ad..161e491 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/lnk.ld
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/lnk.ld
@@ -22,77 +22,16 @@
  * limitations under the License.
  */
 #include "mem_ARMCM0.h" 
-/*
- *-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
- */
 
-/*---------------------- Flash Configuration ----------------------------------
-  <h> Flash Configuration
-    <o0> Flash Base Address <0x0-0xFFFFFFFF:8>
-    <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
-  -----------------------------------------------------------------------------*/
-__ROM_BASE = 0x00000000;
-__ROM_SIZE = 0x00400000;
-
-/*--------------------- Embedded RAM Configuration ----------------------------
-  <h> RAM Configuration
-    <o0> RAM Base Address    <0x0-0xFFFFFFFF:8>
-    <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
- -----------------------------------------------------------------------------*/
-__RAM_BASE = 0x20000000;
-__RAM_SIZE = 0x00300000;
-
-/*--------------------- Stack / Heap Configuration ----------------------------
-  <h> Stack / Heap Configuration
-    <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-    <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
-  -----------------------------------------------------------------------------*/
-__STACK_SIZE = STACK_SIZE;
-__HEAP_SIZE  = HEAP_SIZE;
-
-/*
- *-------------------- <<< end of configuration section >>> -------------------
- */
+__STACK_SIZE = 0x2000;
+__HEAP_SIZE  = 0x50000;
 
 MEMORY
 {
-  FLASH (rx)  : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
-  RAM   (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
+  ITCM (rx)     : ORIGIN = 0x00000000, LENGTH = 512K
+  DTCM (xrw)    : ORIGIN = 0x20000000, LENGTH = 128K
+  DTCM2 (xrw)     : ORIGIN = 0x20020000, LENGTH = 384K
 }
-
-/* Linker script to place sections and symbol values. Should be used together
- * with other linker script that defines memory regions FLASH and RAM.
- * It references following symbols, which must be defined in code:
- *   Reset_Handler : Entry of reset handler
- *
- * It defines following symbols, which code can use without definition:
- *   __exidx_start
- *   __exidx_end
- *   __copy_table_start__
- *   __copy_table_end__
- *   __zero_table_start__
- *   __zero_table_end__
- *   __etext
- *   __data_start__
- *   __preinit_array_start
- *   __preinit_array_end
- *   __init_array_start
- *   __init_array_end
- *   __fini_array_start
- *   __fini_array_end
- *   __data_end__
- *   __bss_start__
- *   __bss_end__
- *   __end__
- *   end
- *   __HeapLimit
- *   __StackLimit
- *   __StackTop
- *   __stack
- */
 ENTRY(Reset_Handler)
 
 SECTIONS
@@ -122,12 +61,12 @@
     *(.rodata*)
 
     KEEP(*(.eh_frame*))
-  } > FLASH
+  } > ITCM
 
   /*
    * SG veneers:
    * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address
-   * must be set, either with the command line option ‘--section-start’ or in a linker script,
+   * must be set, either with the command line option ‘--section-start’ or in a linker script,
    * to indicate where to place these veneers in memory.
    */
 /*
@@ -139,13 +78,13 @@
   .ARM.extab :
   {
     *(.ARM.extab* .gnu.linkonce.armextab.*)
-  } > FLASH
+  } > ITCM
 
   __exidx_start = .;
   .ARM.exidx :
   {
     *(.ARM.exidx* .gnu.linkonce.armexidx.*)
-  } > FLASH
+  } > ITCM
   __exidx_end = .;
 
   .copy.table :
@@ -162,7 +101,7 @@
     LONG (__data2_end__ - __data2_start__)
 */
     __copy_table_end__ = .;
-  } > FLASH
+  } > ITCM
 
   .zero.table :
   {
@@ -174,16 +113,15 @@
     LONG (__bss2_end__ - __bss2_start__)
 */
     __zero_table_end__ = .;
-  } > FLASH
+  } > DTCM
 
   /**
    * Location counter can end up 2byte aligned with narrow Thumb code but
    * __etext is assumed by startup code to be the LMA of a section in RAM
    * which must be 4byte aligned 
    */
-  __etext = ALIGN (4);
-
-  .data : AT (__etext)
+  
+  .data : 
   {
     __data_start__ = .;
     *(vtable)
@@ -216,7 +154,9 @@
     /* All data end */
     __data_end__ = .;
 
-  } > RAM
+  } > ITCM AT > DTCM
+
+  __etext = ADDR(.data);
 
   /*
    * Secondary data section, optional
@@ -249,7 +189,7 @@
     *(COMMON)
     . = ALIGN(4);
     __bss_end__ = .;
-  } > RAM AT > RAM
+  } > DTCM2
 
   /*
    * Secondary bss section, optional
@@ -274,23 +214,25 @@
   {
     . = ALIGN(8);
     __end__ = .;
-    __HeapBase = .;
     PROVIDE(end = .);
     . = . + __HEAP_SIZE;
     . = ALIGN(8);
     __HeapLimit = .;
-  } > RAM
+  } > DTCM2
 
-  .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) :
+  .stack (ORIGIN(DTCM2) + LENGTH(DTCM2) - __STACK_SIZE) (COPY) :
   {
     . = ALIGN(8);
     __StackLimit = .;
     . = . + __STACK_SIZE;
     . = ALIGN(8);
     __StackTop = .;
-  } > RAM
+  } > DTCM2
   PROVIDE(__stack = __StackTop);
 
-  /* Check if data + heap + stack exceeds RAM limit */
-  ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+  /* Check if data + heap + stack exceeds DTCM2 limit */
+  ASSERT(__StackLimit >= __HeapLimit, "region DTCM2 overflowed with stack")
 }
+
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/mem_ARMCM0.h b/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/mem_ARMCM0.h
index b25b618..84a1ff1 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/mem_ARMCM0.h
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM0/LinkScripts/GCC/mem_ARMCM0.h
@@ -1,5 +1,5 @@
 /**************************************************************************//**
- * @file     mem_ARMCM0.h
+ * @file     mem_ARMCM7.h
  * @brief    Memory base and size definitions (used in scatter file)
  * @version  V1.1.0
  * @date     15. May 2019
@@ -25,8 +25,8 @@
  * limitations under the License.
  */
 
-#ifndef __MEM_ARMCM0_H
-#define __MEM_ARMCM0_H
+#ifndef __MEM_ARMCM7_H
+#define __MEM_ARMCM7_H
 
 
 
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM0/Startup/AC6/startup_ARMCM0.c b/CMSIS/DSP/Platforms/FVP/ARMCM0/Startup/AC6/startup_ARMCM0.c
new file mode 100755
index 0000000..ead292d
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM0/Startup/AC6/startup_ARMCM0.c
@@ -0,0 +1,151 @@
+/******************************************************************************
+ * @file     startup_ARMCM0.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M0 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+#if defined (ARMCM0)
+  #include "ARMCM0.h"
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[48];
+       const pFunc __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10..31 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+  SystemInit();                             /* CMSIS System Initialization */
+  __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
+}
+
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wmissing-noreturn"
+#endif
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic pop
+#endif
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM0/Startup/GCC/startup_ARMCM0.c b/CMSIS/DSP/Platforms/FVP/ARMCM0/Startup/GCC/startup_ARMCM0.c
new file mode 100755
index 0000000..959ea21
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM0/Startup/GCC/startup_ARMCM0.c
@@ -0,0 +1,161 @@
+/******************************************************************************
+ * @file     startup_ARMCM7.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M7 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+
+#if defined (ARMCM0)
+  #include "ARMCM0.h"
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[240];
+       const pFunc __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 223 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+#define SERIAL_BASE_ADDRESS (0xA8000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+
+
+
+
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+   SystemInit();                             /* CMSIS System Initialization */
+
+  
+  __PROGRAM_START();    
+}
+
+
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Platforms/FVP/ARMCM0/system_ARMCM0.c
index 66a364c..fabfc11 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMCM0/system_ARMCM0.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM0/system_ARMCM0.c
@@ -23,6 +23,22 @@
  * limitations under the License.
  */
 
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
+
 #include "ARMCM0.h"
 
 /*----------------------------------------------------------------------------
@@ -32,6 +48,22 @@
 
 #define  SYSTEM_CLOCK    (XTAL / 2U)
 
+#define SERIAL_BASE_ADDRESS (0x40000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+#define SOFTWARE_MARK  *((volatile unsigned *) (SERIAL_BASE_ADDRESS+4))
+
+void start_ipss_measurement()
+{
+  SOFTWARE_MARK = 1;
+}
+
+void stop_ipss_measurement()
+{
+  SOFTWARE_MARK = 0;
+}
 
 /*----------------------------------------------------------------------------
   System Core Clock Variable
@@ -54,3 +86,459 @@
 {
   SystemCoreClock = SYSTEM_CLOCK;
 }
+
+#if 0
+int stdout_putchar(char txchar)
+{
+    SERIAL_DATA = txchar;   
+    return(txchar);                  
+}
+
+int stderr_putchar(char txchar)
+{
+    return stdout_putchar(txchar);
+}
+
+void ttywrch (int ch)
+{
+    stdout_putchar(ch);
+}
+
+#if __IS_COMPILER_ARM_COMPILER_6__
+__asm(".global __use_no_semihosting\n\t");
+#   ifndef __MICROLIB
+__asm(".global __ARM_use_no_argv\n\t");
+#   endif
+#endif
+
+
+/**
+   Writes the character specified by c (converted to an unsigned char) to
+   the output stream pointed to by stream, at the position indicated by the
+   associated file position indicator (if defined), and advances the
+   indicator appropriately. If the file position indicator is not defined,
+   the character is appended to the output stream.
+ 
+  \param[in] c       Character
+  \param[in] stream  Stream handle
+ 
+  \return    The character written. If a write error occurs, the error
+             indicator is set and fputc returns EOF.
+*/
+__attribute__((weak))
+int fputc (int c, FILE * stream) 
+{
+    if (stream == &__stdout) {
+        return (stdout_putchar(c));
+    }
+
+    if (stream == &__stderr) {
+        return (stderr_putchar(c));
+    }
+
+    return (-1);
+}
+
+#ifndef GCCCOMPILER
+/* IO device file handles. */
+#define FH_STDIN    0x8001
+#define FH_STDOUT   0x8002
+#define FH_STDERR   0x8003
+
+const char __stdin_name[]  = ":STDIN";
+const char __stdout_name[] = ":STDOUT";
+const char __stderr_name[] = ":STDERR";
+
+#define RETARGET_SYS        1
+#define RTE_Compiler_IO_STDOUT  1
+#define RTE_Compiler_IO_STDERR  1
+/**
+  Defined in rt_sys.h, this function opens a file.
+ 
+  The _sys_open() function is required by fopen() and freopen(). These
+  functions in turn are required if any file input/output function is to
+  be used.
+  The openmode parameter is a bitmap whose bits mostly correspond directly to
+  the ISO mode specification. Target-dependent extensions are possible, but
+  freopen() must also be extended.
+ 
+  \param[in] name     File name
+  \param[in] openmode Mode specification bitmap
+ 
+  \return    The return value is ?1 if an error occurs.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+FILEHANDLE _sys_open (const char *name, int openmode) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)openmode;
+#endif
+ 
+  if (name == NULL) {
+    return (-1);
+  }
+ 
+  if (name[0] == ':') {
+    if (strcmp(name, ":STDIN") == 0) {
+      return (FH_STDIN);
+    }
+    if (strcmp(name, ":STDOUT") == 0) {
+      return (FH_STDOUT);
+    }
+    if (strcmp(name, ":STDERR") == 0) {
+      return (FH_STDERR);
+    }
+    return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_open(name, openmode));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function closes a file previously opened
+  with _sys_open().
+  
+  This function must be defined if any input/output function is to be used.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is 0 if successful. A nonzero value indicates
+             an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_close (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_close(fh));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function writes the contents of a buffer to a file
+  previously opened with _sys_open().
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return    The return value is either:
+             - a positive number representing the number of characters not
+               written (so any nonzero return value denotes a failure of
+               some sort)
+             - a negative number indicating an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_write (FILEHANDLE fh, const uint8_t *buf, uint32_t len, int mode) {
+#if (defined(RTE_Compiler_IO_STDOUT) || defined(RTE_Compiler_IO_STDERR))
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+#ifdef RTE_Compiler_IO_STDOUT
+      for (; len; len--) {
+        ch = *buf++;
+
+        stdout_putchar(ch);
+      }
+#endif
+      return (0);
+    case FH_STDERR:
+#ifdef RTE_Compiler_IO_STDERR
+      for (; len; len--) {
+        ch = *buf++;
+
+        stderr_putchar(ch);
+      }
+#endif
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_write(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function reads the contents of a file into a buffer.
+ 
+  Reading up to and including the last byte of data does not turn on the EOF
+  indicator. The EOF indicator is only reached when an attempt is made to read
+  beyond the last byte of data. The target-independent code is capable of
+  handling:
+    - the EOF indicator being returned in the same read as the remaining bytes
+      of data that precede the EOF
+    - the EOF indicator being returned on its own after the remaining bytes of
+      data have been returned in a previous read.
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return     The return value is one of the following:
+              - The number of bytes not read (that is, len - result number of
+                bytes were read).
+              - An error indication.
+              - An EOF indicator. The EOF indication involves the setting of
+                0x80000000 in the normal result.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_read (FILEHANDLE fh, uint8_t *buf, uint32_t len, int mode) {
+#ifdef RTE_Compiler_IO_STDIN
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+#ifdef RTE_Compiler_IO_STDIN
+      ch = stdin_getchar();
+      if (ch < 0) {
+        return ((int)(len | 0x80000000U));
+      }
+      *buf++ = (uint8_t)ch;
+#if (STDIN_ECHO != 0)
+      stdout_putchar(ch);
+#endif
+      len--;
+      return ((int)(len));
+#else
+      return ((int)(len | 0x80000000U));
+#endif
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_read(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+
+ 
+ 
+/**
+  Defined in rt_sys.h, this function determines if a file handle identifies
+  a terminal.
+ 
+  When a file is connected to a terminal device, this function is used to
+  provide unbuffered behavior by default (in the absence of a call to
+  set(v)buf) and to prohibit seeking.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is one of the following values:
+             - 0:     There is no interactive device.
+             - 1:     There is an interactive device.
+             - other: An error occurred.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_istty (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (1);
+    case FH_STDOUT:
+      return (1);
+    case FH_STDERR:
+      return (1);
+  }
+ 
+  return (0);
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function puts the file pointer at offset pos from
+  the beginning of the file.
+ 
+  This function sets the current read or write position to the new location pos
+  relative to the start of the current file fh.
+ 
+  \param[in] fh  File handle
+  \param[in] pos File pointer offset
+ 
+  \return    The result is:
+             - non-negative if no error occurs
+             - negative if an error occurs
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_seek (FILEHANDLE fh, long pos) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)pos;
+#endif
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_seek(fh, (uint32_t)pos));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function returns the current length of a file.
+ 
+  This function is used by _sys_seek() to convert an offset relative to the
+  end of a file into an offset relative to the beginning of the file.
+  You do not have to define _sys_flen() if you do not intend to use fseek().
+  If you retarget at system _sys_*() level, you must supply _sys_flen(),
+  even if the underlying system directly supports seeking relative to the
+  end of a file.
+ 
+  \param[in] fh File handle
+ 
+  \return    This function returns the current length of the file fh,
+             or a negative error indicator.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+long _sys_flen (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_flen(fh));
+#endif
+#else
+  return (0);
+#endif
+}
+#endif
+
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
+
+#endif
+ 
+#define log_str(...)                                    \
+    do {                                                \
+        const char *pchSrc = __VA_ARGS__;               \
+        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
+        do {                                            \
+            stdout_putchar(*pchSrc++);                  \
+        } while(--hwSize);                              \
+    } while(0)
+
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#else
+void _sys_exit(int n)
+{
+    (void)n;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#endif 
+
+extern void ttywrch (int ch);
+__attribute__((weak))
+void _ttywrch (int ch) 
+{
+    ttywrch(ch);
+}
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct
index 6f8695c..23dcebf 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct
@@ -1,4 +1,4 @@
-#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m7 -xc
+#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m33 -xc
 ; command above MUST be in first line (no comment above!)
 
 /*
@@ -7,69 +7,29 @@
 
 #include "mem_ARMCM33.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     0x00100000
-
-/*--------------------- 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
 
+LOAD_REGION 0x0
+{
+    CODE +0 0x80000
+    {
+        *.o (RESET, +First)
+        * (InRoot$$$Sections)
+        * (+RO-CODE)                                
+    }
 
-/*----------------------------------------------------------------------------
-  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 */
+   
+    DATA 0x20000000 NOCOMPRESS 0x60000
+    {
+    * (+RO-DATA)
+    * (+RW,+ZI)                         
+    }
 
+    ARM_LIB_STACK 0x20062000 ALIGN 64 EMPTY -0x00002000 
+    {}
+    ARM_LIB_HEAP  0x20062000 ALIGN 64 EMPTY 0x00050000 
+    {}
 
-/*----------------------------------------------------------------------------
-  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/ARMCM33/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/GCC/lnk.ld
new file mode 100755
index 0000000..360dda2
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/GCC/lnk.ld
@@ -0,0 +1,241 @@
+/******************************************************************************
+ * @file     gcc_arm.ld
+ * @brief    GNU Linker Script for Cortex-M based device
+ * @version  V2.0.0
+ * @date     21. May 2019
+ ******************************************************************************/
+/*
+ * 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.
+ */
+#include "mem_ARMCM33.h" 
+
+__STACK_SIZE = 0x2000;
+__HEAP_SIZE  = 0x5000;
+
+
+MEMORY
+{
+  ITCM (rx)     : ORIGIN = 0x00000000, LENGTH = 512K
+  RAM (xrw)    : ORIGIN = 0x20000000, LENGTH = 512K
+}
+
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+  .text :
+  {
+    KEEP(*(.vectors))
+    *(.text*)
+
+    KEEP(*(.init))
+    KEEP(*(.fini))
+
+    /* .ctors */
+    *crtbegin.o(.ctors)
+    *crtbegin?.o(.ctors)
+    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+    *(SORT(.ctors.*))
+    *(.ctors)
+
+    /* .dtors */
+    *crtbegin.o(.dtors)
+    *crtbegin?.o(.dtors)
+    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+    *(SORT(.dtors.*))
+    *(.dtors)
+
+    *(.rodata*)
+
+    KEEP(*(.eh_frame*))
+  } > ITCM
+
+  /*
+   * SG veneers:
+   * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address
+   * must be set, either with the command line option ‘--section-start’ or in a linker script,
+   * to indicate where to place these veneers in memory.
+   */
+/*
+  .gnu.sgstubs :
+  {
+    . = ALIGN(32);
+  } > FLASH
+*/
+  .ARM.extab :
+  {
+    *(.ARM.extab* .gnu.linkonce.armextab.*)
+  } > ITCM
+
+  __exidx_start = .;
+  .ARM.exidx :
+  {
+    *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+  } > ITCM
+  __exidx_end = .;
+
+  .copy.table :
+  {
+    . = ALIGN(4);
+    __copy_table_start__ = .;
+    LONG (__etext)
+    LONG (__data_start__)
+    LONG (__data_end__ - __data_start__)
+    /* Add each additional data section here */
+/*
+    LONG (__etext2)
+    LONG (__data2_start__)
+    LONG (__data2_end__ - __data2_start__)
+*/
+    __copy_table_end__ = .;
+  } > ITCM
+
+  .zero.table :
+  {
+    . = ALIGN(4);
+    __zero_table_start__ = .;
+    /* Add each additional bss section here */
+/*
+    LONG (__bss2_start__)
+    LONG (__bss2_end__ - __bss2_start__)
+*/
+    __zero_table_end__ = .;
+  } > RAM
+
+  /**
+   * Location counter can end up 2byte aligned with narrow Thumb code but
+   * __etext is assumed by startup code to be the LMA of a section in RAM
+   * which must be 4byte aligned 
+   */
+  __etext = ALIGN (4);
+
+  .data : AT (__etext)
+  {
+    __data_start__ = .;
+    *(vtable)
+    *(.data)
+    *(.data.*)
+
+    . = ALIGN(4);
+    /* preinit data */
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP(*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+
+    . = ALIGN(4);
+    /* init data */
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP(*(SORT(.init_array.*)))
+    KEEP(*(.init_array))
+    PROVIDE_HIDDEN (__init_array_end = .);
+
+
+    . = ALIGN(4);
+    /* finit data */
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP(*(SORT(.fini_array.*)))
+    KEEP(*(.fini_array))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+
+    KEEP(*(.jcr*))
+    . = ALIGN(4);
+    /* All data end */
+    __data_end__ = .;
+
+  } > RAM
+
+
+  /*
+   * Secondary data section, optional
+   *
+   * Remember to add each additional data section
+   * to the .copy.table above to asure proper
+   * initialization during startup.
+   */
+/*
+  __etext2 = ALIGN (4);
+
+  .data2 : AT (__etext2)
+  {
+    . = ALIGN(4);
+    __data2_start__ = .;
+    *(.data2)
+    *(.data2.*)
+    . = ALIGN(4);
+    __data2_end__ = .;
+
+  } > RAM2
+*/
+
+  .bss :
+  {
+    . = ALIGN(4);
+    __bss_start__ = .;
+    *(.bss)
+    *(.bss.*)
+    *(COMMON)
+    . = ALIGN(4);
+    __bss_end__ = .;
+  } > RAM AT > RAM
+
+  /*
+   * Secondary bss section, optional
+   *
+   * Remember to add each additional bss section
+   * to the .zero.table above to asure proper
+   * initialization during startup.
+   */
+/*
+  .bss2 :
+  {
+    . = ALIGN(4);
+    __bss2_start__ = .;
+    *(.bss2)
+    *(.bss2.*)
+    . = ALIGN(4);
+    __bss2_end__ = .;
+  } > RAM2 AT > RAM2
+*/
+
+  .heap (COPY) :
+  {
+    . = ALIGN(8);
+    __end__ = .;
+    __HeapBase = .;
+    PROVIDE(end = .);
+    . = . + __HEAP_SIZE;
+    . = ALIGN(8);
+    __HeapLimit = .;
+  } > RAM
+
+
+  .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) :
+  {
+    . = ALIGN(8);
+    __StackLimit = .;
+    . = . + __STACK_SIZE;
+    . = ALIGN(8);
+    __StackTop = .;
+  } > RAM
+  PROVIDE(__stack = __StackTop);
+
+  /* Check if data + heap + stack exceeds RAM limit */
+  ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+}
+
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/GCC/mem_ARMCM33.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/GCC/mem_ARMCM33.h
new file mode 100755
index 0000000..84a1ff1
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/GCC/mem_ARMCM33.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/ARMCM33/Startup/AC6/startup_ARMCM33.c b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/AC6/startup_ARMCM33.c
new file mode 100755
index 0000000..6e0e96f
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/AC6/startup_ARMCM33.c
@@ -0,0 +1,189 @@
+/******************************************************************************
+ * @file     startup_ARMCM33.c
+ * @brief    CMSIS Core Device Startup File for Cortex-M33 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+#if defined (ARMCM33)
+  #include "ARMCM33.h"
+#elif defined (ARMCM33_TZ)
+  #include "ARMCM33_TZ.h"
+#elif defined (ARMCM33_DSP_FP)
+  #include "ARMCM33_DSP_FP.h"
+#elif defined (ARMCM33_DSP_FP_TZ)
+  #include "ARMCM33_DSP_FP_TZ.h"
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+extern uint32_t __STACK_LIMIT;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+//void SecureFault_Handler    (void) __attribute__ ((weak, alias("Default_Handler")));
+void SecureFault_Handler    (void) __attribute__ ((weak));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[496];
+       const pFunc __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  SecureFault_Handler,                      /*  -9 Secure Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 480 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+#define SERIAL_BASE_ADDRESS (0x70000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+  __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
+
+  SystemInit();                             /* CMSIS System Initialization */
+  __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
+}
+
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wmissing-noreturn"
+#endif
+
+extern void __cxa_get_globals(void);
+extern void __ARM_exceptions_init(void)
+{
+    __cxa_get_globals();
+}
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+SERIAL_DATA='h';
+SERIAL_DATA='\n';
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void SecureFault_Handler(void)
+{
+SERIAL_DATA='s';
+SERIAL_DATA='\n';
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic pop
+#endif
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/GCC/startup_ARMCM33.c b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/GCC/startup_ARMCM33.c
new file mode 100755
index 0000000..69c4cc6
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/GCC/startup_ARMCM33.c
@@ -0,0 +1,176 @@
+/******************************************************************************
+ * @file     startup_ARMCM7.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M7 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+#include <stdio.h>
+
+#if defined (ARMCM33)
+  #include "ARMCM33.h"
+#elif defined (ARMCM33_TZ)
+  #include "ARMCM33_TZ.h"
+
+  #if defined (__ARM_FEATURE_CMSE) &&  (__ARM_FEATURE_CMSE == 3U)
+    #include "partition_ARMCM33.h"
+  #endif
+#elif defined (ARMCM33_DSP_FP)
+  #include "ARMCM33_DSP_FP.h"
+#elif defined (ARMCM33_DSP_FP_TZ)
+  #include "ARMCM33_DSP_FP_TZ.h"
+
+  #if defined (__ARM_FEATURE_CMSE) &&  (__ARM_FEATURE_CMSE == 3U)
+    #include "partition_ARMCM33.h"
+  #endif
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[240];
+       const pFunc __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 223 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+#define SERIAL_BASE_ADDRESS (0x70000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+extern const char* __StackLimit;
+
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+
+  __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
+
+  SystemInit();                             /* CMSIS System Initialization */
+
+
+  __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
+}
+
+
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/GCC/support.c b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/GCC/support.c
new file mode 100755
index 0000000..a6e8b12
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/GCC/support.c
@@ -0,0 +1,42 @@
+
+#ifdef   __cplusplus
+extern "C"
+{
+#endif
+    
+char * _sbrk(int incr);
+
+void __malloc_lock() ;
+void __malloc_unlock();
+
+char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+#ifdef   __cplusplus
+}
+#endif
+
+static int totalBytesProvidedBySBRK = 0;
+
+#define SERIAL_BASE_ADDRESS (0x70000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+
+//! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
+char * sbrk(unsigned int incr) {
+    static  char *currentHeapEnd = &__HeapBase;
+    char *previousHeapEnd = currentHeapEnd;
+    if (currentHeapEnd + incr > &__HeapLimit) {
+        return (char *)-1; // the malloc-family routine that called sbrk will return 0
+    }
+    currentHeapEnd += incr;
+    
+    totalBytesProvidedBySBRK += incr;
+    
+    return (char *) previousHeapEnd;
+}
+//! Synonym for sbrk.
+char * _sbrk(int incr) { return sbrk(incr); };
+
+void __malloc_lock()     {       };
+void __malloc_unlock()   {  };
\ No newline at end of file
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c b/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c
index a6f4c88..ea64ed5 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c
@@ -23,6 +23,22 @@
  * limitations under the License.
  */
 
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
+
 #if defined (ARMCM33)
   #include "ARMCM33.h"
 #elif defined (ARMCM33_TZ)
@@ -43,13 +59,120 @@
   #error device not specified!
 #endif
 
+
+/* ================================================================================ */
+/* ================             Peripheral declaration             ================ */
+/* ================================================================================ */
+
+#define SERIAL_BASE_ADDRESS (0x70000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+#define SOFTWARE_MARK  *((volatile unsigned *) (SERIAL_BASE_ADDRESS+4))
+
+void start_ipss_measurement()
+{
+  SOFTWARE_MARK = 1;
+}
+
+void stop_ipss_measurement()
+{
+  SOFTWARE_MARK = 0;
+}
+
+#include "cmsis_compiler.h"
+
+//! \name The macros to identify the compiler
+//! @{
+
+//! \note for IAR
+#ifdef __IS_COMPILER_IAR__
+#   undef __IS_COMPILER_IAR__
+#endif
+#if defined(__IAR_SYSTEMS_ICC__)
+#   define __IS_COMPILER_IAR__                 1
+#endif
+
+
+
+
+//! \note for arm compiler 5
+#ifdef __IS_COMPILER_ARM_COMPILER_5__
+#   undef __IS_COMPILER_ARM_COMPILER_5__
+#endif
+#if ((__ARMCC_VERSION >= 5000000) && (__ARMCC_VERSION < 6000000))
+#   define __IS_COMPILER_ARM_COMPILER_5__      1
+#endif
+//! @}
+
+//! \note for arm compiler 6
+#ifdef __IS_COMPILER_ARM_COMPILER_6__
+#   undef __IS_COMPILER_ARM_COMPILER_6__
+#endif
+#if ((__ARMCC_VERSION >= 6000000) && (__ARMCC_VERSION < 7000000))
+#   define __IS_COMPILER_ARM_COMPILER_6__      1
+#endif
+
+#ifdef __IS_COMPILER_LLVM__
+#   undef  __IS_COMPILER_LLVM__
+#endif
+#if defined(__clang__) && !__IS_COMPILER_ARM_COMPILER_6__
+#   define __IS_COMPILER_LLVM__                1
+#else
+//! \note for gcc
+#ifdef __IS_COMPILER_GCC__
+#   undef __IS_COMPILER_GCC__
+#endif
+#if defined(__GNUC__) && !(__IS_COMPILER_ARM_COMPILER_6__ || __IS_COMPILER_LLVM__)
+#   define __IS_COMPILER_GCC__                 1
+#endif
+//! @}
+#endif
+//! @}
+
+#define SAFE_ATOM_CODE(...)             \
+{                                       \
+    uint32_t wOrig = __disable_irq();   \
+    __VA_ARGS__;                        \
+    __set_PRIMASK(wOrig);               \
+}
+
+/* IO definitions (access restrictions to peripheral registers) */
+/**
+    \defgroup CMSIS_glob_defs CMSIS Global Defines
+
+    <strong>IO Type Qualifiers</strong> are used
+    \li to specify the access to peripheral variables.
+    \li for automatic generation of peripheral register debug information.
+*/
+#ifdef __cplusplus
+  #define   __I     volatile             /*!< Defines 'read only' permissions */
+#else
+  #define   __I     volatile const       /*!< Defines 'read only' permissions */
+#endif
+#define     __O     volatile             /*!< Defines 'write only' permissions */
+#define     __IO    volatile             /*!< Defines 'read / write' permissions */
+
+/* following defines should be used for structure members */
+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */
+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
+
+/*@} end of group Cortex_M */
+
 /*----------------------------------------------------------------------------
   Define clocks
  *----------------------------------------------------------------------------*/
-#define  XTAL            (50000000UL)     /* Oscillator frequency */
+#define  XTAL            ( 5000000UL)      /* Oscillator frequency */
 
-#define  SYSTEM_CLOCK    (XTAL / 2U)
+#define  SYSTEM_CLOCK    (5U * XTAL)
 
+#define DEBUG_DEMCR  (*((unsigned int *)0xE000EDFC))
+#define DEBUG_TRCENA (1<<24) //Global debug enable bit
+
+#define CCR      (*((volatile unsigned int *)0xE000ED14))
+#define CCR_DL   (1 << 19)
 
 /*----------------------------------------------------------------------------
   Externals
@@ -61,7 +184,7 @@
 /*----------------------------------------------------------------------------
   System Core Clock Variable
  *----------------------------------------------------------------------------*/
-uint32_t SystemCoreClock = SYSTEM_CLOCK;  /* System Core Clock Frequency */
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
 
 
 /*----------------------------------------------------------------------------
@@ -73,6 +196,99 @@
 }
 
 /*----------------------------------------------------------------------------
+  UART functions
+ *----------------------------------------------------------------------------*/
+ 
+/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/
+typedef struct
+{
+  __IOM  uint32_t  DATA;                     /* Offset: 0x000 (R/W) Data Register    */
+  __IOM  uint32_t  STATE;                    /* Offset: 0x004 (R/W) Status Register  */
+  __IOM  uint32_t  CTRL;                     /* Offset: 0x008 (R/W) Control Register */
+  union {
+    __IM   uint32_t  INTSTATUS;              /* Offset: 0x00C (R/ ) Interrupt Status Register */
+    __OM   uint32_t  INTCLEAR;               /* Offset: 0x00C ( /W) Interrupt Clear Register  */
+    };
+  __IOM  uint32_t  BAUDDIV;                  /* Offset: 0x010 (R/W) Baudrate Divider Register */
+
+} CMSDK_UART_TypeDef;
+
+/* CMSDK_UART DATA Register Definitions */
+#define CMSDK_UART_DATA_Pos               0                                                  /* CMSDK_UART_DATA_Pos: DATA Position */
+#define CMSDK_UART_DATA_Msk              (0xFFUL /*<< CMSDK_UART_DATA_Pos*/)                 /* CMSDK_UART DATA: DATA Mask */
+
+/* CMSDK_UART STATE Register Definitions */
+#define CMSDK_UART_STATE_RXOR_Pos         3                                                  /* CMSDK_UART STATE: RXOR Position */
+#define CMSDK_UART_STATE_RXOR_Msk        (0x1UL << CMSDK_UART_STATE_RXOR_Pos)                /* CMSDK_UART STATE: RXOR Mask */
+
+#define CMSDK_UART_STATE_TXOR_Pos         2                                                  /* CMSDK_UART STATE: TXOR Position */
+#define CMSDK_UART_STATE_TXOR_Msk        (0x1UL << CMSDK_UART_STATE_TXOR_Pos)                /* CMSDK_UART STATE: TXOR Mask */
+
+#define CMSDK_UART_STATE_RXBF_Pos         1                                                  /* CMSDK_UART STATE: RXBF Position */
+#define CMSDK_UART_STATE_RXBF_Msk        (0x1UL << CMSDK_UART_STATE_RXBF_Pos)                /* CMSDK_UART STATE: RXBF Mask */
+
+#define CMSDK_UART_STATE_TXBF_Pos         0                                                  /* CMSDK_UART STATE: TXBF Position */
+#define CMSDK_UART_STATE_TXBF_Msk        (0x1UL /*<< CMSDK_UART_STATE_TXBF_Pos*/)            /* CMSDK_UART STATE: TXBF Mask */
+
+/* CMSDK_UART CTRL Register Definitions */
+#define CMSDK_UART_CTRL_HSTM_Pos          6                                                  /* CMSDK_UART CTRL: HSTM Position */
+#define CMSDK_UART_CTRL_HSTM_Msk         (0x01UL << CMSDK_UART_CTRL_HSTM_Pos)                /* CMSDK_UART CTRL: HSTM Mask */
+
+#define CMSDK_UART_CTRL_RXORIRQEN_Pos     5                                                  /* CMSDK_UART CTRL: RXORIRQEN Position */
+#define CMSDK_UART_CTRL_RXORIRQEN_Msk    (0x01UL << CMSDK_UART_CTRL_RXORIRQEN_Pos)           /* CMSDK_UART CTRL: RXORIRQEN Mask */
+
+#define CMSDK_UART_CTRL_TXORIRQEN_Pos     4                                                  /* CMSDK_UART CTRL: TXORIRQEN Position */
+#define CMSDK_UART_CTRL_TXORIRQEN_Msk    (0x01UL << CMSDK_UART_CTRL_TXORIRQEN_Pos)           /* CMSDK_UART CTRL: TXORIRQEN Mask */
+
+#define CMSDK_UART_CTRL_RXIRQEN_Pos       3                                                  /* CMSDK_UART CTRL: RXIRQEN Position */
+#define CMSDK_UART_CTRL_RXIRQEN_Msk      (0x01UL << CMSDK_UART_CTRL_RXIRQEN_Pos)             /* CMSDK_UART CTRL: RXIRQEN Mask */
+
+#define CMSDK_UART_CTRL_TXIRQEN_Pos       2                                                  /* CMSDK_UART CTRL: TXIRQEN Position */
+#define CMSDK_UART_CTRL_TXIRQEN_Msk      (0x01UL << CMSDK_UART_CTRL_TXIRQEN_Pos)             /* CMSDK_UART CTRL: TXIRQEN Mask */
+
+#define CMSDK_UART_CTRL_RXEN_Pos          1                                                  /* CMSDK_UART CTRL: RXEN Position */
+#define CMSDK_UART_CTRL_RXEN_Msk         (0x01UL << CMSDK_UART_CTRL_RXEN_Pos)                /* CMSDK_UART CTRL: RXEN Mask */
+
+#define CMSDK_UART_CTRL_TXEN_Pos          0                                                  /* CMSDK_UART CTRL: TXEN Position */
+#define CMSDK_UART_CTRL_TXEN_Msk         (0x01UL /*<< CMSDK_UART_CTRL_TXEN_Pos*/)            /* CMSDK_UART CTRL: TXEN Mask */
+
+#define CMSDK_UART_INTSTATUS_RXORIRQ_Pos  3                                                  /* CMSDK_UART CTRL: RXORIRQ Position */
+#define CMSDK_UART_CTRL_RXORIRQ_Msk      (0x01UL << CMSDK_UART_INTSTATUS_RXORIRQ_Pos)        /* CMSDK_UART CTRL: RXORIRQ Mask */
+
+#define CMSDK_UART_CTRL_TXORIRQ_Pos       2                                                  /* CMSDK_UART CTRL: TXORIRQ Position */
+#define CMSDK_UART_CTRL_TXORIRQ_Msk      (0x01UL << CMSDK_UART_CTRL_TXORIRQ_Pos)             /* CMSDK_UART CTRL: TXORIRQ Mask */
+
+#define CMSDK_UART_CTRL_RXIRQ_Pos         1                                                  /* CMSDK_UART CTRL: RXIRQ Position */
+#define CMSDK_UART_CTRL_RXIRQ_Msk        (0x01UL << CMSDK_UART_CTRL_RXIRQ_Pos)               /* CMSDK_UART CTRL: RXIRQ Mask */
+
+#define CMSDK_UART_CTRL_TXIRQ_Pos         0                                                  /* CMSDK_UART CTRL: TXIRQ Position */
+#define CMSDK_UART_CTRL_TXIRQ_Msk        (0x01UL /*<< CMSDK_UART_CTRL_TXIRQ_Pos*/)           /* CMSDK_UART CTRL: TXIRQ Mask */
+
+/* CMSDK_UART BAUDDIV Register Definitions */
+#define CMSDK_UART_BAUDDIV_Pos            0                                                  /* CMSDK_UART BAUDDIV: BAUDDIV Position */
+#define CMSDK_UART_BAUDDIV_Msk           (0xFFFFFUL /*<< CMSDK_UART_BAUDDIV_Pos*/)           /* CMSDK_UART BAUDDIV: BAUDDIV Mask */
+
+
+
+
+
+int stdout_putchar(char txchar)
+{
+    SERIAL_DATA = txchar;    
+    return(txchar);                 
+}
+
+int stderr_putchar(char txchar)
+{
+    return stdout_putchar(txchar);
+}
+
+void ttywrch (int ch)
+{
+  stdout_putchar(ch);
+}
+
+/*----------------------------------------------------------------------------
   System initialization function
  *----------------------------------------------------------------------------*/
 void SystemInit (void)
@@ -97,3 +313,448 @@
 
   SystemCoreClock = SYSTEM_CLOCK;
 }
+
+__attribute__((constructor(255)))
+void platform_init(void)
+{
+    printf("\n_[TEST START]____________________________________________________\n");
+}
+
+
+#if __IS_COMPILER_ARM_COMPILER_6__
+__asm(".global __use_no_semihosting\n\t");
+#   ifndef __MICROLIB
+__asm(".global __ARM_use_no_argv\n\t");
+#   endif
+#endif
+
+/**
+   Writes the character specified by c (converted to an unsigned char) to
+   the output stream pointed to by stream, at the position indicated by the
+   associated file position indicator (if defined), and advances the
+   indicator appropriately. If the file position indicator is not defined,
+   the character is appended to the output stream.
+ 
+  \param[in] c       Character
+  \param[in] stream  Stream handle
+ 
+  \return    The character written. If a write error occurs, the error
+             indicator is set and fputc returns EOF.
+*/
+__attribute__((weak))
+int fputc (int c, FILE * stream) 
+{
+    if (stream == &__stdout) {
+        return (stdout_putchar(c));
+    }
+
+    if (stream == &__stderr) {
+        return (stderr_putchar(c));
+    }
+
+    return (-1);
+}
+
+#ifndef GCCCOMPILER
+/* IO device file handles. */
+#define FH_STDIN    0x8001
+#define FH_STDOUT   0x8002
+#define FH_STDERR   0x8003
+
+const char __stdin_name[]  = ":STDIN";
+const char __stdout_name[] = ":STDOUT";
+const char __stderr_name[] = ":STDERR";
+
+#define RETARGET_SYS        1
+#define RTE_Compiler_IO_STDOUT  1
+#define RTE_Compiler_IO_STDERR  1
+/**
+  Defined in rt_sys.h, this function opens a file.
+ 
+  The _sys_open() function is required by fopen() and freopen(). These
+  functions in turn are required if any file input/output function is to
+  be used.
+  The openmode parameter is a bitmap whose bits mostly correspond directly to
+  the ISO mode specification. Target-dependent extensions are possible, but
+  freopen() must also be extended.
+ 
+  \param[in] name     File name
+  \param[in] openmode Mode specification bitmap
+ 
+  \return    The return value is ?1 if an error occurs.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+FILEHANDLE _sys_open (const char *name, int openmode) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)openmode;
+#endif
+ 
+  if (name == NULL) {
+    return (-1);
+  }
+ 
+  if (name[0] == ':') {
+    if (strcmp(name, ":STDIN") == 0) {
+      return (FH_STDIN);
+    }
+    if (strcmp(name, ":STDOUT") == 0) {
+      return (FH_STDOUT);
+    }
+    if (strcmp(name, ":STDERR") == 0) {
+      return (FH_STDERR);
+    }
+    return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_open(name, openmode));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function closes a file previously opened
+  with _sys_open().
+  
+  This function must be defined if any input/output function is to be used.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is 0 if successful. A nonzero value indicates
+             an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_close (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_close(fh));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function writes the contents of a buffer to a file
+  previously opened with _sys_open().
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return    The return value is either:
+             - a positive number representing the number of characters not
+               written (so any nonzero return value denotes a failure of
+               some sort)
+             - a negative number indicating an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_write (FILEHANDLE fh, const uint8_t *buf, uint32_t len, int mode) {
+#if (defined(RTE_Compiler_IO_STDOUT) || defined(RTE_Compiler_IO_STDERR))
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+#ifdef RTE_Compiler_IO_STDOUT
+      for (; len; len--) {
+        ch = *buf++;
+
+        stdout_putchar(ch);
+      }
+#endif
+      return (0);
+    case FH_STDERR:
+#ifdef RTE_Compiler_IO_STDERR
+      for (; len; len--) {
+        ch = *buf++;
+
+        stderr_putchar(ch);
+      }
+#endif
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_write(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function reads the contents of a file into a buffer.
+ 
+  Reading up to and including the last byte of data does not turn on the EOF
+  indicator. The EOF indicator is only reached when an attempt is made to read
+  beyond the last byte of data. The target-independent code is capable of
+  handling:
+    - the EOF indicator being returned in the same read as the remaining bytes
+      of data that precede the EOF
+    - the EOF indicator being returned on its own after the remaining bytes of
+      data have been returned in a previous read.
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return     The return value is one of the following:
+              - The number of bytes not read (that is, len - result number of
+                bytes were read).
+              - An error indication.
+              - An EOF indicator. The EOF indication involves the setting of
+                0x80000000 in the normal result.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_read (FILEHANDLE fh, uint8_t *buf, uint32_t len, int mode) {
+#ifdef RTE_Compiler_IO_STDIN
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+#ifdef RTE_Compiler_IO_STDIN
+      ch = stdin_getchar();
+      if (ch < 0) {
+        return ((int)(len | 0x80000000U));
+      }
+      *buf++ = (uint8_t)ch;
+#if (STDIN_ECHO != 0)
+      stdout_putchar(ch);
+#endif
+      len--;
+      return ((int)(len));
+#else
+      return ((int)(len | 0x80000000U));
+#endif
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_read(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+
+ 
+ 
+/**
+  Defined in rt_sys.h, this function determines if a file handle identifies
+  a terminal.
+ 
+  When a file is connected to a terminal device, this function is used to
+  provide unbuffered behavior by default (in the absence of a call to
+  set(v)buf) and to prohibit seeking.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is one of the following values:
+             - 0:     There is no interactive device.
+             - 1:     There is an interactive device.
+             - other: An error occurred.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_istty (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (1);
+    case FH_STDOUT:
+      return (1);
+    case FH_STDERR:
+      return (1);
+  }
+ 
+  return (0);
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function puts the file pointer at offset pos from
+  the beginning of the file.
+ 
+  This function sets the current read or write position to the new location pos
+  relative to the start of the current file fh.
+ 
+  \param[in] fh  File handle
+  \param[in] pos File pointer offset
+ 
+  \return    The result is:
+             - non-negative if no error occurs
+             - negative if an error occurs
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_seek (FILEHANDLE fh, long pos) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)pos;
+#endif
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_seek(fh, (uint32_t)pos));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function returns the current length of a file.
+ 
+  This function is used by _sys_seek() to convert an offset relative to the
+  end of a file into an offset relative to the beginning of the file.
+  You do not have to define _sys_flen() if you do not intend to use fseek().
+  If you retarget at system _sys_*() level, you must supply _sys_flen(),
+  even if the underlying system directly supports seeking relative to the
+  end of a file.
+ 
+  \param[in] fh File handle
+ 
+  \return    This function returns the current length of the file fh,
+             or a negative error indicator.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+long _sys_flen (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_flen(fh));
+#endif
+#else
+  return (0);
+#endif
+}
+#endif
+ 
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
+
+#endif
+
+#define log_str(...)                                \
+    do {                                                \
+        const char *pchSrc = __VA_ARGS__;               \
+        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
+        do {                                            \
+            stdout_putchar(*pchSrc++);                  \
+        } while(--hwSize);                              \
+    } while(0)
+
+
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    *((volatile unsigned *) (SERIAL_BASE_ADDRESS-0x10000)) = 0xa;
+    while(1);
+}
+#else
+void _sys_exit(int n)
+{
+    (void)n;
+  log_str("\n");
+  log_str("_[TEST COMPLETE]_________________________________________________\n");
+  log_str("\n\n");
+  *((volatile unsigned *) (SERIAL_BASE_ADDRESS-0x10000)) = 0xa;
+  while(1);
+}
+#endif
+
+extern void ttywrch (int ch);
+__attribute__((weak))
+void _ttywrch (int ch) 
+{
+    ttywrch(ch);
+}
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct
index 9952d51..7fd27d2 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct
@@ -7,69 +7,26 @@
 
 #include "mem_ARMCM4.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     0x00100000
+LOAD_REGION 0x0
+{
+    CODE +0 0x0007ffff
+    {
+        *.o (RESET, +First)
+        * (InRoot$$$Sections)
+        * (+RO-CODE)                             
+    }
 
-/*--------------------- 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
+    DATA 0x20000000 0x60000
+    {
+     * (+RO-DATA)   
+     * (+RW,+ZI)                         
+    }
 
-/*--------------------- 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
+    ARM_LIB_STACK 0x20062000 ALIGN 64 EMPTY -0x00002000  
+    {}
+    ARM_LIB_HEAP 0x20062000 ALIGN 64 EMPTY 0x0050000 
+    {}
 
-
-/*----------------------------------------------------------------------------
-  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/ARMCM4/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/GCC/lnk.ld
new file mode 100755
index 0000000..1908aba
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/GCC/lnk.ld
@@ -0,0 +1,240 @@
+/******************************************************************************
+ * @file     gcc_arm.ld
+ * @brief    GNU Linker Script for Cortex-M based device
+ * @version  V2.0.0
+ * @date     21. May 2019
+ ******************************************************************************/
+/*
+ * 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.
+ */
+#include "mem_ARMCM4.h" 
+
+__STACK_SIZE = 0x2000;
+__HEAP_SIZE  = 0x50000;
+
+MEMORY
+{
+  ITCM (rx)     : ORIGIN = 0x00000000, LENGTH = 512K
+  DTCM (xrw)    : ORIGIN = 0x20000000, LENGTH = 128K
+  DTCM2 (xrw)     : ORIGIN = 0x20020000, LENGTH = 384K
+}
+
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+  .text :
+  {
+    KEEP(*(.vectors))
+    *(.text*)
+
+    KEEP(*(.init))
+    KEEP(*(.fini))
+
+    /* .ctors */
+    *crtbegin.o(.ctors)
+    *crtbegin?.o(.ctors)
+    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+    *(SORT(.ctors.*))
+    *(.ctors)
+
+    /* .dtors */
+    *crtbegin.o(.dtors)
+    *crtbegin?.o(.dtors)
+    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+    *(SORT(.dtors.*))
+    *(.dtors)
+
+    *(.rodata*)
+
+    KEEP(*(.eh_frame*))
+  } > ITCM
+
+  /*
+   * SG veneers:
+   * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address
+   * must be set, either with the command line option ‘--section-start’ or in a linker script,
+   * to indicate where to place these veneers in memory.
+   */
+/*
+  .gnu.sgstubs :
+  {
+    . = ALIGN(32);
+  } > FLASH
+*/
+  .ARM.extab :
+  {
+    *(.ARM.extab* .gnu.linkonce.armextab.*)
+  } > ITCM
+
+  __exidx_start = .;
+  .ARM.exidx :
+  {
+    *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+  } > ITCM
+  __exidx_end = .;
+
+  .copy.table :
+  {
+    . = ALIGN(4);
+    __copy_table_start__ = .;
+    LONG (__etext)
+    LONG (__data_start__)
+    LONG (__data_end__ - __data_start__)
+    /* Add each additional data section here */
+/*
+    LONG (__etext2)
+    LONG (__data2_start__)
+    LONG (__data2_end__ - __data2_start__)
+*/
+    __copy_table_end__ = .;
+  } > ITCM
+
+  .zero.table :
+  {
+    . = ALIGN(4);
+    __zero_table_start__ = .;
+    /* Add each additional bss section here */
+/*
+    LONG (__bss2_start__)
+    LONG (__bss2_end__ - __bss2_start__)
+*/
+    __zero_table_end__ = .;
+  } > DTCM
+
+  /**
+   * Location counter can end up 2byte aligned with narrow Thumb code but
+   * __etext is assumed by startup code to be the LMA of a section in RAM
+   * which must be 4byte aligned 
+   */
+  
+  .data : 
+  {
+    __data_start__ = .;
+    *(vtable)
+    *(.data)
+    *(.data.*)
+
+    . = ALIGN(4);
+    /* preinit data */
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP(*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+
+    . = ALIGN(4);
+    /* init data */
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP(*(SORT(.init_array.*)))
+    KEEP(*(.init_array))
+    PROVIDE_HIDDEN (__init_array_end = .);
+
+
+    . = ALIGN(4);
+    /* finit data */
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP(*(SORT(.fini_array.*)))
+    KEEP(*(.fini_array))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+
+    KEEP(*(.jcr*))
+    . = ALIGN(4);
+    /* All data end */
+    __data_end__ = .;
+
+  } > ITCM AT > DTCM
+
+  __etext = ADDR(.data);
+
+  /*
+   * Secondary data section, optional
+   *
+   * Remember to add each additional data section
+   * to the .copy.table above to asure proper
+   * initialization during startup.
+   */
+/*
+  __etext2 = ALIGN (4);
+
+  .data2 : AT (__etext2)
+  {
+    . = ALIGN(4);
+    __data2_start__ = .;
+    *(.data2)
+    *(.data2.*)
+    . = ALIGN(4);
+    __data2_end__ = .;
+
+  } > RAM2
+*/
+
+  .bss :
+  {
+    . = ALIGN(4);
+    __bss_start__ = .;
+    *(.bss)
+    *(.bss.*)
+    *(COMMON)
+    . = ALIGN(4);
+    __bss_end__ = .;
+  } > DTCM2
+
+  /*
+   * Secondary bss section, optional
+   *
+   * Remember to add each additional bss section
+   * to the .zero.table above to asure proper
+   * initialization during startup.
+   */
+/*
+  .bss2 :
+  {
+    . = ALIGN(4);
+    __bss2_start__ = .;
+    *(.bss2)
+    *(.bss2.*)
+    . = ALIGN(4);
+    __bss2_end__ = .;
+  } > RAM2 AT > RAM2
+*/
+
+  .heap (COPY) :
+  {
+    . = ALIGN(8);
+    __end__ = .;
+    PROVIDE(end = .);
+    __HeapBase = .;
+    . = . + __HEAP_SIZE;
+    . = ALIGN(8);
+    __HeapLimit = .;
+  } > DTCM2
+
+  .stack (ORIGIN(DTCM2) + LENGTH(DTCM2) - __STACK_SIZE) (COPY) :
+  {
+    . = ALIGN(8);
+    __StackLimit = .;
+    . = . + __STACK_SIZE;
+    . = ALIGN(8);
+    __StackTop = .;
+  } > DTCM2
+  PROVIDE(__stack = __StackTop);
+
+  /* Check if data + heap + stack exceeds DTCM2 limit */
+  ASSERT(__StackLimit >= __HeapLimit, "region DTCM2 overflowed with stack")
+}
+
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/GCC/mem_ARMCM4.h b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/GCC/mem_ARMCM4.h
new file mode 100755
index 0000000..84a1ff1
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/GCC/mem_ARMCM4.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/ARMCM4/Startup/AC6/startup_ARMCM4.c b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/AC6/startup_ARMCM4.c
new file mode 100755
index 0000000..ccbacd4
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/AC6/startup_ARMCM4.c
@@ -0,0 +1,165 @@
+/******************************************************************************
+ * @file     startup_ARMCM4.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M4 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+#if defined (ARMCM4)
+  #include "ARMCM4.h"
+#elif defined (ARMCM4_FP)
+  #include "ARMCM4_FP.h"
+#else
+  #error device not specified!
+#endif
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[240];
+       const pFunc __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 223 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+#define SERIAL_BASE_ADDRESS (0x40000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+  SystemInit();                             /* CMSIS System Initialization */
+  __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
+}
+
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wmissing-noreturn"
+#endif
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  SERIAL_DATA = 'h';
+SERIAL_DATA = '\n';
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic pop
+#endif
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/GCC/startup_ARMCM4.c b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/GCC/startup_ARMCM4.c
new file mode 100755
index 0000000..1747767
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/GCC/startup_ARMCM4.c
@@ -0,0 +1,163 @@
+/******************************************************************************
+ * @file     startup_ARMCM7.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M7 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+
+#if defined (ARMCM4)
+  #include "ARMCM4.h"
+#elif defined (ARMCM4_FP)
+  #include "ARMCM4_FP.h"
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[240];
+       const pFunc __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 223 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+#define SERIAL_BASE_ADDRESS (0x40000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+
+
+
+
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+   SystemInit();                             /* CMSIS System Initialization */
+
+  
+  __PROGRAM_START();    
+}
+
+
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/GCC/support.c b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/GCC/support.c
new file mode 100755
index 0000000..740f6b0
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/GCC/support.c
@@ -0,0 +1,36 @@
+
+#ifdef   __cplusplus
+extern "C"
+{
+#endif
+    
+char * _sbrk(int incr);
+
+void __malloc_lock() ;
+void __malloc_unlock();
+
+char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+#ifdef   __cplusplus
+}
+#endif
+
+static int totalBytesProvidedBySBRK = 0;
+
+//! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
+char * sbrk(int incr) {
+    static char *currentHeapEnd = &__HeapBase;
+    char *previousHeapEnd = currentHeapEnd;
+    if (currentHeapEnd + incr > &__HeapLimit) {
+        return (char *)-1; // the malloc-family routine that called sbrk will return 0
+    }
+    currentHeapEnd += incr;
+    
+    totalBytesProvidedBySBRK += incr;
+    
+    return (char *) previousHeapEnd;
+}
+//! Synonym for sbrk.
+char * _sbrk(int incr) { return sbrk(incr); };
+
+void __malloc_lock()     {       };
+void __malloc_unlock()   {  };
\ No newline at end of file
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c b/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c
index 94541d8..6e37713 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c
@@ -23,6 +23,23 @@
  * limitations under the License.
  */
 
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
+
+
 #if defined (ARMCM4)
   #include "ARMCM4.h"
 #elif defined (ARMCM4_FP)
@@ -39,6 +56,26 @@
 #define  SYSTEM_CLOCK    (XTAL / 2U)
 
 
+#define SERIAL_BASE_ADDRESS (0x40000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+#define SOFTWARE_MARK  *((volatile unsigned *) (SERIAL_BASE_ADDRESS+4))
+
+void start_ipss_measurement()
+{
+  SOFTWARE_MARK = 1;
+}
+
+void stop_ipss_measurement()
+{
+  SOFTWARE_MARK = 0;
+} 
+
+
+
+
 /*----------------------------------------------------------------------------
   Externals
  *----------------------------------------------------------------------------*/
@@ -51,6 +88,21 @@
  *----------------------------------------------------------------------------*/
 uint32_t SystemCoreClock = SYSTEM_CLOCK;  /* System Core Clock Frequency */
 
+int stdout_putchar(char txchar)
+{
+    SERIAL_DATA = txchar;   
+    return(txchar);                  
+}
+
+int stderr_putchar(char txchar)
+{
+    return stdout_putchar(txchar);
+}
+
+void ttywrch (int ch)
+{
+  stdout_putchar(ch);
+}
 
 /*----------------------------------------------------------------------------
   System Core Clock update function
@@ -66,10 +118,12 @@
 void SystemInit (void)
 {
 
+
 #if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
   SCB->VTOR = (uint32_t) &__VECTOR_TABLE;
 #endif
 
+
 #if defined (__FPU_USED) && (__FPU_USED == 1U)
   SCB->CPACR |= ((3U << 10U*2U) |           /* enable CP10 Full Access */
                  (3U << 11U*2U)  );         /* enable CP11 Full Access */
@@ -80,4 +134,443 @@
 #endif
 
   SystemCoreClock = SYSTEM_CLOCK;
+
+}
+
+
+#if __IS_COMPILER_ARM_COMPILER_6__
+__asm(".global __use_no_semihosting\n\t");
+#   ifndef __MICROLIB
+__asm(".global __ARM_use_no_argv\n\t");
+#   endif
+#endif
+
+/**
+   Writes the character specified by c (converted to an unsigned char) to
+   the output stream pointed to by stream, at the position indicated by the
+   associated file position indicator (if defined), and advances the
+   indicator appropriately. If the file position indicator is not defined,
+   the character is appended to the output stream.
+ 
+  \param[in] c       Character
+  \param[in] stream  Stream handle
+ 
+  \return    The character written. If a write error occurs, the error
+             indicator is set and fputc returns EOF.
+*/
+__attribute__((weak))
+int fputc (int c, FILE * stream) 
+{
+    if (stream == &__stdout) {
+        return (stdout_putchar(c));
+    }
+
+    if (stream == &__stderr) {
+        return (stderr_putchar(c));
+    }
+
+    return (-1);
+}
+
+#ifndef GCCCOMPILER
+/* IO device file handles. */
+#define FH_STDIN    0x8001
+#define FH_STDOUT   0x8002
+#define FH_STDERR   0x8003
+
+const char __stdin_name[]  = ":STDIN";
+const char __stdout_name[] = ":STDOUT";
+const char __stderr_name[] = ":STDERR";
+
+#define RETARGET_SYS        1
+#define RTE_Compiler_IO_STDOUT  1
+#define RTE_Compiler_IO_STDERR  1
+/**
+  Defined in rt_sys.h, this function opens a file.
+ 
+  The _sys_open() function is required by fopen() and freopen(). These
+  functions in turn are required if any file input/output function is to
+  be used.
+  The openmode parameter is a bitmap whose bits mostly correspond directly to
+  the ISO mode specification. Target-dependent extensions are possible, but
+  freopen() must also be extended.
+ 
+  \param[in] name     File name
+  \param[in] openmode Mode specification bitmap
+ 
+  \return    The return value is ?1 if an error occurs.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+FILEHANDLE _sys_open (const char *name, int openmode) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)openmode;
+#endif
+ 
+  if (name == NULL) {
+    return (-1);
+  }
+ 
+  if (name[0] == ':') {
+    if (strcmp(name, ":STDIN") == 0) {
+      return (FH_STDIN);
+    }
+    if (strcmp(name, ":STDOUT") == 0) {
+      return (FH_STDOUT);
+    }
+    if (strcmp(name, ":STDERR") == 0) {
+      return (FH_STDERR);
+    }
+    return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_open(name, openmode));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function closes a file previously opened
+  with _sys_open().
+  
+  This function must be defined if any input/output function is to be used.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is 0 if successful. A nonzero value indicates
+             an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_close (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_close(fh));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function writes the contents of a buffer to a file
+  previously opened with _sys_open().
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return    The return value is either:
+             - a positive number representing the number of characters not
+               written (so any nonzero return value denotes a failure of
+               some sort)
+             - a negative number indicating an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_write (FILEHANDLE fh, const uint8_t *buf, uint32_t len, int mode) {
+#if (defined(RTE_Compiler_IO_STDOUT) || defined(RTE_Compiler_IO_STDERR))
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+#ifdef RTE_Compiler_IO_STDOUT
+      for (; len; len--) {
+        ch = *buf++;
+
+        stdout_putchar(ch);
+      }
+#endif
+      return (0);
+    case FH_STDERR:
+#ifdef RTE_Compiler_IO_STDERR
+      for (; len; len--) {
+        ch = *buf++;
+
+        stderr_putchar(ch);
+      }
+#endif
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_write(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function reads the contents of a file into a buffer.
+ 
+  Reading up to and including the last byte of data does not turn on the EOF
+  indicator. The EOF indicator is only reached when an attempt is made to read
+  beyond the last byte of data. The target-independent code is capable of
+  handling:
+    - the EOF indicator being returned in the same read as the remaining bytes
+      of data that precede the EOF
+    - the EOF indicator being returned on its own after the remaining bytes of
+      data have been returned in a previous read.
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return     The return value is one of the following:
+              - The number of bytes not read (that is, len - result number of
+                bytes were read).
+              - An error indication.
+              - An EOF indicator. The EOF indication involves the setting of
+                0x80000000 in the normal result.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_read (FILEHANDLE fh, uint8_t *buf, uint32_t len, int mode) {
+#ifdef RTE_Compiler_IO_STDIN
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+#ifdef RTE_Compiler_IO_STDIN
+      ch = stdin_getchar();
+      if (ch < 0) {
+        return ((int)(len | 0x80000000U));
+      }
+      *buf++ = (uint8_t)ch;
+#if (STDIN_ECHO != 0)
+      stdout_putchar(ch);
+#endif
+      len--;
+      return ((int)(len));
+#else
+      return ((int)(len | 0x80000000U));
+#endif
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_read(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+
+ 
+ 
+/**
+  Defined in rt_sys.h, this function determines if a file handle identifies
+  a terminal.
+ 
+  When a file is connected to a terminal device, this function is used to
+  provide unbuffered behavior by default (in the absence of a call to
+  set(v)buf) and to prohibit seeking.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is one of the following values:
+             - 0:     There is no interactive device.
+             - 1:     There is an interactive device.
+             - other: An error occurred.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_istty (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (1);
+    case FH_STDOUT:
+      return (1);
+    case FH_STDERR:
+      return (1);
+  }
+ 
+  return (0);
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function puts the file pointer at offset pos from
+  the beginning of the file.
+ 
+  This function sets the current read or write position to the new location pos
+  relative to the start of the current file fh.
+ 
+  \param[in] fh  File handle
+  \param[in] pos File pointer offset
+ 
+  \return    The result is:
+             - non-negative if no error occurs
+             - negative if an error occurs
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_seek (FILEHANDLE fh, long pos) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)pos;
+#endif
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_seek(fh, (uint32_t)pos));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function returns the current length of a file.
+ 
+  This function is used by _sys_seek() to convert an offset relative to the
+  end of a file into an offset relative to the beginning of the file.
+  You do not have to define _sys_flen() if you do not intend to use fseek().
+  If you retarget at system _sys_*() level, you must supply _sys_flen(),
+  even if the underlying system directly supports seeking relative to the
+  end of a file.
+ 
+  \param[in] fh File handle
+ 
+  \return    This function returns the current length of the file fh,
+             or a negative error indicator.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+long _sys_flen (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_flen(fh));
+#endif
+#else
+  return (0);
+#endif
+}
+#endif
+ 
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
+
+#endif
+
+#define log_str(...)                                \
+    do {                                                \
+        const char *pchSrc = __VA_ARGS__;               \
+        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
+        do {                                            \
+            stdout_putchar(*pchSrc++);                  \
+        } while(--hwSize);                              \
+    } while(0)
+
+
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#else
+void _sys_exit(int n)
+{
+    (void)n;
+  log_str("\n");
+  log_str("_[TEST COMPLETE]_________________________________________________\n");
+  log_str("\n\n");
+  stdout_putchar(4);
+  while(1);
+}
+#endif
+
+extern void ttywrch (int ch);
+__attribute__((weak))
+void _ttywrch (int ch) 
+{
+    ttywrch(ch);
 }
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct
index 83cf615..47c9a4f 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct
@@ -7,69 +7,30 @@
 
 #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     0x00300000
+LOAD_REGION 0x0
+{
+    CODE +0 0x100000
+    {
+        *.o (RESET, +First)
+        * (InRoot$$$Sections)
+        * (+RO-CODE)                             
+    }
 
-/*--------------------- 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
+    DATA 0x20000000 NOCOMPRESS 0xF0000
+    {
+    * (+RO-DATA)
+	* (+RW,+ZI)                         
+    }
 
-/*--------------------- 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
+    ARM_LIB_STACK 0x20100000 ALIGN 64 EMPTY -0x00002000 
+    {}
+    ARM_LIB_HEAP 0x20100000 ALIGN 64 EMPTY 0x00100000 
+    {}
 
-
-/*----------------------------------------------------------------------------
-  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/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
index 5b1c56a..6592a44 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
@@ -22,77 +22,17 @@
  * limitations under the License.
  */
 #include "mem_ARMCM7.h" 
-/*
- *-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
- */
 
-/*---------------------- Flash Configuration ----------------------------------
-  <h> Flash Configuration
-    <o0> Flash Base Address <0x0-0xFFFFFFFF:8>
-    <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
-  -----------------------------------------------------------------------------*/
-__ROM_BASE = 0x00000000;
-__ROM_SIZE = 0x00400000;
-
-/*--------------------- Embedded RAM Configuration ----------------------------
-  <h> RAM Configuration
-    <o0> RAM Base Address    <0x0-0xFFFFFFFF:8>
-    <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
- -----------------------------------------------------------------------------*/
-__RAM_BASE = 0x20000000;
-__RAM_SIZE = 0x00300000;
-
-/*--------------------- Stack / Heap Configuration ----------------------------
-  <h> Stack / Heap Configuration
-    <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-    <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
-  -----------------------------------------------------------------------------*/
-__STACK_SIZE = STACK_SIZE;
-__HEAP_SIZE  = HEAP_SIZE;
-
-/*
- *-------------------- <<< end of configuration section >>> -------------------
- */
+__STACK_SIZE = 0x2000;
+__HEAP_SIZE  = 0x50000;
 
 MEMORY
 {
-  FLASH (rx)  : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
-  RAM   (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
+  ITCM (rx)     : ORIGIN = 0x00000000, LENGTH = 512K
+  DTCM (xrw)    : ORIGIN = 0x20000000, LENGTH = 128K
+  DTCM2 (xrw)     : ORIGIN = 0x20020000, LENGTH = 384K
 }
 
-/* Linker script to place sections and symbol values. Should be used together
- * with other linker script that defines memory regions FLASH and RAM.
- * It references following symbols, which must be defined in code:
- *   Reset_Handler : Entry of reset handler
- *
- * It defines following symbols, which code can use without definition:
- *   __exidx_start
- *   __exidx_end
- *   __copy_table_start__
- *   __copy_table_end__
- *   __zero_table_start__
- *   __zero_table_end__
- *   __etext
- *   __data_start__
- *   __preinit_array_start
- *   __preinit_array_end
- *   __init_array_start
- *   __init_array_end
- *   __fini_array_start
- *   __fini_array_end
- *   __data_end__
- *   __bss_start__
- *   __bss_end__
- *   __end__
- *   end
- *   __HeapLimit
- *   __StackLimit
- *   __StackTop
- *   __stack
- */
 ENTRY(Reset_Handler)
 
 SECTIONS
@@ -122,12 +62,12 @@
     *(.rodata*)
 
     KEEP(*(.eh_frame*))
-  } > FLASH
+  } > ITCM
 
   /*
    * SG veneers:
    * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address
-   * must be set, either with the command line option ‘--section-start’ or in a linker script,
+   * must be set, either with the command line option ‘--section-start’ or in a linker script,
    * to indicate where to place these veneers in memory.
    */
 /*
@@ -139,13 +79,13 @@
   .ARM.extab :
   {
     *(.ARM.extab* .gnu.linkonce.armextab.*)
-  } > FLASH
+  } > ITCM
 
   __exidx_start = .;
   .ARM.exidx :
   {
     *(.ARM.exidx* .gnu.linkonce.armexidx.*)
-  } > FLASH
+  } > ITCM
   __exidx_end = .;
 
   .copy.table :
@@ -162,7 +102,7 @@
     LONG (__data2_end__ - __data2_start__)
 */
     __copy_table_end__ = .;
-  } > FLASH
+  } > ITCM
 
   .zero.table :
   {
@@ -174,16 +114,15 @@
     LONG (__bss2_end__ - __bss2_start__)
 */
     __zero_table_end__ = .;
-  } > FLASH
+  } > DTCM
 
   /**
    * Location counter can end up 2byte aligned with narrow Thumb code but
    * __etext is assumed by startup code to be the LMA of a section in RAM
    * which must be 4byte aligned 
    */
-  __etext = ALIGN (4);
-
-  .data : AT (__etext)
+  
+  .data : 
   {
     __data_start__ = .;
     *(vtable)
@@ -216,7 +155,9 @@
     /* All data end */
     __data_end__ = .;
 
-  } > RAM
+  } > ITCM AT > DTCM
+
+  __etext = ADDR(.data);
 
   /*
    * Secondary data section, optional
@@ -249,7 +190,7 @@
     *(COMMON)
     . = ALIGN(4);
     __bss_end__ = .;
-  } > RAM AT > RAM
+  } > DTCM2
 
   /*
    * Secondary bss section, optional
@@ -274,23 +215,25 @@
   {
     . = ALIGN(8);
     __end__ = .;
-    __HeapBase = .;
     PROVIDE(end = .);
     . = . + __HEAP_SIZE;
     . = ALIGN(8);
     __HeapLimit = .;
-  } > RAM
+  } > DTCM2
 
-  .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) :
+  .stack (ORIGIN(DTCM2) + LENGTH(DTCM2) - __STACK_SIZE) (COPY) :
   {
     . = ALIGN(8);
     __StackLimit = .;
     . = . + __STACK_SIZE;
     . = ALIGN(8);
     __StackTop = .;
-  } > RAM
+  } > DTCM2
   PROVIDE(__stack = __StackTop);
 
-  /* Check if data + heap + stack exceeds RAM limit */
-  ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+  /* Check if data + heap + stack exceeds DTCM2 limit */
+  ASSERT(__StackLimit >= __HeapLimit, "region DTCM2 overflowed with stack")
 }
+
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC6/startup_ARMCM7.c b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC6/startup_ARMCM7.c
new file mode 100755
index 0000000..18f5651
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC6/startup_ARMCM7.c
@@ -0,0 +1,159 @@
+/******************************************************************************
+ * @file     startup_ARMCM7.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M7 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+#if defined (ARMCM7)
+  #include "ARMCM7.h"
+#elif defined (ARMCM7_SP)
+  #include "ARMCM7_SP.h"
+#elif defined (ARMCM7_DP)
+  #include "ARMCM7_DP.h"
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[240];
+       const pFunc __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 223 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+  SystemInit();                             /* CMSIS System Initialization */
+  __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
+}
+
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wmissing-noreturn"
+#endif
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+  #pragma clang diagnostic pop
+#endif
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.S b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.S
deleted file mode 100644
index 4c03cfc..0000000
--- a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.S
+++ /dev/null
@@ -1,170 +0,0 @@
-/**************************************************************************//**
- * @file     startup_ARMCM7.S
- * @brief    CMSIS-Core(M) Device Startup File for Cortex-M7 Device
- * @version  V2.0.0
- * @date     20. May 2019
- ******************************************************************************/
-/*
- * 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.
- */
-
-                .syntax  unified
-                .arch    armv7e-m
-
-                .section .vectors
-                .align   2
-                .globl   __Vectors
-                .globl   __Vectors_End
-                .globl   __Vectors_Size
-__Vectors:
-                .long    __StackTop                         /*     Top of Stack */
-                .long    Reset_Handler                      /*     Reset Handler */
-                .long    NMI_Handler                        /* -14 NMI Handler */
-                .long    HardFault_Handler                  /* -13 Hard Fault Handler */
-                .long    MemManage_Handler                  /* -12 MPU Fault Handler */
-                .long    BusFault_Handler                   /* -11 Bus Fault Handler */
-                .long    UsageFault_Handler                 /* -10 Usage Fault Handler */
-                .long    0                                  /*     Reserved */
-                .long    0                                  /*     Reserved */
-                .long    0                                  /*     Reserved */
-                .long    0                                  /*     Reserved */
-                .long    SVC_Handler                        /*  -5 SVCall Handler */
-                .long    DebugMon_Handler                   /*  -4 Debug Monitor Handler */
-                .long    0                                  /*     Reserved */
-                .long    PendSV_Handler                     /*  -2 PendSV Handler */
-                .long    SysTick_Handler                    /*  -1 SysTick Handler */
-
-                /* Interrupts */
-                .long    Interrupt0_Handler                 /*   0 Interrupt 0 */
-                .long    Interrupt1_Handler                 /*   1 Interrupt 1 */
-                .long    Interrupt2_Handler                 /*   2 Interrupt 2 */
-                .long    Interrupt3_Handler                 /*   3 Interrupt 3 */
-                .long    Interrupt4_Handler                 /*   4 Interrupt 4 */
-                .long    Interrupt5_Handler                 /*   5 Interrupt 5 */
-                .long    Interrupt6_Handler                 /*   6 Interrupt 6 */
-                .long    Interrupt7_Handler                 /*   7 Interrupt 7 */
-                .long    Interrupt8_Handler                 /*   8 Interrupt 8 */
-                .long    Interrupt9_Handler                 /*   9 Interrupt 9 */
-
-                .space   (214 * 4)                          /* Interrupts 10 .. 224 are left out */
-__Vectors_End:
-                .equ     __Vectors_Size, __Vectors_End - __Vectors
-                .size    __Vectors, . - __Vectors
-
-
-                .thumb
-                .section .text
-                .align   2
-
-                .thumb_func
-                .type    Reset_Handler, %function
-                .globl   Reset_Handler
-                .fnstart
-Reset_Handler:
-                bl       SystemInit
-
-                ldr      r4, =__copy_table_start__
-                ldr      r5, =__copy_table_end__
-
-.L_loop0:
-                cmp      r4, r5
-                bge      .L_loop0_done
-                ldr      r1, [r4]
-                ldr      r2, [r4, #4]
-                ldr      r3, [r4, #8]
-
-.L_loop0_0:
-                subs     r3, #4
-                ittt     ge
-                ldrge    r0, [r1, r3]
-                strge    r0, [r2, r3]
-                bge      .L_loop0_0
-
-                adds     r4, #12
-                b        .L_loop0
-.L_loop0_done:
-
-                ldr      r3, =__zero_table_start__
-                ldr      r4, =__zero_table_end__
-
-.L_loop2:
-                cmp      r3, r4
-                bge      .L_loop2_done
-                ldr      r1, [r3]
-                ldr      r2, [r3, #4]
-                movs     r0, 0
-
-.L_loop2_0:
-                subs     r2, #4
-                itt      ge
-                strge    r0, [r1, r2]
-                bge      .L_loop2_0
-
-                adds     r3, #8
-                b        .L_loop2
-.L_loop2_done:
-
-                bl       _start
-
-                .fnend
-                .size    Reset_Handler, . - Reset_Handler
-
-
-                .thumb_func
-                .type    Default_Handler, %function
-                .weak    Default_Handler
-                .fnstart
-Default_Handler:
-                b        .
-                .fnend
-                .size    Default_Handler, . - Default_Handler
-
-/* 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
-                .weak    \Handler_Name
-                .set     \Handler_Name, Default_Handler
-                .endm
-
-
-/* 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
-
-
-                .end
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.c b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.c
new file mode 100755
index 0000000..8b99812
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.c
@@ -0,0 +1,165 @@
+/******************************************************************************
+ * @file     startup_ARMCM7.c
+ * @brief    CMSIS-Core(M) Device Startup File for a Cortex-M7 Device
+ * @version  V2.0.3
+ * @date     31. March 2020
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2020 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.
+ */
+
+
+#if defined (ARMCM7)
+  #include "ARMCM7.h"
+#elif defined (ARMCM7_SP)
+  #include "ARMCM7_SP.h"
+#elif defined (ARMCM7_DP)
+  #include "ARMCM7_DP.h"
+#else
+  #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler Function Prototype
+ *----------------------------------------------------------------------------*/
+typedef void( *pFunc )( void );
+
+/*----------------------------------------------------------------------------
+  External References
+ *----------------------------------------------------------------------------*/
+extern uint32_t __INITIAL_SP;
+
+extern __NO_RETURN void __PROGRAM_START(void);
+
+/*----------------------------------------------------------------------------
+  Internal References
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler  (void);
+            void Default_Handler(void);
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+/* Exceptions */
+void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void HardFault_Handler      (void) __attribute__ ((weak));
+void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
+void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
+void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
+void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
+void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
+
+void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
+
+
+/*----------------------------------------------------------------------------
+  Exception / Interrupt Vector table
+ *----------------------------------------------------------------------------*/
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+extern const pFunc __VECTOR_TABLE[240];
+       const pFunc __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = {
+  (pFunc)(&__INITIAL_SP),       /*     Initial Stack Pointer */
+  Reset_Handler,                            /*     Reset Handler */
+  NMI_Handler,                              /* -14 NMI Handler */
+  HardFault_Handler,                        /* -13 Hard Fault Handler */
+  MemManage_Handler,                        /* -12 MPU Fault Handler */
+  BusFault_Handler,                         /* -11 Bus Fault Handler */
+  UsageFault_Handler,                       /* -10 Usage Fault Handler */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  0,                                        /*     Reserved */
+  SVC_Handler,                              /*  -5 SVCall Handler */
+  DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
+  0,                                        /*     Reserved */
+  PendSV_Handler,                           /*  -2 PendSV Handler */
+  SysTick_Handler,                          /*  -1 SysTick Handler */
+
+  /* Interrupts */
+  Interrupt0_Handler,                       /*   0 Interrupt 0 */
+  Interrupt1_Handler,                       /*   1 Interrupt 1 */
+  Interrupt2_Handler,                       /*   2 Interrupt 2 */
+  Interrupt3_Handler,                       /*   3 Interrupt 3 */
+  Interrupt4_Handler,                       /*   4 Interrupt 4 */
+  Interrupt5_Handler,                       /*   5 Interrupt 5 */
+  Interrupt6_Handler,                       /*   6 Interrupt 6 */
+  Interrupt7_Handler,                       /*   7 Interrupt 7 */
+  Interrupt8_Handler,                       /*   8 Interrupt 8 */
+  Interrupt9_Handler                        /*   9 Interrupt 9 */
+                                            /* Interrupts 10 .. 223 are left out */
+};
+
+#if defined ( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
+
+#define SERIAL_BASE_ADDRESS (0xA8000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+
+
+
+
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+__NO_RETURN void Reset_Handler(void)
+{
+   SystemInit();                             /* CMSIS System Initialization */
+
+  
+  __PROGRAM_START();    
+}
+
+
+
+/*----------------------------------------------------------------------------
+  Hard Fault Handler
+ *----------------------------------------------------------------------------*/
+void HardFault_Handler(void)
+{
+  while(1);
+}
+
+/*----------------------------------------------------------------------------
+  Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void)
+{
+  while(1);
+}
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/system_ARMCM7.c b/CMSIS/DSP/Platforms/FVP/ARMCM7/system_ARMCM7.c
index f096084..5f07216 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMCM7/system_ARMCM7.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/system_ARMCM7.c
@@ -22,6 +22,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <stdint.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
+
 
 #if defined (ARMCM7)
   #include "ARMCM7.h"
@@ -62,6 +79,44 @@
   SystemCoreClock = SYSTEM_CLOCK;
 }
 
+/* ================================================================================ */
+/* ================             Peripheral declaration             ================ */
+/* ================================================================================ */
+
+#define SERIAL_BASE_ADDRESS	(0xA8000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+#define SOFTWARE_MARK  *((volatile unsigned *) (SERIAL_BASE_ADDRESS+4))
+
+void start_ipss_measurement()
+{
+  SOFTWARE_MARK = 1;
+}
+
+void stop_ipss_measurement()
+{
+  SOFTWARE_MARK = 0;
+}
+ 
+
+
+int stdout_putchar(char txchar)
+{
+    SERIAL_DATA = txchar;    
+    return(txchar);                 
+}
+
+int stderr_putchar(char txchar)
+{
+    return stdout_putchar(txchar);
+}
+
+void ttywrch (int ch)
+{
+	stdout_putchar(ch);
+}
+
 /*----------------------------------------------------------------------------
   System initialization function
  *----------------------------------------------------------------------------*/
@@ -83,3 +138,439 @@
 
   SystemCoreClock = SYSTEM_CLOCK;
 }
+
+#if __IS_COMPILER_ARM_COMPILER_6__
+__asm(".global __use_no_semihosting\n\t");
+#   ifndef __MICROLIB
+__asm(".global __ARM_use_no_argv\n\t");
+#   endif
+#endif
+
+/**
+   Writes the character specified by c (converted to an unsigned char) to
+   the output stream pointed to by stream, at the position indicated by the
+   associated file position indicator (if defined), and advances the
+   indicator appropriately. If the file position indicator is not defined,
+   the character is appended to the output stream.
+ 
+  \param[in] c       Character
+  \param[in] stream  Stream handle
+ 
+  \return    The character written. If a write error occurs, the error
+             indicator is set and fputc returns EOF.
+*/
+__attribute__((weak))
+int fputc (int c, FILE * stream) 
+{
+    if (stream == &__stdout) {
+        return (stdout_putchar(c));
+    }
+
+    if (stream == &__stderr) {
+        return (stderr_putchar(c));
+    }
+
+    return (-1);
+}
+
+#ifndef GCCCOMPILER
+/* IO device file handles. */
+#define FH_STDIN    0x8001
+#define FH_STDOUT   0x8002
+#define FH_STDERR   0x8003
+
+const char __stdin_name[]  = ":STDIN";
+const char __stdout_name[] = ":STDOUT";
+const char __stderr_name[] = ":STDERR";
+
+#define RETARGET_SYS        1
+#define RTE_Compiler_IO_STDOUT  1
+#define RTE_Compiler_IO_STDERR  1
+/**
+  Defined in rt_sys.h, this function opens a file.
+ 
+  The _sys_open() function is required by fopen() and freopen(). These
+  functions in turn are required if any file input/output function is to
+  be used.
+  The openmode parameter is a bitmap whose bits mostly correspond directly to
+  the ISO mode specification. Target-dependent extensions are possible, but
+  freopen() must also be extended.
+ 
+  \param[in] name     File name
+  \param[in] openmode Mode specification bitmap
+ 
+  \return    The return value is ?1 if an error occurs.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+FILEHANDLE _sys_open (const char *name, int openmode) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)openmode;
+#endif
+ 
+  if (name == NULL) {
+    return (-1);
+  }
+ 
+  if (name[0] == ':') {
+    if (strcmp(name, ":STDIN") == 0) {
+      return (FH_STDIN);
+    }
+    if (strcmp(name, ":STDOUT") == 0) {
+      return (FH_STDOUT);
+    }
+    if (strcmp(name, ":STDERR") == 0) {
+      return (FH_STDERR);
+    }
+    return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_open(name, openmode));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function closes a file previously opened
+  with _sys_open().
+  
+  This function must be defined if any input/output function is to be used.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is 0 if successful. A nonzero value indicates
+             an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_close (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_close(fh));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function writes the contents of a buffer to a file
+  previously opened with _sys_open().
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return    The return value is either:
+             - a positive number representing the number of characters not
+               written (so any nonzero return value denotes a failure of
+               some sort)
+             - a negative number indicating an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_write (FILEHANDLE fh, const uint8_t *buf, uint32_t len, int mode) {
+#if (defined(RTE_Compiler_IO_STDOUT) || defined(RTE_Compiler_IO_STDERR))
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+#ifdef RTE_Compiler_IO_STDOUT
+      for (; len; len--) {
+        ch = *buf++;
+
+        stdout_putchar(ch);
+      }
+#endif
+      return (0);
+    case FH_STDERR:
+#ifdef RTE_Compiler_IO_STDERR
+      for (; len; len--) {
+        ch = *buf++;
+
+        stderr_putchar(ch);
+      }
+#endif
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_write(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function reads the contents of a file into a buffer.
+ 
+  Reading up to and including the last byte of data does not turn on the EOF
+  indicator. The EOF indicator is only reached when an attempt is made to read
+  beyond the last byte of data. The target-independent code is capable of
+  handling:
+    - the EOF indicator being returned in the same read as the remaining bytes
+      of data that precede the EOF
+    - the EOF indicator being returned on its own after the remaining bytes of
+      data have been returned in a previous read.
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return     The return value is one of the following:
+              - The number of bytes not read (that is, len - result number of
+                bytes were read).
+              - An error indication.
+              - An EOF indicator. The EOF indication involves the setting of
+                0x80000000 in the normal result.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_read (FILEHANDLE fh, uint8_t *buf, uint32_t len, int mode) {
+#ifdef RTE_Compiler_IO_STDIN
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+#ifdef RTE_Compiler_IO_STDIN
+      ch = stdin_getchar();
+      if (ch < 0) {
+        return ((int)(len | 0x80000000U));
+      }
+      *buf++ = (uint8_t)ch;
+#if (STDIN_ECHO != 0)
+      stdout_putchar(ch);
+#endif
+      len--;
+      return ((int)(len));
+#else
+      return ((int)(len | 0x80000000U));
+#endif
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_read(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+
+ 
+ 
+/**
+  Defined in rt_sys.h, this function determines if a file handle identifies
+  a terminal.
+ 
+  When a file is connected to a terminal device, this function is used to
+  provide unbuffered behavior by default (in the absence of a call to
+  set(v)buf) and to prohibit seeking.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is one of the following values:
+             - 0:     There is no interactive device.
+             - 1:     There is an interactive device.
+             - other: An error occurred.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_istty (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (1);
+    case FH_STDOUT:
+      return (1);
+    case FH_STDERR:
+      return (1);
+  }
+ 
+  return (0);
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function puts the file pointer at offset pos from
+  the beginning of the file.
+ 
+  This function sets the current read or write position to the new location pos
+  relative to the start of the current file fh.
+ 
+  \param[in] fh  File handle
+  \param[in] pos File pointer offset
+ 
+  \return    The result is:
+             - non-negative if no error occurs
+             - negative if an error occurs
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_seek (FILEHANDLE fh, long pos) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)pos;
+#endif
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_seek(fh, (uint32_t)pos));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function returns the current length of a file.
+ 
+  This function is used by _sys_seek() to convert an offset relative to the
+  end of a file into an offset relative to the beginning of the file.
+  You do not have to define _sys_flen() if you do not intend to use fseek().
+  If you retarget at system _sys_*() level, you must supply _sys_flen(),
+  even if the underlying system directly supports seeking relative to the
+  end of a file.
+ 
+  \param[in] fh File handle
+ 
+  \return    This function returns the current length of the file fh,
+             or a negative error indicator.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+long _sys_flen (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_flen(fh));
+#endif
+#else
+  return (0);
+#endif
+}
+#endif
+ 
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
+
+#endif
+
+#define log_str(...)		                            \
+    do {                                                \
+        const char *pchSrc = __VA_ARGS__;               \
+        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
+        do {                                            \
+            stdout_putchar(*pchSrc++);                  \
+        } while(--hwSize);                              \
+    } while(0)
+
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#else
+void _sys_exit(int n)
+{
+    (void)n;
+	log_str("\n");
+	log_str("_[TEST COMPLETE]_________________________________________________\n");
+	log_str("\n\n");
+	stdout_putchar(4);
+	while(1);
+}
+#endif
+
+extern void ttywrch (int ch);
+__attribute__((weak))
+void _ttywrch (int ch) 
+{
+    ttywrch(ch);
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/AC6/lnk.sct
index 4646ff5..fdac830 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/AC6/lnk.sct
+++ b/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/AC6/lnk.sct
@@ -7,82 +7,24 @@
 
 #include "mem_ARMv81MML.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     0x10000000
-#define __ROM_SIZE     0x00400000
+LOAD_REGION 0x0
+{
+    CODE +0 0x100000
+    {
+        *.o (RESET, +First)
+	    * (InRoot$$$Sections)
+        * (+RO-CODE)                             
+    }
 
-/*--------------------- Embedded RAM Configuration ---------------------------
-; <h> RAM Configuration
-;   <o0> RAM1 Base Address    <0x0-0xFFFFFFFF:8>
-;   <o1> RAM1 Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
- *----------------------------------------------------------------------------*/
-#define __RAM1_BASE     0x20000000
-#define __RAM1_SIZE     0x00400000
+    DATA 0x20000000 NOCOMPRESS 0xF0000
+    {
+      * (+RO-DATA)   
+	  * (+RW,+ZI)                         
+    }
 
-/*--------------------- Embedded RAM Configuration ---------------------------
-; <h> RAM Configuration
-;   <o0> RAM2 Base Address    <0x0-0xFFFFFFFF:8>
-;   <o1> RAM2 Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
- *----------------------------------------------------------------------------*/
-#define __RAM2_BASE     0x28000000
-#define __RAM2_SIZE     0x00400000
-
-
-/*--------------------- Embedded RAM Configuration ---------------------------
-; <h> RAM Configuration
-;   <o0> RAM3 Base Address    <0x0-0xFFFFFFFF:8>
-;   <o1> RAM3 Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
- *----------------------------------------------------------------------------*/
-#define __RAM3_BASE     0x80000000
-#define __RAM3_SIZE     0x01000000
-
-/*--------------------- 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
-#define __RAM2_RW_SIZE  (__RAM2_SIZE - __STACK_SIZE - __HEAP_SIZE)
-
-
-
-LR_ROM __ROM_BASE __ROM_SIZE  {                             ; load region size_region
-  ER_ROM +0 {                                               ; load address = execution address
-   *.o (RESET, +First)
-   * (InRoot$$Sections)
-;   *(Veneer$$CMSE)                                         ; uncomment for secure applications
-   * (+RO-CODE)
-;   * (+XO)
-  }
-
-  RW_RAM1 __RAM1_BASE __RAM1_SIZE  {                        ; RW data
-   * (+RW +ZI)
-  }
-
-  /* make sure stack-overflow will cause bus-fault (which might be escalated to hardfault) */
-  ARM_LIB_STACK __RAM2_BASE ALIGN 8 EMPTY __STACK_SIZE {   ; Reserve empty region for stack
-  }
-  
-  RW_RAM2 +0 __RAM2_RW_SIZE {
-    * (+RO-DATA)
-    .ANY (+RW +ZI)
-  }
-
-  ARM_LIB_HEAP  +0 ALIGN 8 EMPTY __HEAP_SIZE  {             ; Reserve empty region for heap
-  }
-
-  RW_RAM3 __RAM3_BASE __RAM3_SIZE  {                        ; RW data
-   .ANY (+RW +ZI)                                           ; Just in case the RAM1 and RAM2 is not big enough.
-  }
+    ARM_LIB_STACK 0x20100000 ALIGN 64 EMPTY -0x00002000 
+    {}
+    ARM_LIB_HEAP 0x20100000 ALIGN 64 EMPTY 0x00100000 
+    {}
 
 }
diff --git a/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/GCC/lnk.ld
index 73055d6..08ce5ca 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/GCC/lnk.ld
+++ b/CMSIS/DSP/Platforms/FVP/ARMv81MML/LinkScripts/GCC/lnk.ld
@@ -22,77 +22,17 @@
  * limitations under the License.
  */
 #include "mem_ARMv81MML.h" 
-/*
- *-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
- */
 
-/*---------------------- Flash Configuration ----------------------------------
-  <h> Flash Configuration
-    <o0> Flash Base Address <0x0-0xFFFFFFFF:8>
-    <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
-  -----------------------------------------------------------------------------*/
-__ROM_BASE = 0x00000000;
-__ROM_SIZE = 0x00400000;
-
-/*--------------------- Embedded RAM Configuration ----------------------------
-  <h> RAM Configuration
-    <o0> RAM Base Address    <0x0-0xFFFFFFFF:8>
-    <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
- -----------------------------------------------------------------------------*/
-__RAM_BASE = 0x20000000;
-__RAM_SIZE = 0x00300000;
-
-/*--------------------- Stack / Heap Configuration ----------------------------
-  <h> Stack / Heap Configuration
-    <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-    <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-  </h>
-  -----------------------------------------------------------------------------*/
-__STACK_SIZE = STACK_SIZE;
-__HEAP_SIZE  = HEAP_SIZE;
-
-/*
- *-------------------- <<< end of configuration section >>> -------------------
- */
+__STACK_SIZE = 0x2000;
+__HEAP_SIZE  = 0x50000;
 
 MEMORY
 {
-  FLASH (rx)  : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
-  RAM   (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
+  ITCM (rx)     : ORIGIN = 0x00000000, LENGTH = 512K
+  DTCM (xrw)    : ORIGIN = 0x20000000, LENGTH = 128K
+  DTCM2 (xrw)     : ORIGIN = 0x20020000, LENGTH = 384K
 }
 
-/* Linker script to place sections and symbol values. Should be used together
- * with other linker script that defines memory regions FLASH and RAM.
- * It references following symbols, which must be defined in code:
- *   Reset_Handler : Entry of reset handler
- *
- * It defines following symbols, which code can use without definition:
- *   __exidx_start
- *   __exidx_end
- *   __copy_table_start__
- *   __copy_table_end__
- *   __zero_table_start__
- *   __zero_table_end__
- *   __etext
- *   __data_start__
- *   __preinit_array_start
- *   __preinit_array_end
- *   __init_array_start
- *   __init_array_end
- *   __fini_array_start
- *   __fini_array_end
- *   __data_end__
- *   __bss_start__
- *   __bss_end__
- *   __end__
- *   end
- *   __HeapLimit
- *   __StackLimit
- *   __StackTop
- *   __stack
- */
 ENTRY(Reset_Handler)
 
 SECTIONS
@@ -122,12 +62,12 @@
     *(.rodata*)
 
     KEEP(*(.eh_frame*))
-  } > FLASH
+  } > ITCM
 
   /*
    * SG veneers:
    * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address
-   * must be set, either with the command line option ‘--section-start’ or in a linker script,
+   * must be set, either with the command line option ‘--section-start’ or in a linker script,
    * to indicate where to place these veneers in memory.
    */
 /*
@@ -139,13 +79,13 @@
   .ARM.extab :
   {
     *(.ARM.extab* .gnu.linkonce.armextab.*)
-  } > FLASH
+  } > ITCM
 
   __exidx_start = .;
   .ARM.exidx :
   {
     *(.ARM.exidx* .gnu.linkonce.armexidx.*)
-  } > FLASH
+  } > ITCM
   __exidx_end = .;
 
   .copy.table :
@@ -162,7 +102,7 @@
     LONG (__data2_end__ - __data2_start__)
 */
     __copy_table_end__ = .;
-  } > FLASH
+  } > ITCM
 
   .zero.table :
   {
@@ -174,16 +114,15 @@
     LONG (__bss2_end__ - __bss2_start__)
 */
     __zero_table_end__ = .;
-  } > FLASH
+  } > DTCM
 
   /**
    * Location counter can end up 2byte aligned with narrow Thumb code but
    * __etext is assumed by startup code to be the LMA of a section in RAM
    * which must be 4byte aligned 
    */
-  __etext = ALIGN (4);
-
-  .data : AT (__etext)
+  
+  .data : 
   {
     __data_start__ = .;
     *(vtable)
@@ -216,7 +155,9 @@
     /* All data end */
     __data_end__ = .;
 
-  } > RAM
+  } > ITCM AT > DTCM
+
+  __etext = ADDR(.data);
 
   /*
    * Secondary data section, optional
@@ -249,7 +190,7 @@
     *(COMMON)
     . = ALIGN(4);
     __bss_end__ = .;
-  } > RAM AT > RAM
+  } > DTCM2
 
   /*
    * Secondary bss section, optional
@@ -274,23 +215,25 @@
   {
     . = ALIGN(8);
     __end__ = .;
-    __HeapBase = .;
     PROVIDE(end = .);
     . = . + __HEAP_SIZE;
     . = ALIGN(8);
     __HeapLimit = .;
-  } > RAM
+  } > DTCM2
 
-  .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) :
+  .stack (ORIGIN(DTCM2) + LENGTH(DTCM2) - __STACK_SIZE) (COPY) :
   {
     . = ALIGN(8);
     __StackLimit = .;
     . = . + __STACK_SIZE;
     . = ALIGN(8);
     __StackTop = .;
-  } > RAM
+  } > DTCM2
   PROVIDE(__stack = __StackTop);
 
-  /* Check if data + heap + stack exceeds RAM limit */
-  ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+  /* Check if data + heap + stack exceeds DTCM2 limit */
+  ASSERT(__StackLimit >= __HeapLimit, "region DTCM2 overflowed with stack")
 }
+
+
+
diff --git a/CMSIS/DSP/Platforms/FVP/ARMv81MML/Startup/GCC/startup_ARMv81MML.c b/CMSIS/DSP/Platforms/FVP/ARMv81MML/Startup/GCC/startup_ARMv81MML.c
index ea3329f..06cbb5e 100755
--- a/CMSIS/DSP/Platforms/FVP/ARMv81MML/Startup/GCC/startup_ARMv81MML.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMv81MML/Startup/GCC/startup_ARMv81MML.c
@@ -29,8 +29,6 @@
   #error device not specified!
 #endif
 
-#include <stdio.h>
-
 /*----------------------------------------------------------------------------
   Exception / Interrupt Handler Function Prototype
  *----------------------------------------------------------------------------*/
@@ -128,42 +126,8 @@
 
 
 
-int stdout_putchar(char txchar)
-{
-    SERIAL_DATA = txchar; 
-    return(txchar);                    
-}
-
-int stderr_putchar(char txchar)
-{
-    return stdout_putchar(txchar);
-}
 
 
-__attribute__((constructor(255)))
-void platform_init(void)
-{
-    printf("\n_[TEST START]____________________________________________________\n");
-}
-
-#define log_str(...)                                \
-    do {                                                \
-        const char *pchSrc = __VA_ARGS__;               \
-        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
-        do {                                            \
-            stdout_putchar(*pchSrc++);                  \
-        } while(--hwSize);                              \
-    } while(0)
-
-void _exit(int return_code)
-{
-    (void)return_code;
-    log_str("\n");
-    log_str("_[TEST COMPLETE]_________________________________________________\n");
-    log_str("\n\n");
-    stdout_putchar(4);
-    while(1);
-}
 
 
 /*----------------------------------------------------------------------------
@@ -172,9 +136,10 @@
 __NO_RETURN void Reset_Handler(void)
 {
    __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
-   
+
    SystemInit();                             /* CMSIS System Initialization */
 
+  
   __PROGRAM_START();    
 }
 
@@ -197,16 +162,3 @@
 }
 
 
-int _write(int   file,
-        char *ptr,
-        int   len)
-{
-  int i;
-  (void)file;
-  
-  for(i=0; i < len;i++)
-  {
-     stdout_putchar(*ptr++);
-  }
-  return len;
-}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMv81MML/system_ARMv81MML.c b/CMSIS/DSP/Platforms/FVP/ARMv81MML/system_ARMv81MML.c
index 90880ad..f00ffbc 100644
--- a/CMSIS/DSP/Platforms/FVP/ARMv81MML/system_ARMv81MML.c
+++ b/CMSIS/DSP/Platforms/FVP/ARMv81MML/system_ARMv81MML.c
@@ -2,11 +2,11 @@
  * @file     system_ARMv81MML.c
  * @brief    CMSIS Device System Source File for
  *           Armv8.1-M Mainline Device Series
- * @version  V1.2.1
- * @date     23. March 2020
+ * @version  V1.2.0
+ * @date     23. July 2019
  ******************************************************************************/
 /*
- * Copyright (c) 2009-2020 Arm Limited. All rights reserved.
+ * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -23,6 +23,23 @@
  * limitations under the License.
  */
 
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+#include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
+
+
 #if defined (ARMv81MML_DSP_DP_MVE_FP)
   #include "ARMv81MML_DSP_DP_MVE_FP.h"
 #else
@@ -33,6 +50,88 @@
   #include "partition_ARMv81MML.h"
 #endif
 
+
+
+#include "cmsis_compiler.h"
+
+//! \name The macros to identify the compiler
+//! @{
+
+//! \note for IAR
+#ifdef __IS_COMPILER_IAR__
+#   undef __IS_COMPILER_IAR__
+#endif
+#if defined(__IAR_SYSTEMS_ICC__)
+#   define __IS_COMPILER_IAR__                 1
+#endif
+
+
+
+
+//! \note for arm compiler 5
+#ifdef __IS_COMPILER_ARM_COMPILER_5__
+#   undef __IS_COMPILER_ARM_COMPILER_5__
+#endif
+#if ((__ARMCC_VERSION >= 5000000) && (__ARMCC_VERSION < 6000000))
+#   define __IS_COMPILER_ARM_COMPILER_5__      1
+#endif
+//! @}
+
+//! \note for arm compiler 6
+#ifdef __IS_COMPILER_ARM_COMPILER_6__
+#   undef __IS_COMPILER_ARM_COMPILER_6__
+#endif
+#if ((__ARMCC_VERSION >= 6000000) && (__ARMCC_VERSION < 7000000))
+#   define __IS_COMPILER_ARM_COMPILER_6__      1
+#endif
+
+#ifdef __IS_COMPILER_LLVM__
+#   undef  __IS_COMPILER_LLVM__
+#endif
+#if defined(__clang__) && !__IS_COMPILER_ARM_COMPILER_6__
+#   define __IS_COMPILER_LLVM__                1
+#else
+//! \note for gcc
+#ifdef __IS_COMPILER_GCC__
+#   undef __IS_COMPILER_GCC__
+#endif
+#if defined(__GNUC__) && !(__IS_COMPILER_ARM_COMPILER_6__ || __IS_COMPILER_LLVM__)
+#   define __IS_COMPILER_GCC__                 1
+#endif
+//! @}
+#endif
+//! @}
+
+#define SAFE_ATOM_CODE(...)             \
+{                                       \
+    uint32_t wOrig = __disable_irq();   \
+    __VA_ARGS__;                        \
+    __set_PRIMASK(wOrig);               \
+}
+
+/* IO definitions (access restrictions to peripheral registers) */
+/**
+    \defgroup CMSIS_glob_defs CMSIS Global Defines
+
+    <strong>IO Type Qualifiers</strong> are used
+    \li to specify the access to peripheral variables.
+    \li for automatic generation of peripheral register debug information.
+*/
+#ifdef __cplusplus
+  #define   __I     volatile             /*!< Defines 'read only' permissions */
+#else
+  #define   __I     volatile const       /*!< Defines 'read only' permissions */
+#endif
+#define     __O     volatile             /*!< Defines 'write only' permissions */
+#define     __IO    volatile             /*!< Defines 'read / write' permissions */
+
+/* following defines should be used for structure members */
+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */
+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
+
+/*@} end of group Cortex_M */
+
 /*----------------------------------------------------------------------------
   Define clocks
  *----------------------------------------------------------------------------*/
@@ -68,6 +167,119 @@
 }
 
 /*----------------------------------------------------------------------------
+  UART functions
+ *----------------------------------------------------------------------------*/
+ 
+/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/
+typedef struct
+{
+  __IOM  uint32_t  DATA;                     /* Offset: 0x000 (R/W) Data Register    */
+  __IOM  uint32_t  STATE;                    /* Offset: 0x004 (R/W) Status Register  */
+  __IOM  uint32_t  CTRL;                     /* Offset: 0x008 (R/W) Control Register */
+  union {
+    __IM   uint32_t  INTSTATUS;              /* Offset: 0x00C (R/ ) Interrupt Status Register */
+    __OM   uint32_t  INTCLEAR;               /* Offset: 0x00C ( /W) Interrupt Clear Register  */
+    };
+  __IOM  uint32_t  BAUDDIV;                  /* Offset: 0x010 (R/W) Baudrate Divider Register */
+
+} CMSDK_UART_TypeDef;
+
+/* CMSDK_UART DATA Register Definitions */
+#define CMSDK_UART_DATA_Pos               0                                                  /* CMSDK_UART_DATA_Pos: DATA Position */
+#define CMSDK_UART_DATA_Msk              (0xFFUL /*<< CMSDK_UART_DATA_Pos*/)                 /* CMSDK_UART DATA: DATA Mask */
+
+/* CMSDK_UART STATE Register Definitions */
+#define CMSDK_UART_STATE_RXOR_Pos         3                                                  /* CMSDK_UART STATE: RXOR Position */
+#define CMSDK_UART_STATE_RXOR_Msk        (0x1UL << CMSDK_UART_STATE_RXOR_Pos)                /* CMSDK_UART STATE: RXOR Mask */
+
+#define CMSDK_UART_STATE_TXOR_Pos         2                                                  /* CMSDK_UART STATE: TXOR Position */
+#define CMSDK_UART_STATE_TXOR_Msk        (0x1UL << CMSDK_UART_STATE_TXOR_Pos)                /* CMSDK_UART STATE: TXOR Mask */
+
+#define CMSDK_UART_STATE_RXBF_Pos         1                                                  /* CMSDK_UART STATE: RXBF Position */
+#define CMSDK_UART_STATE_RXBF_Msk        (0x1UL << CMSDK_UART_STATE_RXBF_Pos)                /* CMSDK_UART STATE: RXBF Mask */
+
+#define CMSDK_UART_STATE_TXBF_Pos         0                                                  /* CMSDK_UART STATE: TXBF Position */
+#define CMSDK_UART_STATE_TXBF_Msk        (0x1UL /*<< CMSDK_UART_STATE_TXBF_Pos*/)            /* CMSDK_UART STATE: TXBF Mask */
+
+/* CMSDK_UART CTRL Register Definitions */
+#define CMSDK_UART_CTRL_HSTM_Pos          6                                                  /* CMSDK_UART CTRL: HSTM Position */
+#define CMSDK_UART_CTRL_HSTM_Msk         (0x01UL << CMSDK_UART_CTRL_HSTM_Pos)                /* CMSDK_UART CTRL: HSTM Mask */
+
+#define CMSDK_UART_CTRL_RXORIRQEN_Pos     5                                                  /* CMSDK_UART CTRL: RXORIRQEN Position */
+#define CMSDK_UART_CTRL_RXORIRQEN_Msk    (0x01UL << CMSDK_UART_CTRL_RXORIRQEN_Pos)           /* CMSDK_UART CTRL: RXORIRQEN Mask */
+
+#define CMSDK_UART_CTRL_TXORIRQEN_Pos     4                                                  /* CMSDK_UART CTRL: TXORIRQEN Position */
+#define CMSDK_UART_CTRL_TXORIRQEN_Msk    (0x01UL << CMSDK_UART_CTRL_TXORIRQEN_Pos)           /* CMSDK_UART CTRL: TXORIRQEN Mask */
+
+#define CMSDK_UART_CTRL_RXIRQEN_Pos       3                                                  /* CMSDK_UART CTRL: RXIRQEN Position */
+#define CMSDK_UART_CTRL_RXIRQEN_Msk      (0x01UL << CMSDK_UART_CTRL_RXIRQEN_Pos)             /* CMSDK_UART CTRL: RXIRQEN Mask */
+
+#define CMSDK_UART_CTRL_TXIRQEN_Pos       2                                                  /* CMSDK_UART CTRL: TXIRQEN Position */
+#define CMSDK_UART_CTRL_TXIRQEN_Msk      (0x01UL << CMSDK_UART_CTRL_TXIRQEN_Pos)             /* CMSDK_UART CTRL: TXIRQEN Mask */
+
+#define CMSDK_UART_CTRL_RXEN_Pos          1                                                  /* CMSDK_UART CTRL: RXEN Position */
+#define CMSDK_UART_CTRL_RXEN_Msk         (0x01UL << CMSDK_UART_CTRL_RXEN_Pos)                /* CMSDK_UART CTRL: RXEN Mask */
+
+#define CMSDK_UART_CTRL_TXEN_Pos          0                                                  /* CMSDK_UART CTRL: TXEN Position */
+#define CMSDK_UART_CTRL_TXEN_Msk         (0x01UL /*<< CMSDK_UART_CTRL_TXEN_Pos*/)            /* CMSDK_UART CTRL: TXEN Mask */
+
+#define CMSDK_UART_INTSTATUS_RXORIRQ_Pos  3                                                  /* CMSDK_UART CTRL: RXORIRQ Position */
+#define CMSDK_UART_CTRL_RXORIRQ_Msk      (0x01UL << CMSDK_UART_INTSTATUS_RXORIRQ_Pos)        /* CMSDK_UART CTRL: RXORIRQ Mask */
+
+#define CMSDK_UART_CTRL_TXORIRQ_Pos       2                                                  /* CMSDK_UART CTRL: TXORIRQ Position */
+#define CMSDK_UART_CTRL_TXORIRQ_Msk      (0x01UL << CMSDK_UART_CTRL_TXORIRQ_Pos)             /* CMSDK_UART CTRL: TXORIRQ Mask */
+
+#define CMSDK_UART_CTRL_RXIRQ_Pos         1                                                  /* CMSDK_UART CTRL: RXIRQ Position */
+#define CMSDK_UART_CTRL_RXIRQ_Msk        (0x01UL << CMSDK_UART_CTRL_RXIRQ_Pos)               /* CMSDK_UART CTRL: RXIRQ Mask */
+
+#define CMSDK_UART_CTRL_TXIRQ_Pos         0                                                  /* CMSDK_UART CTRL: TXIRQ Position */
+#define CMSDK_UART_CTRL_TXIRQ_Msk        (0x01UL /*<< CMSDK_UART_CTRL_TXIRQ_Pos*/)           /* CMSDK_UART CTRL: TXIRQ Mask */
+
+/* CMSDK_UART BAUDDIV Register Definitions */
+#define CMSDK_UART_BAUDDIV_Pos            0                                                  /* CMSDK_UART BAUDDIV: BAUDDIV Position */
+#define CMSDK_UART_BAUDDIV_Msk           (0xFFFFFUL /*<< CMSDK_UART_BAUDDIV_Pos*/)           /* CMSDK_UART BAUDDIV: BAUDDIV Mask */
+
+
+/* ================================================================================ */
+/* ================             Peripheral declaration             ================ */
+/* ================================================================================ */
+
+#define SERIAL_BASE_ADDRESS	(0xA8000000ul)
+
+#define SERIAL_DATA  *((volatile unsigned *) SERIAL_BASE_ADDRESS)
+
+
+#define SOFTWARE_MARK  *((volatile unsigned *) (SERIAL_BASE_ADDRESS+4))
+
+void start_ipss_measurement()
+{
+  SOFTWARE_MARK = 1;
+}
+
+void stop_ipss_measurement()
+{
+  SOFTWARE_MARK = 0;
+}
+
+int stdout_putchar(char txchar)
+{
+    SERIAL_DATA = txchar; 
+    return(txchar);                    
+}
+
+int stderr_putchar(char txchar)
+{
+    return stdout_putchar(txchar);
+}
+
+void ttywrch (int ch)
+{
+	stdout_putchar(ch);
+}
+
+
+
+/*----------------------------------------------------------------------------
   System initialization function
  *----------------------------------------------------------------------------*/
 void SystemInit (void)
@@ -78,7 +290,7 @@
 #endif
 
 #if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \
-    (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U))
+    (defined (__MVE_USED) && (__MVE_USED == 1U))
   SCB->CPACR |= ((3U << 10U*2U) |           /* enable CP10 Full Access */
                  (3U << 11U*2U)  );         /* enable CP11 Full Access */
 #endif
@@ -87,17 +299,454 @@
   SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
 #endif
 
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-  //TZ_SAU_Setup();
-#endif
-
-  SystemCoreClock = SYSTEM_CLOCK;
-
-  //Disable debug
-  //DEBUG_DEMCR &=~ DEBUG_TRCENA;
 
   // enable DL branch cache
   CCR |= CCR_DL;
   __ISB();
 
+
 }
+
+__attribute__((constructor(255)))
+void platform_init(void)
+{
+    printf("\n_[TEST START]____________________________________________________\n");
+}
+
+
+#if __IS_COMPILER_ARM_COMPILER_6__
+__asm(".global __use_no_semihosting\n\t");
+#   ifndef __MICROLIB
+__asm(".global __ARM_use_no_argv\n\t");
+#   endif
+#endif
+
+/**
+   Writes the character specified by c (converted to an unsigned char) to
+   the output stream pointed to by stream, at the position indicated by the
+   associated file position indicator (if defined), and advances the
+   indicator appropriately. If the file position indicator is not defined,
+   the character is appended to the output stream.
+ 
+  \param[in] c       Character
+  \param[in] stream  Stream handle
+ 
+  \return    The character written. If a write error occurs, the error
+             indicator is set and fputc returns EOF.
+*/
+__attribute__((weak))
+int fputc (int c, FILE * stream) 
+{
+    if (stream == &__stdout) {
+        return (stdout_putchar(c));
+    }
+
+    if (stream == &__stderr) {
+        return (stderr_putchar(c));
+    }
+
+    return (-1);
+}
+
+#ifndef GCCCOMPILER
+/* IO device file handles. */
+#define FH_STDIN    0x8001
+#define FH_STDOUT   0x8002
+#define FH_STDERR   0x8003
+
+const char __stdin_name[]  = ":STDIN";
+const char __stdout_name[] = ":STDOUT";
+const char __stderr_name[] = ":STDERR";
+
+#define RETARGET_SYS        1
+#define RTE_Compiler_IO_STDOUT  1
+#define RTE_Compiler_IO_STDERR  1
+/**
+  Defined in rt_sys.h, this function opens a file.
+ 
+  The _sys_open() function is required by fopen() and freopen(). These
+  functions in turn are required if any file input/output function is to
+  be used.
+  The openmode parameter is a bitmap whose bits mostly correspond directly to
+  the ISO mode specification. Target-dependent extensions are possible, but
+  freopen() must also be extended.
+ 
+  \param[in] name     File name
+  \param[in] openmode Mode specification bitmap
+ 
+  \return    The return value is ?1 if an error occurs.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+FILEHANDLE _sys_open (const char *name, int openmode) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)openmode;
+#endif
+ 
+  if (name == NULL) {
+    return (-1);
+  }
+ 
+  if (name[0] == ':') {
+    if (strcmp(name, ":STDIN") == 0) {
+      return (FH_STDIN);
+    }
+    if (strcmp(name, ":STDOUT") == 0) {
+      return (FH_STDOUT);
+    }
+    if (strcmp(name, ":STDERR") == 0) {
+      return (FH_STDERR);
+    }
+    return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_open(name, openmode));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function closes a file previously opened
+  with _sys_open().
+  
+  This function must be defined if any input/output function is to be used.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is 0 if successful. A nonzero value indicates
+             an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_close (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_close(fh));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function writes the contents of a buffer to a file
+  previously opened with _sys_open().
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return    The return value is either:
+             - a positive number representing the number of characters not
+               written (so any nonzero return value denotes a failure of
+               some sort)
+             - a negative number indicating an error.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_write (FILEHANDLE fh, const uint8_t *buf, uint32_t len, int mode) {
+#if (defined(RTE_Compiler_IO_STDOUT) || defined(RTE_Compiler_IO_STDERR))
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+#ifdef RTE_Compiler_IO_STDOUT
+      for (; len; len--) {
+        ch = *buf++;
+
+        stdout_putchar(ch);
+      }
+#endif
+      return (0);
+    case FH_STDERR:
+#ifdef RTE_Compiler_IO_STDERR
+      for (; len; len--) {
+        ch = *buf++;
+
+        stderr_putchar(ch);
+      }
+#endif
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_write(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function reads the contents of a file into a buffer.
+ 
+  Reading up to and including the last byte of data does not turn on the EOF
+  indicator. The EOF indicator is only reached when an attempt is made to read
+  beyond the last byte of data. The target-independent code is capable of
+  handling:
+    - the EOF indicator being returned in the same read as the remaining bytes
+      of data that precede the EOF
+    - the EOF indicator being returned on its own after the remaining bytes of
+      data have been returned in a previous read.
+ 
+  \note The mode parameter is here for historical reasons. It contains
+        nothing useful and must be ignored.
+ 
+  \param[in] fh   File handle
+  \param[in] buf  Data buffer
+  \param[in] len  Data length
+  \param[in] mode Ignore this parameter
+ 
+  \return     The return value is one of the following:
+              - The number of bytes not read (that is, len - result number of
+                bytes were read).
+              - An error indication.
+              - An EOF indicator. The EOF indication involves the setting of
+                0x80000000 in the normal result.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_read (FILEHANDLE fh, uint8_t *buf, uint32_t len, int mode) {
+#ifdef RTE_Compiler_IO_STDIN
+  int ch;
+#elif (!defined(RTE_Compiler_IO_File))
+  (void)buf;
+  (void)len;
+#endif
+  (void)mode;
+ 
+  switch (fh) {
+    case FH_STDIN:
+#ifdef RTE_Compiler_IO_STDIN
+      ch = stdin_getchar();
+      if (ch < 0) {
+        return ((int)(len | 0x80000000U));
+      }
+      *buf++ = (uint8_t)ch;
+#if (STDIN_ECHO != 0)
+      stdout_putchar(ch);
+#endif
+      len--;
+      return ((int)(len));
+#else
+      return ((int)(len | 0x80000000U));
+#endif
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_read(fh, buf, len));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+
+ 
+ 
+/**
+  Defined in rt_sys.h, this function determines if a file handle identifies
+  a terminal.
+ 
+  When a file is connected to a terminal device, this function is used to
+  provide unbuffered behavior by default (in the absence of a call to
+  set(v)buf) and to prohibit seeking.
+ 
+  \param[in] fh File handle
+ 
+  \return    The return value is one of the following values:
+             - 0:     There is no interactive device.
+             - 1:     There is an interactive device.
+             - other: An error occurred.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_istty (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (1);
+    case FH_STDOUT:
+      return (1);
+    case FH_STDERR:
+      return (1);
+  }
+ 
+  return (0);
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function puts the file pointer at offset pos from
+  the beginning of the file.
+ 
+  This function sets the current read or write position to the new location pos
+  relative to the start of the current file fh.
+ 
+  \param[in] fh  File handle
+  \param[in] pos File pointer offset
+ 
+  \return    The result is:
+             - non-negative if no error occurs
+             - negative if an error occurs
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+int _sys_seek (FILEHANDLE fh, long pos) {
+#if (!defined(RTE_Compiler_IO_File))
+  (void)pos;
+#endif
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (-1);
+    case FH_STDOUT:
+      return (-1);
+    case FH_STDERR:
+      return (-1);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_seek(fh, (uint32_t)pos));
+#endif
+#else
+  return (-1);
+#endif
+}
+#endif
+ 
+ 
+/**
+  Defined in rt_sys.h, this function returns the current length of a file.
+ 
+  This function is used by _sys_seek() to convert an offset relative to the
+  end of a file into an offset relative to the beginning of the file.
+  You do not have to define _sys_flen() if you do not intend to use fseek().
+  If you retarget at system _sys_*() level, you must supply _sys_flen(),
+  even if the underlying system directly supports seeking relative to the
+  end of a file.
+ 
+  \param[in] fh File handle
+ 
+  \return    This function returns the current length of the file fh,
+             or a negative error indicator.
+*/
+#ifdef RETARGET_SYS
+__attribute__((weak))
+long _sys_flen (FILEHANDLE fh) {
+ 
+  switch (fh) {
+    case FH_STDIN:
+      return (0);
+    case FH_STDOUT:
+      return (0);
+    case FH_STDERR:
+      return (0);
+  }
+ 
+#ifdef RTE_Compiler_IO_File
+#ifdef RTE_Compiler_IO_File_FS
+  return (__sys_flen(fh));
+#endif
+#else
+  return (0);
+#endif
+}
+#endif
+ 
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
+
+#endif
+
+#define log_str(...)		                            \
+    do {                                                \
+        const char *pchSrc = __VA_ARGS__;               \
+        uint_fast16_t hwSize = sizeof(__VA_ARGS__);     \
+        do {                                            \
+            stdout_putchar(*pchSrc++);                  \
+        } while(--hwSize);                              \
+    } while(0)
+
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#else
+void _sys_exit(int n)
+{
+    (void)n;
+	log_str("\n");
+	log_str("_[TEST COMPLETE]_________________________________________________\n");
+	log_str("\n\n");
+	stdout_putchar(4);
+	while(1);
+}
+#endif 
+
+extern void ttywrch (int ch);
+__attribute__((weak))
+void _ttywrch (int ch) 
+{
+    ttywrch(ch);
+}
+
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/lnk.ld
index ec3a401..4c7b42c 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/lnk.ld
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/lnk.ld
@@ -1,10 +1,10 @@
-#include "mem_ARMCA5.h" 
+#include "mem_ARMCA32.h" 
 
 MEMORY
 {
   ROM (rx)   : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
-  L_TTB (rw) : ORIGIN = __TTB_BASE, LENGTH = __TTB_SIZE 
   RAM (rwx)  : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
+  L_TTB (rw) : ORIGIN = __TTB_BASE, LENGTH = __TTB_SIZE 
 }
 
 ENTRY(Reset_Handler)
@@ -78,16 +78,10 @@
         __zero_table_end__ = .;
     } > ROM
 
-    __etext = .;
         
-    .ttb :
-    {
-        Image$$TTB$$ZI$$Base = .;
-        . += __TTB_SIZE;
-        Image$$TTB$$ZI$$Limit = .;
-    } > L_TTB
 
-    .data : AT (__etext)
+
+    .data : 
     {
         Image$$RW_DATA$$Base = .;
         __data_start__ = .;
@@ -120,11 +114,13 @@
         /* All data end */
         __data_end__ = .;
 
-    } > RAM
+    } > ROM AT > RAM
 
+    __etext = ADDR(.data);
     
-    .bss ALIGN(0x400):
+    .bss :
     {
+        . = ALIGN(0x400);
         Image$$ZI_DATA$$Base = .;
         __bss_start__ = .;
         *(.bss)
@@ -134,7 +130,7 @@
         Image$$ZI_DATA$$Limit = .;
         __end__ = .;
         end = __end__;
-    } > RAM
+    } > RAM AT > RAM
 
 #if defined(__HEAP_SIZE) && (__HEAP_SIZE > 0)    
     .heap (NOLOAD):
@@ -180,4 +176,11 @@
         Image$$UND_STACK$$ZI$$Limit = .;
         
     } > RAM
+
+    .ttb :
+    {
+        Image$$TTB$$ZI$$Base = .;
+        . += __TTB_SIZE;
+        Image$$TTB$$ZI$$Limit = .;
+    } > L_TTB
 }
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/mem_ARMCA5.h b/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/mem_ARMCA32.h
similarity index 95%
rename from CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/mem_ARMCA5.h
rename to CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/mem_ARMCA32.h
index 44a1b31..6337004 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/mem_ARMCA5.h
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/mem_ARMCA32.h
@@ -25,8 +25,8 @@
  * limitations under the License.
  */
 
-#ifndef __MEM_ARMCA5_H
-#define __MEM_ARMCA5_H
+#ifndef __MEM_ARMCA32_H
+#define __MEM_ARMCA32_H
 
 /*----------------------------------------------------------------------------
   User Stack & Heap size definition
@@ -68,8 +68,8 @@
 //   </h>
 // </h>
  *----------------------------------------------------------------------------*/
-#define __RAM_BASE       0x80400000
-#define __RAM_SIZE       0x00300000
+#define __RAM_BASE       0x80500000
+#define __RAM_SIZE       0x00400000
 
 #define __RW_DATA_SIZE   0x00100000
 #define __ZI_DATA_SIZE   0x000F0000
@@ -94,7 +94,7 @@
 //   <o1> TTB Size (in Bytes) <0x0-0xFFFFFFFF:8>
 // </h>
  *----------------------------------------------------------------------------*/
-#define __TTB_BASE       0x80800000
+#define __TTB_BASE       0x80A00000
 #define __TTB_SIZE       0x00005000
 
 #endif /* __MEM_ARMCA5_H */
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/system_ARMCA5.h b/CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/system_ARMCA32.h
similarity index 100%
rename from CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/system_ARMCA5.h
rename to CMSIS/DSP/Platforms/IPSS/ARMCA32/LinkScripts/GCC/system_ARMCA32.h
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCA32/Startup/GCC/startup_ARMCA5.c b/CMSIS/DSP/Platforms/IPSS/ARMCA32/Startup/GCC/startup_ARMCA32.c
similarity index 95%
rename from CMSIS/DSP/Platforms/IPSS/ARMCA32/Startup/GCC/startup_ARMCA5.c
rename to CMSIS/DSP/Platforms/IPSS/ARMCA32/Startup/GCC/startup_ARMCA32.c
index 7772401..0f60dfa 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCA32/Startup/GCC/startup_ARMCA5.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCA32/Startup/GCC/startup_ARMCA32.c
@@ -25,7 +25,7 @@
  * limitations under the License.
  */
 
-#include <ARMCA5.h>
+#include <ARMCA32.h>
 
 /*----------------------------------------------------------------------------
   Definitions
@@ -95,14 +95,14 @@
   "BIC     R0, R0, #(0x1 << 12)                    \n"  // Clear I bit 12 to disable I Cache
   "BIC     R0, R0, #(0x1 <<  2)                    \n"  // Clear C bit  2 to disable D Cache
   "BIC     R0, R0, #0x1                            \n"  // Clear M bit  0 to disable MMU
-  "BIC     R0, R0, #(0x1 << 11)                    \n"  // Clear Z bit 11 to disable branch prediction
-  "BIC     R0, R0, #(0x1 << 13)                    \n"  // Clear V bit 13 to disable hivecs
+  //"BIC     R0, R0, #(0x1 << 11)                    \n"  // Clear Z bit 11 to disable branch prediction
+  //"BIC     R0, R0, #(0x1 << 13)                    \n"  // Clear V bit 13 to disable hivecs
   "MCR     p15, 0, R0, c1, c0, 0                   \n"  // Write value back to CP15 System Control register
   "ISB                                             \n"
 
   // Configure ACTLR
   "MRC     p15, 0, r0, c1, c0, 1                   \n"  // Read CP15 Auxiliary Control Register
-  "ORR     r0, r0, #(1 <<  1)                      \n"  // Enable L2 prefetch hint (UNK/WI since r4p1)
+  "ORR     r0, r0, #(1 <<  6)                      \n"  // Enable L2 prefetch hint (UNK/WI since r4p1)
   "MCR     p15, 0, r0, c1, c0, 1                   \n"  // Write CP15 Auxiliary Control Register
 
   // Set Vector Base Address Register (VBAR) to point to this application's vector table
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCA32/system_ARMCA32.c b/CMSIS/DSP/Platforms/IPSS/ARMCA32/system_ARMCA32.c
index aaa698c..26dfe1f 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCA32/system_ARMCA32.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCA32/system_ARMCA32.c
@@ -31,7 +31,15 @@
 #include <stdlib.h>
 #include <assert.h>
 
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
 #include <rt_sys.h>
+#else
+#define GCCCOMPILER
+struct __FILE {int handle;};
+FILE __stdout;
+FILE __stdin;
+FILE __stderr;
+#endif
 
 #include "ARMCA32.h"
 #include "RTE_Components.h"
@@ -164,6 +172,7 @@
     return (-1);
 }
 
+#ifndef GCCCOMPILER
 /* IO device file handles. */
 #define FH_STDIN    0x8001
 #define FH_STDOUT   0x8002
@@ -510,7 +519,22 @@
 }
 #endif
  
+#else /* gcc compiler */
+int _write(int   file,
+        char *ptr,
+        int   len)
+{
+  int i;
+  (void)file;
+  
+  for(i=0; i < len;i++)
+  {
+     stdout_putchar(*ptr++);
+  }
+  return len;
+}
 
+#endif
 
 #define log_str(...)                                \
     do {                                                \
@@ -521,6 +545,17 @@
         } while(--hwSize);                              \
     } while(0)
 
+#ifdef GCCCOMPILER
+void _exit(int return_code)
+{
+    (void)return_code;
+    log_str("\n");
+    log_str("_[TEST COMPLETE]_________________________________________________\n");
+    log_str("\n\n");
+    stdout_putchar(4);
+    while(1);
+}
+#else
 void _sys_exit(int n)
 {
     (void)n;
@@ -530,6 +565,8 @@
   stdout_putchar(4);
   while(1);
 }
+#endif 
+
 
 extern void ttywrch (int ch);
 __attribute__((weak))
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCM0/Startup/GCC/support.c b/CMSIS/DSP/Platforms/IPSS/ARMCM0/Startup/GCC/support.c
index 740f6b0..6a6d4f4 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCM0/Startup/GCC/support.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCM0/Startup/GCC/support.c
@@ -9,7 +9,7 @@
 void __malloc_lock() ;
 void __malloc_unlock();
 
-char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+char __end__, __HeapLimit;  // make sure to define these symbols in linker command file
 #ifdef   __cplusplus
 }
 #endif
@@ -18,7 +18,7 @@
 
 //! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
 char * sbrk(int incr) {
-    static char *currentHeapEnd = &__HeapBase;
+    static char *currentHeapEnd = &__end__;
     char *previousHeapEnd = currentHeapEnd;
     if (currentHeapEnd + incr > &__HeapLimit) {
         return (char *)-1; // the malloc-family routine that called sbrk will return 0
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCM33/Startup/GCC/support.c b/CMSIS/DSP/Platforms/IPSS/ARMCM33/Startup/GCC/support.c
index 740f6b0..6a6d4f4 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCM33/Startup/GCC/support.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCM33/Startup/GCC/support.c
@@ -9,7 +9,7 @@
 void __malloc_lock() ;
 void __malloc_unlock();
 
-char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+char __end__, __HeapLimit;  // make sure to define these symbols in linker command file
 #ifdef   __cplusplus
 }
 #endif
@@ -18,7 +18,7 @@
 
 //! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
 char * sbrk(int incr) {
-    static char *currentHeapEnd = &__HeapBase;
+    static char *currentHeapEnd = &__end__;
     char *previousHeapEnd = currentHeapEnd;
     if (currentHeapEnd + incr > &__HeapLimit) {
         return (char *)-1; // the malloc-family routine that called sbrk will return 0
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCM4/Startup/GCC/support.c b/CMSIS/DSP/Platforms/IPSS/ARMCM4/Startup/GCC/support.c
index 740f6b0..6a6d4f4 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCM4/Startup/GCC/support.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCM4/Startup/GCC/support.c
@@ -9,7 +9,7 @@
 void __malloc_lock() ;
 void __malloc_unlock();
 
-char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+char __end__, __HeapLimit;  // make sure to define these symbols in linker command file
 #ifdef   __cplusplus
 }
 #endif
@@ -18,7 +18,7 @@
 
 //! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
 char * sbrk(int incr) {
-    static char *currentHeapEnd = &__HeapBase;
+    static char *currentHeapEnd = &__end__;
     char *previousHeapEnd = currentHeapEnd;
     if (currentHeapEnd + incr > &__HeapLimit) {
         return (char *)-1; // the malloc-family routine that called sbrk will return 0
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMCM7/Startup/GCC/support.c b/CMSIS/DSP/Platforms/IPSS/ARMCM7/Startup/GCC/support.c
index 740f6b0..6a6d4f4 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMCM7/Startup/GCC/support.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMCM7/Startup/GCC/support.c
@@ -9,7 +9,7 @@
 void __malloc_lock() ;
 void __malloc_unlock();
 
-char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+char __end__, __HeapLimit;  // make sure to define these symbols in linker command file
 #ifdef   __cplusplus
 }
 #endif
@@ -18,7 +18,7 @@
 
 //! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
 char * sbrk(int incr) {
-    static char *currentHeapEnd = &__HeapBase;
+    static char *currentHeapEnd = &__end__;
     char *previousHeapEnd = currentHeapEnd;
     if (currentHeapEnd + incr > &__HeapLimit) {
         return (char *)-1; // the malloc-family routine that called sbrk will return 0
diff --git a/CMSIS/DSP/Platforms/IPSS/ARMv81MML/Startup/GCC/support.c b/CMSIS/DSP/Platforms/IPSS/ARMv81MML/Startup/GCC/support.c
index 740f6b0..6a6d4f4 100755
--- a/CMSIS/DSP/Platforms/IPSS/ARMv81MML/Startup/GCC/support.c
+++ b/CMSIS/DSP/Platforms/IPSS/ARMv81MML/Startup/GCC/support.c
@@ -9,7 +9,7 @@
 void __malloc_lock() ;
 void __malloc_unlock();
 
-char __HeapBase, __HeapLimit;  // make sure to define these symbols in linker command file
+char __end__, __HeapLimit;  // make sure to define these symbols in linker command file
 #ifdef   __cplusplus
 }
 #endif
@@ -18,7 +18,7 @@
 
 //! sbrk/_sbrk version supporting reentrant newlib (depends upon above symbols defined by linker control file).
 char * sbrk(int incr) {
-    static char *currentHeapEnd = &__HeapBase;
+    static char *currentHeapEnd = &__end__;
     char *previousHeapEnd = currentHeapEnd;
     if (currentHeapEnd + incr > &__HeapLimit) {
         return (char *)-1; // the malloc-family routine that called sbrk will return 0
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
index 27ccc75..2d85ab7 100644
--- a/CMSIS/DSP/Testing/CMakeLists.txt
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -110,6 +110,12 @@
 add_library(TestingLib STATIC)
 add_library(FrameworkLib STATIC)
 
+if (DISABLEFLOAT16)
+    target_compile_definitions(TestingLib PRIVATE DISABLEFLOAT16) 
+    target_compile_definitions(FrameworkLib PRIVATE DISABLEFLOAT16) 
+endif()
+
+
 if (BENCHMARK)
 
 set(STANDARDBENCH ON)
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Error.h b/CMSIS/DSP/Testing/FrameworkInclude/Error.h
index 1e25aec..eddb6e4 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Error.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Error.h
@@ -27,8 +27,8 @@
  */
 #ifndef _ASSERT_H_
 #define _ASSERT_H_
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 #include <exception>
 #include "Test.h"
 #include "Pattern.h"
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h b/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
index 9f885d9..1ba68c9 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
@@ -29,8 +29,8 @@
 #define _FPGA_H_
 #include <string>
 #include <cstdlib>
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 namespace Client
 {
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h b/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
index 5bd076a..d083e3d 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
@@ -30,8 +30,8 @@
 
 #include "Test.h"
 #include "Pattern.h"
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 namespace Client {
 
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h b/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
index c1e4261..91759df 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
@@ -30,8 +30,8 @@
 #include <string>
 #include <memory>
 #include <cstdio>
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 
 namespace Client
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Test.h b/CMSIS/DSP/Testing/FrameworkInclude/Test.h
index 0df8f21..55317a0 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Test.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Test.h
@@ -31,8 +31,8 @@
 #include <cstdlib>
 #include <vector>
 #include <cstdio>
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 
 // This special value means no limit on the number of samples.
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Timing.h b/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
index 9036934..f8a0c18 100644
--- a/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
@@ -2,8 +2,8 @@
 #define _TIMING_H_
 
 #include "Test.h"
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 void initCycleMeasurement();
 void cycleMeasurementStart();
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Error.cpp b/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
index a97b8b2..bd9a488 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
@@ -27,8 +27,8 @@
  */
 #include <cstdlib> 
 #include <cstdio>
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 #include "Error.h"
 
 
diff --git a/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp b/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
index 3c8eecc..22b29f6 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
@@ -37,8 +37,8 @@
 #include <cstdio>
 
 #include "Generators.h"
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 using namespace std;
 
diff --git a/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp b/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
index f5c1bbb..010a25e 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
@@ -37,7 +37,7 @@
 #include "IORunner.h"
 #include "Error.h"
 #include "Timing.h"
-#include "arm_math.h"
+#include "arm_math_types.h"
 #include "Calibrate.h"
 
 #ifdef CORTEXA
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp b/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
index b04d1d8..a15052f 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
@@ -30,8 +30,8 @@
  */
 #include "Test.h"
 #include "Pattern.h"
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 namespace Client {
 
diff --git a/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp b/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
index 4fdca91..8157408 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
@@ -29,8 +29,8 @@
  * limitations under the License.
  */
 #include "Test.h"
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 namespace Client
 {
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp b/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
index acda167..e46f940 100644
--- a/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
+++ b/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
@@ -37,8 +37,8 @@
 #include <cstdlib>
 #include "Generators.h"
 #include "Semihosting.h"
-#include "arm_math.h"
-#include "arm_math_f16.h"
+#include "arm_math_types.h"
+#include "arm_math_types_f16.h"
 
 
 namespace Client
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h
index 8489f74..d6a241b 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class BIQUADF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h
index 4b044d8..f54b55d 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BIQUADF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class BIQUADF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h
index 1b13041..04164be 100644
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicMathsBenchmarksF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h
index b054ed8..af33738 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicMathsBenchmarksQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h
index be3eec8..29ac512 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicMathsBenchmarksQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h
index 72207f7..84962a4 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BasicMathsBenchmarksQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicMathsBenchmarksQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h
index be0b18d..f89b1bf 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h
index a803253..d3a5f01 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h
index e8fe7c8..64502c2 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ7.h
index 1ab4633..b52d96e 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/BinaryQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h
index 433b42a..2a2c2c6 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/complex_math_functions.h"
+
 class ComplexMathsBenchmarksF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h
index 00700d0..a47738b 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/complex_math_functions.h"
+
 class ComplexMathsBenchmarksQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h
index b44f389..17a0329 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ComplexMathsBenchmarksQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/complex_math_functions.h"
+
 class ComplexMathsBenchmarksQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h
index 8adcbd2..50c5974 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/controller_functions.h"
+
 class ControllerF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h
index 6f7537e..086b7eb 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/controller_functions.h"
+
 class ControllerQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h
index f4a55cb..e20bca1 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/ControllerQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/controller_functions.h"
+
 class ControllerQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h
index acd0d0b..923bf7c 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class DECIMF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h
index c4697ac..2750513 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class DECIMQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h
index f122a30..d32d56d 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/DECIMQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class DECIMQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h
index 9be0955..2c3cc06 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FIRF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h
index f5b0ad5..b82e490 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h
index 943c7f5..b698545 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FIRQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h
index d1064fd..15b1ff8 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/fast_math_functions.h"
+
 class FastMathF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h
index 631fba4..2d8c48d 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/fast_math_functions.h"
+
 class FastMathQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h
index 854ae74..062ab01 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/FastMathQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/fast_math_functions.h"
+
 class FastMathQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h
index b2a5b39..e4e999f 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h
index 0cb92c7..3ea883a 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h
index ed595cb..4cfccf2 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h
index 3c9060d..2bfef61 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/MISCQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h
index 370a0df..150cf73 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportBarF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportBarF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h
index 14517db..0a4befc 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h
index be82fd2..9220092 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h
index b72513a..78e9560 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h
index c0f1156..05681c9 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/SupportQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h
index 7df040e..0b274d5 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/TransformF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h
index 9736a70..02f430c 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h
index 2abfc1d..431f90b 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/TransformQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h
index 8a40758..91d07c4 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h
index a047a66..f909379 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h
index 8d08b9f..3eeb5d7 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h
index 02a2fad..84ff23b 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ7.h b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ7.h
index 4076ca5..656e25b 100755
--- a/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ7.h
+++ b/CMSIS/DSP/Testing/Include/Benchmarks/UnaryQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BIQUADF32.h b/CMSIS/DSP/Testing/Include/Tests/BIQUADF32.h
index ad285da..c17c990 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BIQUADF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BIQUADF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class BIQUADF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BIQUADF64.h b/CMSIS/DSP/Testing/Include/Tests/BIQUADF64.h
index 27fddc9..143eb87 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BIQUADF64.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BIQUADF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class BIQUADF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BIQUADQ15.h b/CMSIS/DSP/Testing/Include/Tests/BIQUADQ15.h
index c5692c5..49e9c86 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BIQUADQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BIQUADQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class BIQUADQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BIQUADQ31.h b/CMSIS/DSP/Testing/Include/Tests/BIQUADQ31.h
index 3e70b0b..b5d8d3a 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BIQUADQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BIQUADQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class BIQUADQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BasicTestsF16.h b/CMSIS/DSP/Testing/Include/Tests/BasicTestsF16.h
index 1390c4f..eda59ba 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BasicTestsF16.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BasicTestsF16.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions_f16.h"
+
 class BasicTestsF16:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h
index 944a5c3..f4465d6 100644
--- a/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BasicTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ15.h
index c2cdf41..47ef05a 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ31.h
index 96ab407..69e118f 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ7.h
index 3ef6c84..b580a36 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BasicTestsQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class BasicTestsQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BayesF32.h b/CMSIS/DSP/Testing/Include/Tests/BayesF32.h
index 892538f..f839dd9 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BayesF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BayesF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/bayes_functions.h"
+
 class BayesF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsF32.h
index f9a244e..c0ddd11 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ15.h
index 457d453..1b52438 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ31.h
index 5e75104..41459e4 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ7.h
index a9fa1f1..21f1321 100755
--- a/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/BinaryTestsQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class BinaryTestsQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ComplexTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/ComplexTestsF32.h
index 61036a4..a54f06b 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ComplexTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ComplexTestsF32.h
@@ -1,5 +1,9 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/complex_math_functions.h"
+
+
 class ComplexTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ15.h
index 4ddc789..7429179 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ15.h
@@ -1,5 +1,9 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/complex_math_functions.h"
+
+
 class ComplexTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ31.h
index 359d8f7..9f53c84 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ComplexTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/complex_math_functions.h"
+
 class ComplexTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/DECIMF32.h b/CMSIS/DSP/Testing/Include/Tests/DECIMF32.h
index c54ff15..e376d9c 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DECIMF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DECIMF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class DECIMF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/DECIMQ15.h b/CMSIS/DSP/Testing/Include/Tests/DECIMQ15.h
index 5dd15db..4a0efb3 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DECIMQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DECIMQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class DECIMQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/DECIMQ31.h b/CMSIS/DSP/Testing/Include/Tests/DECIMQ31.h
index 01179ae..00fa702 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DECIMQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DECIMQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class DECIMQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h
index fdddaed..08a2b6c 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/distance_functions.h"
+
 class DistanceTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h
index e14f16e..0dfdc2c 100755
--- a/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/DistanceTestsU32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/distance_functions.h"
+
 class DistanceTestsU32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryF32.h b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryF32.h
index f3a4ef2..e6d4385 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryF32.h
@@ -6,6 +6,9 @@
   correspond to what is used for the test suite.
 
 */
+
+#include "dsp/basic_math_functions.h"
+
 class ExampleCategoryF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ15.h b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ15.h
index 7993bde..db7f13a 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class ExampleCategoryQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ31.h b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ31.h
index e3a15b4..41d932e 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ31.h
@@ -1,5 +1,9 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
+
 class ExampleCategoryQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ7.h b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ7.h
index 5d2b854..55db8b0 100755
--- a/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/ExampleCategoryQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/basic_math_functions.h"
+
 class ExampleCategoryQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FIRF32.h b/CMSIS/DSP/Testing/Include/Tests/FIRF32.h
index fd1ca73..bb7ed4a 100644
--- a/CMSIS/DSP/Testing/Include/Tests/FIRF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FIRF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FIRQ15.h b/CMSIS/DSP/Testing/Include/Tests/FIRQ15.h
index b17a6dd..28a41c6 100644
--- a/CMSIS/DSP/Testing/Include/Tests/FIRQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FIRQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FIRQ31.h b/CMSIS/DSP/Testing/Include/Tests/FIRQ31.h
index 92298ce..946a2c2 100644
--- a/CMSIS/DSP/Testing/Include/Tests/FIRQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FIRQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FIRQ7.h b/CMSIS/DSP/Testing/Include/Tests/FIRQ7.h
index 59bb345..6f81313 100644
--- a/CMSIS/DSP/Testing/Include/Tests/FIRQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FIRQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class FIRQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FastMathF32.h b/CMSIS/DSP/Testing/Include/Tests/FastMathF32.h
index 298a421..fb29fad 100755
--- a/CMSIS/DSP/Testing/Include/Tests/FastMathF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FastMathF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/fast_math_functions.h"
+
 class FastMathF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FastMathQ15.h b/CMSIS/DSP/Testing/Include/Tests/FastMathQ15.h
index df41880..08d51f6 100755
--- a/CMSIS/DSP/Testing/Include/Tests/FastMathQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FastMathQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/fast_math_functions.h"
+
 class FastMathQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/FastMathQ31.h b/CMSIS/DSP/Testing/Include/Tests/FastMathQ31.h
index dbcd05a..3c1837f 100755
--- a/CMSIS/DSP/Testing/Include/Tests/FastMathQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/FastMathQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/fast_math_functions.h"
+
 class FastMathQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h
index 304cc2f..5710e9d 100755
--- a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/interpolation_functions.h"
+
 class InterpolationTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h
index c0a02d2..0167f3a 100755
--- a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h
@@ -1,5 +1,9 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/interpolation_functions.h"
+
+
 class InterpolationTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h
index 55b1d18..5954da3 100755
--- a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/interpolation_functions.h"
+
 class InterpolationTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h
index 677bd5f..17a4a48 100755
--- a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/interpolation_functions.h"
+
 class InterpolationTestsQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/MISCF32.h b/CMSIS/DSP/Testing/Include/Tests/MISCF32.h
index e7402af..5253925 100755
--- a/CMSIS/DSP/Testing/Include/Tests/MISCF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/MISCF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/MISCQ15.h b/CMSIS/DSP/Testing/Include/Tests/MISCQ15.h
index f9a1821..8379b7c 100755
--- a/CMSIS/DSP/Testing/Include/Tests/MISCQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/MISCQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/MISCQ31.h b/CMSIS/DSP/Testing/Include/Tests/MISCQ31.h
index 6288c3d..97844d8 100755
--- a/CMSIS/DSP/Testing/Include/Tests/MISCQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/MISCQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/MISCQ7.h b/CMSIS/DSP/Testing/Include/Tests/MISCQ7.h
index ed68e1c..6eca866 100755
--- a/CMSIS/DSP/Testing/Include/Tests/MISCQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/MISCQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/filtering_functions.h"
+
 class MISCQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/SVMF32.h b/CMSIS/DSP/Testing/Include/Tests/SVMF32.h
index 6bb96e1..ff42769 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SVMF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SVMF32.h
@@ -1,5 +1,9 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/svm_functions.h"
+
+
 class SVMF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h
index 712d184..8fb638e 100755
--- a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/statistics_functions.h"
+
 class StatsTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF64.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF64.h
index eb54cb6..42b0f04 100755
--- a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF64.h
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/statistics_functions.h"
+
 class StatsTestsF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ15.h
index f2e7f32..b2c9b12 100755
--- a/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/statistics_functions.h"
+
 class StatsTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ31.h
index 04d554e..d1fce07 100755
--- a/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/statistics_functions.h"
+
 class StatsTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ7.h
index 74227a6..4817bf6 100755
--- a/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/statistics_functions.h"
+
 class StatsTestsQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h
index d7228ca..1d88904 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportBarTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportBarTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h
index f2dc55b..57486f7 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ15.h
index 4f942e7..8a37203 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ31.h
index 6959c47..e6ad476 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ7.h
index 32efad6..7b89158 100755
--- a/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/SupportTestsQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/support_functions.h"
+
 class SupportTestsQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformCF16.h b/CMSIS/DSP/Testing/Include/Tests/TransformCF16.h
index 528690f..b344a52 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformCF16.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformCF16.h
@@ -1,6 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
-#include "arm_math_f16.h"
+
+#include "dsp/transform_functions_f16.h"
+
 class TransformCF16:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformCF32.h b/CMSIS/DSP/Testing/Include/Tests/TransformCF32.h
index 3738964..c1cf023 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformCF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformCF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformCF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformCF64.h b/CMSIS/DSP/Testing/Include/Tests/TransformCF64.h
index e0e9c8b..1c53208 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformCF64.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformCF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformCF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformCQ15.h b/CMSIS/DSP/Testing/Include/Tests/TransformCQ15.h
index e1df0bf..df3aece 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformCQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformCQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformCQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformCQ31.h b/CMSIS/DSP/Testing/Include/Tests/TransformCQ31.h
index 50bab31..d55544f 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformCQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformCQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformCQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformRF32.h b/CMSIS/DSP/Testing/Include/Tests/TransformRF32.h
index 21b64df..5bc0098 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformRF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformRF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformRF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformRF64.h b/CMSIS/DSP/Testing/Include/Tests/TransformRF64.h
index 92f4121..2c19760 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformRF64.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformRF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformRF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformRQ15.h b/CMSIS/DSP/Testing/Include/Tests/TransformRQ15.h
index ec1c78b..05ac0bd 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformRQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformRQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformRQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/TransformRQ31.h b/CMSIS/DSP/Testing/Include/Tests/TransformRQ31.h
index 37158e6..f2109a5 100755
--- a/CMSIS/DSP/Testing/Include/Tests/TransformRQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/TransformRQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/transform_functions.h"
+
 class TransformRQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF32.h
index ce9308d..331e22e 100755
--- a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF32.h
+++ b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF32.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryTestsF32:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF64.h b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF64.h
index 8c548c8..32eae9b 100755
--- a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF64.h
+++ b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsF64.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryTestsF64:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ15.h
index bbe40c8..1e98280 100755
--- a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ15.h
+++ b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ15.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryTestsQ15:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ31.h
index a33ac92..4e48131 100755
--- a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ31.h
+++ b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ31.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryTestsQ31:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ7.h
index 1f8a99f..60ee22c 100755
--- a/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ7.h
+++ b/CMSIS/DSP/Testing/Include/Tests/UnaryTestsQ7.h
@@ -1,5 +1,8 @@
 #include "Test.h"
 #include "Pattern.h"
+
+#include "dsp/matrix_functions.h"
+
 class UnaryTestsQ7:public Client::Suite
     {
         public:
diff --git a/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp b/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
index 53de1c8..b36c1c5 100755
--- a/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Benchmarks/TransformF32.cpp
@@ -1,6 +1,5 @@
 #include "TransformF32.h"
 #include "Error.h"
-#include "arm_math.h"
 
     void TransformF32::test_cfft_f32()
     { 
diff --git a/CMSIS/DSP/Testing/Source/Tests/BasicTestsF16.cpp b/CMSIS/DSP/Testing/Source/Tests/BasicTestsF16.cpp
index ee64e1b..21312f1 100755
--- a/CMSIS/DSP/Testing/Source/Tests/BasicTestsF16.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/BasicTestsF16.cpp
@@ -2,7 +2,6 @@
 #include <stdio.h>
 #include "Error.h"
 
-#include "arm_math_f16.h"
 
 #define SNR_THRESHOLD 62
 #define SNR_DOTPROD_THRESHOLD 40
@@ -19,7 +18,6 @@
 #define GET_F16_PTR() \
 const float16_t *inp1=input1.ptr(); \
 const float16_t *inp2=input2.ptr(); \
-float16_t *refp=ref.ptr(); \
 float16_t *outp=output.ptr();
 
     void BasicTestsF16::test_add_f16()
@@ -71,6 +69,8 @@
 
         GET_F16_PTR();
 
+        (void)inp2;
+
         arm_negate_f16(inp1,outp,input1.nbSamples());
 
         ASSERT_EMPTY_TAIL(output);
@@ -86,6 +86,8 @@
 
         GET_F16_PTR();
 
+        (void)inp2;
+
         arm_offset_f16(inp1,0.5,outp,input1.nbSamples());
 
         ASSERT_EMPTY_TAIL(output);
@@ -101,6 +103,8 @@
 
         GET_F16_PTR();
 
+        (void)inp2;
+
         arm_scale_f16(inp1,0.5,outp,input1.nbSamples());
 
         ASSERT_EMPTY_TAIL(output);
@@ -136,6 +140,8 @@
 
         GET_F16_PTR();
 
+        (void)inp2;
+
         arm_abs_f16(inp1,outp,input1.nbSamples());
 
         ASSERT_EMPTY_TAIL(output);
@@ -152,7 +158,8 @@
       
        Testing::nbSamples_t nb=MAX_NB_SAMPLES; 
 
-       
+       (void)params;
+
        switch(id)
        {
         case BasicTestsF16::TEST_ADD_F16_1:
@@ -304,5 +311,6 @@
 
     void BasicTestsF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
     {
+        (void)id;
         output.dump(mgr);
     }
diff --git a/CMSIS/DSP/Testing/Source/Tests/BayesF32.cpp b/CMSIS/DSP/Testing/Source/Tests/BayesF32.cpp
index b2e0e0c..eb4b305 100755
--- a/CMSIS/DSP/Testing/Source/Tests/BayesF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/BayesF32.cpp
@@ -1,7 +1,6 @@
 #include "BayesF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/DistanceTestsF32.cpp b/CMSIS/DSP/Testing/Source/Tests/DistanceTestsF32.cpp
index 07906f3..f2a990f 100755
--- a/CMSIS/DSP/Testing/Source/Tests/DistanceTestsF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/DistanceTestsF32.cpp
@@ -1,7 +1,6 @@
 #include "DistanceTestsF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/DistanceTestsU32.cpp b/CMSIS/DSP/Testing/Source/Tests/DistanceTestsU32.cpp
index 0fa2615..86fd63c 100755
--- a/CMSIS/DSP/Testing/Source/Tests/DistanceTestsU32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/DistanceTestsU32.cpp
@@ -1,7 +1,6 @@
 #include "DistanceTestsU32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define ERROR_THRESHOLD 1e-8
diff --git a/CMSIS/DSP/Testing/Source/Tests/FastMathF32.cpp b/CMSIS/DSP/Testing/Source/Tests/FastMathF32.cpp
index 22547f6..b91b746 100755
--- a/CMSIS/DSP/Testing/Source/Tests/FastMathF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/FastMathF32.cpp
@@ -1,7 +1,6 @@
 #include "FastMathF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "arm_vec_math.h"
 #include "Test.h"
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/FastMathQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/FastMathQ15.cpp
index 338a160..e28cd0b 100755
--- a/CMSIS/DSP/Testing/Source/Tests/FastMathQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/FastMathQ15.cpp
@@ -1,7 +1,6 @@
 #include "FastMathQ15.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/FastMathQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/FastMathQ31.cpp
index bde559b..1176918 100755
--- a/CMSIS/DSP/Testing/Source/Tests/FastMathQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/FastMathQ31.cpp
@@ -1,7 +1,6 @@
 #include "FastMathQ31.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/MISCF32.cpp b/CMSIS/DSP/Testing/Source/Tests/MISCF32.cpp
index 64d019f..2bf5b06 100755
--- a/CMSIS/DSP/Testing/Source/Tests/MISCF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/MISCF32.cpp
@@ -1,7 +1,6 @@
 #include "MISCF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "arm_vec_math.h"
 #include "Test.h"
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/MISCQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/MISCQ15.cpp
index d4497ed..19124ef 100755
--- a/CMSIS/DSP/Testing/Source/Tests/MISCQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/MISCQ15.cpp
@@ -1,7 +1,6 @@
 #include "MISCQ15.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "arm_vec_math.h"
 #include "Test.h"
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/MISCQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/MISCQ31.cpp
index a9f18a4..a7cd54d 100755
--- a/CMSIS/DSP/Testing/Source/Tests/MISCQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/MISCQ31.cpp
@@ -1,7 +1,6 @@
 #include "MISCQ31.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "arm_vec_math.h"
 #include "Test.h"
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/MISCQ7.cpp b/CMSIS/DSP/Testing/Source/Tests/MISCQ7.cpp
index 8260323..71d0ebb 100755
--- a/CMSIS/DSP/Testing/Source/Tests/MISCQ7.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/MISCQ7.cpp
@@ -1,7 +1,6 @@
 #include "MISCQ7.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "arm_vec_math.h"
 #include "Test.h"
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp
index ddc3877..4289124 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF32.cpp
@@ -1,7 +1,6 @@
 #include "StatsTestsF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF64.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF64.cpp
index cf4f5b0..2d72037 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF64.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF64.cpp
@@ -1,7 +1,6 @@
 #include "StatsTestsF64.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ15.cpp
index 4e972fa..9bd6310 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ15.cpp
@@ -1,4 +1,3 @@
-#include "arm_math.h"
 #include "StatsTestsQ15.h"
 #include <stdio.h>
 #include "Error.h"
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp
index edb1000..5f443fe 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ31.cpp
@@ -1,4 +1,3 @@
-#include "arm_math.h"
 #include "StatsTestsQ31.h"
 #include <stdio.h>
 #include "Error.h"
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ7.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ7.cpp
index 72f086c..2450c3a 100755
--- a/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ7.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsQ7.cpp
@@ -1,4 +1,3 @@
-#include "arm_math.h"
 #include "StatsTestsQ7.h"
 #include <stdio.h>
 #include "Error.h"
diff --git a/CMSIS/DSP/Testing/Source/Tests/SupportBarTestsF32.cpp b/CMSIS/DSP/Testing/Source/Tests/SupportBarTestsF32.cpp
index 02d9e32..4f4087b 100755
--- a/CMSIS/DSP/Testing/Source/Tests/SupportBarTestsF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/SupportBarTestsF32.cpp
@@ -1,7 +1,6 @@
 #include "SupportBarTestsF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/SupportTestsF32.cpp b/CMSIS/DSP/Testing/Source/Tests/SupportTestsF32.cpp
index 838fe9e..3e0d449 100755
--- a/CMSIS/DSP/Testing/Source/Tests/SupportTestsF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/SupportTestsF32.cpp
@@ -2,7 +2,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 120
diff --git a/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ15.cpp
index e0eb839..7bf911a 100755
--- a/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ15.cpp
@@ -1,7 +1,6 @@
 #include "SupportTestsQ15.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 120
diff --git a/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ31.cpp
index 010c752..a682c80 100755
--- a/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ31.cpp
@@ -1,7 +1,6 @@
 #include "SupportTestsQ31.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 120
diff --git a/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ7.cpp b/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ7.cpp
index e5acc90..53c6af0 100755
--- a/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ7.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/SupportTestsQ7.cpp
@@ -1,7 +1,6 @@
 #include "SupportTestsQ7.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 120
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformCF16.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformCF16.cpp
index 5544774..aeaab85 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformCF16.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformCF16.cpp
@@ -1,4 +1,3 @@
-#include "arm_math_f16.h"
 #include "TransformCF16.h"
 #include <stdio.h>
 #include "Error.h"
@@ -34,7 +33,8 @@
     void TransformCF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
     {
 
-
+       (void)paramsArgs;
+       
        switch(id)
        {
           case TransformCF16::TEST_CFFT_F16_1:
@@ -476,5 +476,6 @@
 
     void TransformCF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
     {
+        (void)id;
         outputfft.dump(mgr);
     }
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformCF32.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformCF32.cpp
index 705a9d1..ef37b86 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformCF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformCF32.cpp
@@ -1,7 +1,6 @@
 #include "TransformCF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 120
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformCF64.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformCF64.cpp
index f8c3235..cab120e 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformCF64.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformCF64.cpp
@@ -1,7 +1,6 @@
 #include "TransformCF64.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 250
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformCQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformCQ15.cpp
index 50ddc6c..d1a1e79 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformCQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformCQ15.cpp
@@ -1,7 +1,6 @@
 #include "TransformCQ15.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 30
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformCQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformCQ31.cpp
index a8bdf80..bd3fedb 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformCQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformCQ31.cpp
@@ -1,7 +1,6 @@
 #include "TransformCQ31.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 #define SNR_THRESHOLD 90
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformRF32.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformRF32.cpp
index b7747f2..08143de 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformRF32.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformRF32.cpp
@@ -1,7 +1,6 @@
 #include "TransformRF32.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformRF64.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformRF64.cpp
index b2ba7ee..05a26e4 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformRF64.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformRF64.cpp
@@ -1,7 +1,6 @@
 #include "TransformRF64.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformRQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformRQ15.cpp
index 48353c7..2f3deec 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformRQ15.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformRQ15.cpp
@@ -1,7 +1,6 @@
 #include "TransformRQ15.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/TransformRQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/TransformRQ31.cpp
index 0c4dc72..5038603 100755
--- a/CMSIS/DSP/Testing/Source/Tests/TransformRQ31.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/TransformRQ31.cpp
@@ -1,7 +1,6 @@
 #include "TransformRQ31.h"
 #include <stdio.h>
 #include "Error.h"
-#include "arm_math.h"
 #include "Test.h"
 
 
diff --git a/CMSIS/DSP/Testing/Source/Tests/UnaryTestsF64.cpp b/CMSIS/DSP/Testing/Source/Tests/UnaryTestsF64.cpp
index 562948b..bac9afe 100755
--- a/CMSIS/DSP/Testing/Source/Tests/UnaryTestsF64.cpp
+++ b/CMSIS/DSP/Testing/Source/Tests/UnaryTestsF64.cpp
@@ -1,4 +1,3 @@
-#include "arm_math.h"
 #include "UnaryTestsF64.h"
 #include <stdio.h>
 #include "Error.h"
diff --git a/CMSIS/DSP/Testing/main.cpp b/CMSIS/DSP/Testing/main.cpp
index e82d86b..0a54767 100644
--- a/CMSIS/DSP/Testing/main.cpp
+++ b/CMSIS/DSP/Testing/main.cpp
@@ -1,5 +1,5 @@
 #include <cstdio>
-#include "arm_math.h"
+#include "arm_math_types.h"
 extern int testmain(const char *);
 
 extern "C" const char *patternData;
diff --git a/CMSIS/DSP/Toolchain/AC5.cmake b/CMSIS/DSP/Toolchain/AC5.cmake
index 4c679a9..5110b06 100755
--- a/CMSIS/DSP/Toolchain/AC5.cmake
+++ b/CMSIS/DSP/Toolchain/AC5.cmake
@@ -30,7 +30,7 @@
   endif()
 
   if (FASTMATHCOMPUTATIONS)
-      target_compile_options(${PROJECTNAME} PUBLIC "-ffast-math")
+      target_compile_options(${PROJECTNAME} PUBLIC "--fpmode=fast")
   endif()
   
   #if (HARDFP)
diff --git a/CMSIS/DSP/configBoot.cmake b/CMSIS/DSP/configBoot.cmake
index 578afa9..bb0cd89 100755
--- a/CMSIS/DSP/configBoot.cmake
+++ b/CMSIS/DSP/configBoot.cmake
@@ -55,17 +55,16 @@
   # Cortex M
   #
   # C startup for M55 boot code
-  if (${PLATFORMID} STREQUAL "IPSS")
-      cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} ON)    
+  if (ARM_CPU MATCHES "^[cC]ortex-[Mm].*")
+  if (ARMAC5)
+    # ASM startup
+    cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)  
   else()
-     if (ARM_CPU MATCHES "^[cC]ortex-[mM]55([^0-9].*)?$")
-       cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} ON)  
-     elseif (ARM_CPU MATCHES  "^[cC]ortex-[Mm].*$")
-       cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} OFF)  
-     endif()  
+    # C startup
+    cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER} ON)  
+  endif()  
   endif()
   
-  
   ###################
   #
   # Cortex cortex-a
diff --git a/CMSIS/DSP/configPlatform.cmake b/CMSIS/DSP/configPlatform.cmake
index 0b3036f..2897b6a 100644
--- a/CMSIS/DSP/configPlatform.cmake
+++ b/CMSIS/DSP/configPlatform.cmake
@@ -152,7 +152,7 @@
 
 function(core_includes PROJECTNAME)
     target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Include)
-    target_compile_options(${PROJECTNAME} PRIVATE ${PLATFORMOPT})
+    #target_compile_options(${PROJECTNAME} PRIVATE ${PLATFORMOPT})
 endfunction()
 
 function (configplatformForLib PROJECTNAME ROOT)
diff --git a/CMSIS/DoxyGen/DSP/src/history.txt b/CMSIS/DoxyGen/DSP/src/history.txt
index f636371..9b74e6e 100644
--- a/CMSIS/DoxyGen/DSP/src/history.txt
+++ b/CMSIS/DoxyGen/DSP/src/history.txt
@@ -10,6 +10,7 @@
     <td>V1.9.0</td>
     <td> 
       Re-organization of arm_math.h
+      
       Re-organization of interpolation functions:
       - New Interpolation folder