CMSIS-DSP: New testing framework
(For our internal use. In short term, we won't give support about it).
CMSIS-DSP: Update to cmake build for the testing framework
CMSIS-NN:Implementation of arm_fully_connected_s8
Use API and quantization compatible with TF Lite.
diff --git a/CMSIS/Core_A/Include/cmsis_armclang.h b/CMSIS/Core_A/Include/cmsis_armclang.h
index 0a53c4e..299a1d6 100644
--- a/CMSIS/Core_A/Include/cmsis_armclang.h
+++ b/CMSIS/Core_A/Include/cmsis_armclang.h
@@ -322,6 +322,8 @@
#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))
+#define __SADD8 __builtin_arm_sadd8
+#define __SADD16 __builtin_arm_sadd16
#define __QADD8 __builtin_arm_qadd8
#define __QSUB8 __builtin_arm_qsub8
#define __QADD16 __builtin_arm_qadd16
diff --git a/CMSIS/Core_A/Include/cmsis_gcc.h b/CMSIS/Core_A/Include/cmsis_gcc.h
index 0c407c2..ee80882 100644
--- a/CMSIS/Core_A/Include/cmsis_gcc.h
+++ b/CMSIS/Core_A/Include/cmsis_gcc.h
@@ -168,6 +168,8 @@
return(result);
}
+
+
#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \
((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) )
diff --git a/CMSIS/DSP/.gitignore b/CMSIS/DSP/.gitignore
new file mode 100644
index 0000000..8a3449d
--- /dev/null
+++ b/CMSIS/DSP/.gitignore
@@ -0,0 +1 @@
+DSP_Lib_TestSuite/build/
\ No newline at end of file
diff --git a/CMSIS/DSP/DSP_Lib_TestSuite/CMakeLists.txt b/CMSIS/DSP/DSP_Lib_TestSuite/CMakeLists.txt
index 3d8e4e9..63d2409 100644
--- a/CMSIS/DSP/DSP_Lib_TestSuite/CMakeLists.txt
+++ b/CMSIS/DSP/DSP_Lib_TestSuite/CMakeLists.txt
@@ -18,6 +18,9 @@
option(SUPPORT_TESTS "Enable Support testing" ON)
option(TRANSFORM_TESTS "Enable Transform testing" ON)
+# Change behavior of configBoot for scatter file
+set(TESTFRAMEWORK ON)
+
project(DSP_Lib_TestSuite)
@@ -27,6 +30,10 @@
set(ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
+add_executable(DSP_Lib_TestSuite)
+
+include(config)
+configApp(DSP_Lib_TestSuite ${ROOT})
file(GLOB MAIN "Common/src/*.c")
file(GLOB BASICMATH_TESTS_SRC "Common/src/basic_math_tests/*.c")
@@ -74,7 +81,7 @@
add_subdirectory(RefLibs bin_ref)
-add_executable(DSP_Lib_TestSuite)
+
if (CUSTOMIZE_TESTS)
target_compile_definitions(DSP_Lib_TestSuite PRIVATE CUSTOMIZE_TESTS)
@@ -116,10 +123,8 @@
target_compile_definitions(DSP_Lib_TestSuite PRIVATE DUMPPATTERN)
endif()
-# Change behavior of configBoot for scatter file
-set(TESTFRAMEWORK ON)
-include(configBoot)
+
file(COPY ${ROOT}/CMSIS/DSP/Examples/ARM/boot/RTE_Components.h DESTINATION tempLink)
diff --git a/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c b/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c
index 2926273..fb8f922 100644
--- a/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c
+++ b/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c
@@ -44,7 +44,7 @@
#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_STATISTICS_TESTS)
JTEST_GROUP_CALL(statistics_tests);
-#endif()
+#endif
#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_SUPPORT_TESTS)
JTEST_GROUP_CALL(support_tests);
diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/CMakeLists.txt b/CMSIS/DSP/Examples/ARM/arm_variance_example/CMakeLists.txt
index a2084d7..298e1f9 100755
--- a/CMSIS/DSP/Examples/ARM/arm_variance_example/CMakeLists.txt
+++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/CMakeLists.txt
@@ -1,8 +1,10 @@
cmake_minimum_required (VERSION 3.6)
project (arm_variance_example VERSION 0.1)
+
# Needed to include the configBoot module
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
+set(ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..)
###################################
#
@@ -27,9 +29,9 @@
add_executable(arm_variance_example)
-set(ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..)
-include(configBoot)
+include(config)
+configApp(arm_variance_example ${ROOT})
target_sources(arm_variance_example PRIVATE arm_variance_example_f32.c)
@@ -37,10 +39,3 @@
target_link_libraries(arm_variance_example PRIVATE CMSISDSP)
-###################################
-#
-# INSTALLATION
-#
-###################################
-
-install (TARGETS arm_variance_example DESTINATION "${PROJECT_SOURCE_DIR}/varianceExampleBuild.axf")
\ No newline at end of file
diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c
index 13dde7b..e20e1f9 100644
--- a/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c
+++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c
@@ -145,7 +145,7 @@
status = ARM_MATH_SUCCESS;
-#if defined(FILEIO)
+#if defined(SEMIHOSTING)
printf("START\n");
#endif
@@ -201,7 +201,7 @@
}
-#if !defined(FILEIO)
+#if !defined(SEMIHOSTING)
if ( status != ARM_MATH_SUCCESS)
{
while (1);
diff --git a/CMSIS/DSP/Include/arm_math.h b/CMSIS/DSP/Include/arm_math.h
index eb37f82..93e1335 100644
--- a/CMSIS/DSP/Include/arm_math.h
+++ b/CMSIS/DSP/Include/arm_math.h
@@ -279,6 +279,11 @@
#ifndef _ARM_MATH_H
#define _ARM_MATH_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* Compiler specific diagnostic adjustment */
#if defined ( __CC_ARM )
@@ -307,7 +312,11 @@
/* Included for instrinsics definitions */
#if !defined ( _MSC_VER )
+
+
#include "cmsis_compiler.h"
+
+
#else
#include <stdint.h>
#define __STATIC_FORCEINLINE static __forceinline
@@ -332,12 +341,6 @@
#endif
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
/**
* @brief Macros required for reciprocal calculation in Normalized LMS
*/
@@ -7327,9 +7330,6 @@
#endif
-#ifdef __cplusplus
-}
-#endif
/* Compiler specific diagnostic adjustment */
#if defined ( __CC_ARM )
@@ -7353,6 +7353,11 @@
#error Unknown compiler
#endif
+#ifdef __cplusplus
+}
+#endif
+
+
#endif /* _ARM_MATH_H */
/**
diff --git a/CMSIS/DSP/Platforms/.gitignore b/CMSIS/DSP/Platforms/.gitignore
new file mode 100644
index 0000000..26de02c
--- /dev/null
+++ b/CMSIS/DSP/Platforms/.gitignore
@@ -0,0 +1,2 @@
+SDSIM/
+FVP/ARMCA15/
\ No newline at end of file
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/Include/ARMCA5.h b/CMSIS/DSP/Platforms/FVP/ARMCA5/Include/ARMCA5.h
new file mode 100644
index 0000000..0e56100
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/Include/ARMCA5.h
@@ -0,0 +1,138 @@
+/******************************************************************************
+ * @file ARMCA5.h
+ * @brief CMSIS Cortex-A5 Core Peripheral Access Layer Header 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 __ARMCA5_H__
+#define __ARMCA5_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/****** SGI Interrupts Numbers ****************************************/
+ SGI0_IRQn = 0, /*!< Software Generated Interrupt 0 */
+ SGI1_IRQn = 1, /*!< Software Generated Interrupt 1 */
+ SGI2_IRQn = 2, /*!< Software Generated Interrupt 2 */
+ SGI3_IRQn = 3, /*!< Software Generated Interrupt 3 */
+ SGI4_IRQn = 4, /*!< Software Generated Interrupt 4 */
+ SGI5_IRQn = 5, /*!< Software Generated Interrupt 5 */
+ SGI6_IRQn = 6, /*!< Software Generated Interrupt 6 */
+ SGI7_IRQn = 7, /*!< Software Generated Interrupt 7 */
+ SGI8_IRQn = 8, /*!< Software Generated Interrupt 8 */
+ SGI9_IRQn = 9, /*!< Software Generated Interrupt 9 */
+ SGI10_IRQn = 10, /*!< Software Generated Interrupt 10 */
+ SGI11_IRQn = 11, /*!< Software Generated Interrupt 11 */
+ SGI12_IRQn = 12, /*!< Software Generated Interrupt 12 */
+ SGI13_IRQn = 13, /*!< Software Generated Interrupt 13 */
+ SGI14_IRQn = 14, /*!< Software Generated Interrupt 14 */
+ SGI15_IRQn = 15, /*!< Software Generated Interrupt 15 */
+
+/****** Cortex-A5 Processor Exceptions Numbers ****************************************/
+ GlobalTimer_IRQn = 27, /*!< Global Timer Interrupt */
+ PrivTimer_IRQn = 29, /*!< Private Timer Interrupt */
+ PrivWatchdog_IRQn = 30, /*!< Private Watchdog Interrupt */
+
+/****** Platform Exceptions Numbers ***************************************************/
+ Watchdog_IRQn = 32, /*!< SP805 Interrupt */
+ Timer0_IRQn = 34, /*!< SP804 Interrupt */
+ Timer1_IRQn = 35, /*!< SP804 Interrupt */
+ RTClock_IRQn = 36, /*!< PL031 Interrupt */
+ UART0_IRQn = 37, /*!< PL011 Interrupt */
+ UART1_IRQn = 38, /*!< PL011 Interrupt */
+ UART2_IRQn = 39, /*!< PL011 Interrupt */
+ UART3_IRQn = 40, /*!< PL011 Interrupt */
+ MCI0_IRQn = 41, /*!< PL180 Interrupt (1st) */
+ MCI1_IRQn = 42, /*!< PL180 Interrupt (2nd) */
+ AACI_IRQn = 43, /*!< PL041 Interrupt */
+ Keyboard_IRQn = 44, /*!< PL050 Interrupt */
+ Mouse_IRQn = 45, /*!< PL050 Interrupt */
+ CLCD_IRQn = 46, /*!< PL111 Interrupt */
+ Ethernet_IRQn = 47, /*!< SMSC_91C111 Interrupt */
+ VFS2_IRQn = 73, /*!< VFS2 Interrupt */
+} IRQn_Type;
+
+/******************************************************************************/
+/* Peripheral memory map */
+/******************************************************************************/
+
+/* Peripheral and RAM base address */
+#define VE_A5_MP_FLASH_BASE0 (0x00000000UL) /*!< (FLASH0 ) Base Address */
+#define VE_A5_MP_FLASH_BASE1 (0x0C000000UL) /*!< (FLASH1 ) Base Address */
+#define VE_A5_MP_SRAM_BASE (0x14000000UL) /*!< (SRAM ) Base Address */
+#define VE_A5_MP_PERIPH_BASE_CS2 (0x18000000UL) /*!< (Peripheral ) Base Address */
+#define VE_A5_MP_VRAM_BASE (0x00000000UL + VE_A5_MP_PERIPH_BASE_CS2) /*!< (VRAM ) Base Address */
+#define VE_A5_MP_ETHERNET_BASE (0x02000000UL + VE_A5_MP_PERIPH_BASE_CS2) /*!< (ETHERNET ) Base Address */
+#define VE_A5_MP_USB_BASE (0x03000000UL + VE_A5_MP_PERIPH_BASE_CS2) /*!< (USB ) Base Address */
+#define VE_A5_MP_PERIPH_BASE_CS3 (0x1C000000UL) /*!< (Peripheral ) Base Address */
+#define VE_A5_MP_DAP_BASE (0x00000000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (LOCAL DAP ) Base Address */
+#define VE_A5_MP_SYSTEM_REG_BASE (0x00010000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (SYSTEM REG ) Base Address */
+#define VE_A5_MP_SERIAL_BASE (0x00030000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (SERIAL ) Base Address */
+#define VE_A5_MP_AACI_BASE (0x00040000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (AACI ) Base Address */
+#define VE_A5_MP_MMCI_BASE (0x00050000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (MMCI ) Base Address */
+#define VE_A5_MP_KMI0_BASE (0x00060000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (KMI0 ) Base Address */
+#define VE_A5_MP_UART_BASE (0x00090000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (UART ) Base Address */
+#define VE_A5_MP_WDT_BASE (0x000F0000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (WDT ) Base Address */
+#define VE_A5_MP_TIMER_BASE (0x00110000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (TIMER ) Base Address */
+#define VE_A5_MP_DVI_BASE (0x00160000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (DVI ) Base Address */
+#define VE_A5_MP_RTC_BASE (0x00170000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (RTC ) Base Address */
+#define VE_A5_MP_UART4_BASE (0x001B0000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (UART4 ) Base Address */
+#define VE_A5_MP_CLCD_BASE (0x001F0000UL + VE_A5_MP_PERIPH_BASE_CS3) /*!< (CLCD ) Base Address */
+#define VE_A5_MP_PRIVATE_PERIPH_BASE (0x2C000000UL) /*!< (Peripheral ) Base Address */
+#define VE_A5_MP_GIC_DISTRIBUTOR_BASE (0x00001000UL + VE_A5_MP_PRIVATE_PERIPH_BASE) /*!< (GIC DIST ) Base Address */
+#define VE_A5_MP_GIC_INTERFACE_BASE (0x00000100UL + VE_A5_MP_PRIVATE_PERIPH_BASE) /*!< (GIC CPU IF ) Base Address */
+#define VE_A5_MP_PRIVATE_TIMER (0x00000600UL + VE_A5_MP_PRIVATE_PERIPH_BASE) /*!< (PTIM ) Base Address */
+#define VE_A5_MP_PL310_BASE (0x000F0000UL + VE_A5_MP_PRIVATE_PERIPH_BASE) /*!< (L2C-310 ) Base Address */
+#define VE_A5_MP_SSRAM_BASE (0x2E000000UL) /*!< (System SRAM) Base Address */
+#define VE_A5_MP_DRAM_BASE (0x80000000UL) /*!< (DRAM ) Base Address */
+#define GIC_DISTRIBUTOR_BASE VE_A5_MP_GIC_DISTRIBUTOR_BASE
+#define GIC_INTERFACE_BASE VE_A5_MP_GIC_INTERFACE_BASE
+#define TIMER_BASE VE_A5_MP_PRIVATE_TIMER
+
+//The VE-A5 model implements L1 cache as architecturally defined, but does not implement L2 cache.
+//Do not enable the L2 cache if you are running RTX on a VE-A5 model as it may cause a data abort.
+#define L2C_310_BASE VE_A5_MP_PL310_BASE
+
+/* -------- Configuration of the Cortex-A5 Processor and Core Peripherals ------- */
+#define __CA_REV 0x0000U /* Core revision r0p0 */
+#define __CORTEX_A 5U /* Cortex-A5 Core */
+#define __FPU_PRESENT 1U /* FPU present */
+#define __GIC_PRESENT 1U /* GIC present */
+#define __TIM_PRESENT 1U /* TIM present */
+#define __L2C_PRESENT 0U /* L2C present */
+
+#include "core_ca.h"
+#include <system_ARMCA5.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __ARMCA5_H__
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/lnk.sct
new file mode 100644
index 0000000..41e562c
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/lnk.sct
@@ -0,0 +1,77 @@
+#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-a5 -xc
+;**************************************************
+; Copyright (c) 2017 ARM Ltd. All rights reserved.
+;**************************************************
+
+; Scatter-file for RTX Example on Versatile Express
+
+; This scatter-file places application code, data, stack and heap at suitable addresses in the memory map.
+
+; This platform has 2GB SDRAM starting at 0x80000000.
+
+#include "mem_ARMCA5.h"
+
+SDRAM __ROM_BASE __ROM_SIZE ; load region size_region
+{
+ VECTORS __ROM_BASE __ROM_SIZE ; load address = execution address
+ {
+ * (RESET, +FIRST) ; Vector table and other startup code
+ * (InRoot$$Sections) ; All (library) code that must be in a root region
+ * (+RO-CODE) ; Application RO code (.text)
+ * (+RO-DATA) ; Application RO data (.constdata)
+ }
+
+ RW_DATA __RAM_BASE __RW_DATA_SIZE
+ { * (+RW) } ; Application RW data (.data)
+
+ ZI_DATA (__RAM_BASE+
+ __RW_DATA_SIZE) __ZI_DATA_SIZE
+ { * (+ZI) } ; Application ZI data (.bss)
+
+ ARM_LIB_HEAP (__RAM_BASE
+ +__RW_DATA_SIZE
+ +__ZI_DATA_SIZE) EMPTY __HEAP_SIZE ; Heap region growing up
+ { }
+
+ ARM_LIB_STACK (__RAM_BASE
+ +__RAM_SIZE
+ -__FIQ_STACK_SIZE
+ -__IRQ_STACK_SIZE
+ -__SVC_STACK_SIZE
+ -__ABT_STACK_SIZE
+ -__UND_STACK_SIZE) EMPTY -__STACK_SIZE ; Stack region growing down
+ { }
+
+ UND_STACK (__RAM_BASE
+ +__RAM_SIZE
+ -__FIQ_STACK_SIZE
+ -__IRQ_STACK_SIZE
+ -__SVC_STACK_SIZE
+ -__ABT_STACK_SIZE) EMPTY -__UND_STACK_SIZE ; UND mode stack
+ { }
+
+ ABT_STACK (__RAM_BASE
+ +__RAM_SIZE
+ -__FIQ_STACK_SIZE
+ -__IRQ_STACK_SIZE
+ -__SVC_STACK_SIZE) EMPTY -__ABT_STACK_SIZE ; ABT mode stack
+ { }
+
+ SVC_STACK (__RAM_BASE
+ +__RAM_SIZE
+ -__FIQ_STACK_SIZE
+ -__IRQ_STACK_SIZE) EMPTY -__SVC_STACK_SIZE ; SVC mode stack
+ { }
+
+ IRQ_STACK (__RAM_BASE
+ +__RAM_SIZE
+ -__FIQ_STACK_SIZE) EMPTY -__IRQ_STACK_SIZE ; IRQ mode stack
+ { }
+
+ FIQ_STACK (__RAM_BASE
+ +__RAM_SIZE) EMPTY -__FIQ_STACK_SIZE ; FIQ mode stack
+ { }
+
+ TTB __TTB_BASE EMPTY __TTB_SIZE ; Level-1 Translation Table for MMU
+ { }
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/mem_ARMCA5.h b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/mem_ARMCA5.h
new file mode 100644
index 0000000..55badff
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/mem_ARMCA5.h
@@ -0,0 +1,101 @@
+/**************************************************************************//**
+ * @file mem_ARMCA5.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_ARMCA5_H
+#define __MEM_ARMCA5_H
+
+/*----------------------------------------------------------------------------
+ User Stack & Heap size definition
+ *----------------------------------------------------------------------------*/
+/*
+//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+*/
+
+/*--------------------- ROM Configuration ------------------------------------
+//
+// <h> ROM Configuration
+// <i> For compatibility with MMU config the sections must be multiple of 1MB
+// <o0> ROM Base Address <0x0-0xFFFFFFFF:0x100000>
+// <o1> ROM Size (in Bytes) <0x0-0xFFFFFFFF:0x100000>
+// </h>
+ *----------------------------------------------------------------------------*/
+#define __ROM_BASE 0x80000000
+#define __ROM_SIZE 0x00400000
+
+/*--------------------- RAM Configuration -----------------------------------
+// <h> RAM Configuration
+// <i> For compatibility with MMU config the sections must be multiple of 1MB
+// <o0> RAM Base Address <0x0-0xFFFFFFFF:0x100000>
+// <o1> RAM Total Size (in Bytes) <0x0-0xFFFFFFFF:0x100000>
+// <h> Data Sections
+// <o2> RW_DATA Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o3> ZI_DATA Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// </h>
+// <h> Stack / Heap Configuration
+// <o4> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o5> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <h> Exceptional Modes
+// <o6> UND Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o7> ABT Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o8> SVC Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o9> IRQ Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o10> FIQ Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// </h>
+// </h>
+// </h>
+ *----------------------------------------------------------------------------*/
+//#define __RAM_BASE 0x80200000#
+#define __RAM_BASE 0x80600000
+#define __RAM_SIZE 0x00700000
+
+#define __RW_DATA_SIZE 0x00200000
+#define __ZI_DATA_SIZE 0x00200000
+
+#define __STACK_SIZE 0x00007000
+#define __HEAP_SIZE 0x00200000
+
+#define __UND_STACK_SIZE 0x00000100
+#define __ABT_STACK_SIZE 0x00000100
+#define __SVC_STACK_SIZE 0x00000100
+#define __IRQ_STACK_SIZE 0x00000100
+#define __FIQ_STACK_SIZE 0x00000100
+
+/*----------------------------------------------------------------------------*/
+
+/*--------------------- TTB Configuration ------------------------------------
+//
+// <h> TTB Configuration
+// <i> The TLB L1 contains 4096 32-bit entries and must be 16kB aligned
+// <i> The TLB L2 entries are placed after the L1 in the MMU config
+// <o0> TTB Base Address <0x0-0xFFFFFFFF:0x4000>
+// <o1> TTB Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// </h>
+ *----------------------------------------------------------------------------*/
+#define __TTB_BASE 0x80500000
+#define __TTB_SIZE 0x00005000
+
+#endif /* __MEM_ARMCA5_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/system_ARMCA5.h b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/system_ARMCA5.h
new file mode 100644
index 0000000..6a2a6da
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/AC6/system_ARMCA5.h
@@ -0,0 +1,65 @@
+/******************************************************************************
+ * @file system_ARMCA5.h
+ * @brief CMSIS Device System Header File for Arm Cortex-A5 Device Series
+ * @version V1.00
+ * @date 10. January 2018
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __SYSTEM_ARMCA5_H
+#define __SYSTEM_ARMCA5_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
+
+/**
+ \brief Setup the microcontroller system.
+
+ Initialize the System and update the SystemCoreClock variable.
+ */
+extern void SystemInit (void);
+
+
+/**
+ \brief Update SystemCoreClock variable.
+
+ Updates the SystemCoreClock with current core Clock retrieved from cpu registers.
+ */
+extern void SystemCoreClockUpdate (void);
+
+/**
+ \brief Create Translation Table.
+
+ Creates Memory Management Unit Translation Table.
+ */
+extern void MMU_CreateTranslationTable(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SYSTEM_ARMCA5_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/lnk.ld
new file mode 100644
index 0000000..ec3a401
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/lnk.ld
@@ -0,0 +1,183 @@
+#include "mem_ARMCA5.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
+}
+
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+
+ Image$$VECTORS$$Base = .;
+ * (RESET)
+ KEEP(*(.isr_vector))
+ Image$$VECTORS$$Limit = .;
+
+ *(SVC_TABLE)
+ *(.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)
+
+ Image$$RO_DATA$$Base = .;
+ *(.rodata*)
+ Image$$RO_DATA$$Limit = .;
+
+ KEEP(*(.eh_frame*))
+ } > ROM
+
+ .ARM.extab :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > ROM
+
+ __exidx_start = .;
+ .ARM.exidx :
+ {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > ROM
+ __exidx_end = .;
+
+
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ __copy_table_end__ = .;
+ } > ROM
+
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ __zero_table_end__ = .;
+ } > ROM
+
+ __etext = .;
+
+ .ttb :
+ {
+ Image$$TTB$$ZI$$Base = .;
+ . += __TTB_SIZE;
+ Image$$TTB$$ZI$$Limit = .;
+ } > L_TTB
+
+ .data : AT (__etext)
+ {
+ Image$$RW_DATA$$Base = .;
+ __data_start__ = .;
+ *(vtable)
+ *(.data*)
+ Image$$RW_DATA$$Limit = .;
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE (__fini_array_end = .);
+
+ . = ALIGN(4);
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM
+
+
+ .bss ALIGN(0x400):
+ {
+ Image$$ZI_DATA$$Base = .;
+ __bss_start__ = .;
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+ __bss_end__ = .;
+ Image$$ZI_DATA$$Limit = .;
+ __end__ = .;
+ end = __end__;
+ } > RAM
+
+#if defined(__HEAP_SIZE) && (__HEAP_SIZE > 0)
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __heap_base = .;
+ Image$$HEAP$$ZI$$Base = .;
+ . += __HEAP_SIZE;
+ Image$$HEAP$$ZI$$Limit = .;
+ __HeapLimit = .;
+ } > RAM
+#endif
+
+ .stack (NOLOAD):
+ {
+ . = ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE - __FIQ_STACK_SIZE - __IRQ_STACK_SIZE - __SVC_STACK_SIZE - __ABT_STACK_SIZE - __UND_STACK_SIZE;
+ . = ALIGN(8);
+
+ __StackTop = .;
+ Image$$SYS_STACK$$ZI$$Base = .;
+ . += __STACK_SIZE;
+ Image$$SYS_STACK$$ZI$$Limit = .;
+ __stack = .;
+
+ Image$$FIQ_STACK$$ZI$$Base = .;
+ . += __FIQ_STACK_SIZE;
+ Image$$FIQ_STACK$$ZI$$Limit = .;
+
+ Image$$IRQ_STACK$$ZI$$Base = .;
+ . += __IRQ_STACK_SIZE;
+ Image$$IRQ_STACK$$ZI$$Limit = .;
+
+ Image$$SVC_STACK$$ZI$$Base = .;
+ . += __SVC_STACK_SIZE;
+ Image$$SVC_STACK$$ZI$$Limit = .;
+
+ Image$$ABT_STACK$$ZI$$Base = .;
+ . += __ABT_STACK_SIZE;
+ Image$$ABT_STACK$$ZI$$Limit = .;
+
+ Image$$UND_STACK$$ZI$$Base = .;
+ . += __UND_STACK_SIZE;
+ Image$$UND_STACK$$ZI$$Limit = .;
+
+ } > RAM
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/mem_ARMCA5.h b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/mem_ARMCA5.h
new file mode 100644
index 0000000..8feba2b
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/mem_ARMCA5.h
@@ -0,0 +1,100 @@
+/**************************************************************************//**
+ * @file mem_ARMCA5.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_ARMCA5_H
+#define __MEM_ARMCA5_H
+
+/*----------------------------------------------------------------------------
+ User Stack & Heap size definition
+ *----------------------------------------------------------------------------*/
+/*
+//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+*/
+
+/*--------------------- ROM Configuration ------------------------------------
+//
+// <h> ROM Configuration
+// <i> For compatibility with MMU config the sections must be multiple of 1MB
+// <o0> ROM Base Address <0x0-0xFFFFFFFF:0x100000>
+// <o1> ROM Size (in Bytes) <0x0-0xFFFFFFFF:0x100000>
+// </h>
+ *----------------------------------------------------------------------------*/
+#define __ROM_BASE 0x80000000
+#define __ROM_SIZE 0x00200000
+
+/*--------------------- RAM Configuration -----------------------------------
+// <h> RAM Configuration
+// <i> For compatibility with MMU config the sections must be multiple of 1MB
+// <o0> RAM Base Address <0x0-0xFFFFFFFF:0x100000>
+// <o1> RAM Total Size (in Bytes) <0x0-0xFFFFFFFF:0x100000>
+// <h> Data Sections
+// <o2> RW_DATA Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o3> ZI_DATA Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// </h>
+// <h> Stack / Heap Configuration
+// <o4> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o5> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <h> Exceptional Modes
+// <o6> UND Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o7> ABT Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o8> SVC Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o9> IRQ Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// <o10> FIQ Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// </h>
+// </h>
+// </h>
+ *----------------------------------------------------------------------------*/
+#define __RAM_BASE 0x80200000
+#define __RAM_SIZE 0x00300000
+
+#define __RW_DATA_SIZE 0x00100000
+#define __ZI_DATA_SIZE 0x000F0000
+
+#define __STACK_SIZE 0x00003000
+#define __HEAP_SIZE 0x00100000
+
+#define __UND_STACK_SIZE 0x00000100
+#define __ABT_STACK_SIZE 0x00000100
+#define __SVC_STACK_SIZE 0x00000100
+#define __IRQ_STACK_SIZE 0x00000100
+#define __FIQ_STACK_SIZE 0x00000100
+
+/*----------------------------------------------------------------------------*/
+
+/*--------------------- TTB Configuration ------------------------------------
+//
+// <h> TTB Configuration
+// <i> The TLB L1 contains 4096 32-bit entries and must be 16kB aligned
+// <i> The TLB L2 entries are placed after the L1 in the MMU config
+// <o0> TTB Base Address <0x0-0xFFFFFFFF:0x4000>
+// <o1> TTB Size (in Bytes) <0x0-0xFFFFFFFF:8>
+// </h>
+ *----------------------------------------------------------------------------*/
+#define __TTB_BASE 0x80500000
+#define __TTB_SIZE 0x00005000
+
+#endif /* __MEM_ARMCA5_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/system_ARMCA5.h b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/system_ARMCA5.h
new file mode 100644
index 0000000..6a2a6da
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/LinkScripts/GCC/system_ARMCA5.h
@@ -0,0 +1,65 @@
+/******************************************************************************
+ * @file system_ARMCA5.h
+ * @brief CMSIS Device System Header File for Arm Cortex-A5 Device Series
+ * @version V1.00
+ * @date 10. January 2018
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __SYSTEM_ARMCA5_H
+#define __SYSTEM_ARMCA5_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
+
+/**
+ \brief Setup the microcontroller system.
+
+ Initialize the System and update the SystemCoreClock variable.
+ */
+extern void SystemInit (void);
+
+
+/**
+ \brief Update SystemCoreClock variable.
+
+ Updates the SystemCoreClock with current core Clock retrieved from cpu registers.
+ */
+extern void SystemCoreClockUpdate (void);
+
+/**
+ \brief Create Translation Table.
+
+ Creates Memory Management Unit Translation Table.
+ */
+extern void MMU_CreateTranslationTable(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SYSTEM_ARMCA5_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/AC6/startup_ARMCA5.c b/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/AC6/startup_ARMCA5.c
new file mode 100644
index 0000000..535a200
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/AC6/startup_ARMCA5.c
@@ -0,0 +1,138 @@
+/******************************************************************************
+ * @file startup_ARMCA5.c
+ * @brief CMSIS Device System Source File for Arm Cortex-A5 Device Series
+ * @version V1.00
+ * @date 10. January 2018
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ARMCA5.h>
+
+/*----------------------------------------------------------------------------
+ Definitions
+ *----------------------------------------------------------------------------*/
+#define USR_MODE 0x10 // User mode
+#define FIQ_MODE 0x11 // Fast Interrupt Request mode
+#define IRQ_MODE 0x12 // Interrupt Request mode
+#define SVC_MODE 0x13 // Supervisor mode
+#define ABT_MODE 0x17 // Abort mode
+#define UND_MODE 0x1B // Undefined Instruction mode
+#define SYS_MODE 0x1F // System mode
+
+/*----------------------------------------------------------------------------
+ Internal References
+ *----------------------------------------------------------------------------*/
+void Vectors (void) __attribute__ ((naked, section("RESET")));
+void Reset_Handler (void) __attribute__ ((naked));
+
+/*----------------------------------------------------------------------------
+ Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+void Undef_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void PAbt_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void DAbt_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void FIQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+
+/*----------------------------------------------------------------------------
+ Exception / Interrupt Vector Table
+ *----------------------------------------------------------------------------*/
+void Vectors(void) {
+ __ASM volatile(
+ "LDR PC, =Reset_Handler \n"
+ "LDR PC, =Undef_Handler \n"
+ "LDR PC, =SVC_Handler \n"
+ "LDR PC, =PAbt_Handler \n"
+ "LDR PC, =DAbt_Handler \n"
+ "NOP \n"
+ "LDR PC, =IRQ_Handler \n"
+ "LDR PC, =FIQ_Handler \n"
+ );
+}
+
+/*----------------------------------------------------------------------------
+ Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+void Reset_Handler(void) {
+ __ASM volatile(
+
+ // Mask interrupts
+ "CPSID if \n"
+
+ // Put any cores other than 0 to sleep
+ "MRC p15, 0, R0, c0, c0, 5 \n" // Read MPIDR
+ "ANDS R0, R0, #3 \n"
+ "goToSleep: \n"
+ "WFINE \n"
+ "BNE goToSleep \n"
+
+ // Reset SCTLR Settings
+ "MRC p15, 0, R0, c1, c0, 0 \n" // Read CP15 System Control register
+ "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
+ "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)
+ "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
+ "LDR R0, =Vectors \n"
+ "MCR p15, 0, R0, c12, c0, 0 \n"
+
+ // Setup Stack for each exceptional mode
+ "CPS #0x11 \n"
+ "LDR SP, =Image$$FIQ_STACK$$ZI$$Limit \n"
+ "CPS #0x12 \n"
+ "LDR SP, =Image$$IRQ_STACK$$ZI$$Limit \n"
+ "CPS #0x13 \n"
+ "LDR SP, =Image$$SVC_STACK$$ZI$$Limit \n"
+ "CPS #0x17 \n"
+ "LDR SP, =Image$$ABT_STACK$$ZI$$Limit \n"
+ "CPS #0x1B \n"
+ "LDR SP, =Image$$UND_STACK$$ZI$$Limit \n"
+ "CPS #0x1F \n"
+ "LDR SP, =Image$$ARM_LIB_STACK$$ZI$$Limit \n"
+
+ // Call SystemInit
+ "BL SystemInit \n"
+
+ // Unmask interrupts
+ "CPSIE if \n"
+
+ // Call __main
+ "BL __main \n"
+ );
+}
+
+/*----------------------------------------------------------------------------
+ Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void) {
+ while(1);
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/GCC/startup_ARMCA5.c b/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/GCC/startup_ARMCA5.c
new file mode 100644
index 0000000..7772401
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/GCC/startup_ARMCA5.c
@@ -0,0 +1,142 @@
+/******************************************************************************
+ * @file startup_ARMCA5.c
+ * @brief CMSIS Device System Source File for Arm Cortex-A5 Device Series
+ * @version V1.00
+ * @date 10. January 2018
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ARMCA5.h>
+
+/*----------------------------------------------------------------------------
+ Definitions
+ *----------------------------------------------------------------------------*/
+#define USR_MODE 0x10 // User mode
+#define FIQ_MODE 0x11 // Fast Interrupt Request mode
+#define IRQ_MODE 0x12 // Interrupt Request mode
+#define SVC_MODE 0x13 // Supervisor mode
+#define ABT_MODE 0x17 // Abort mode
+#define UND_MODE 0x1B // Undefined Instruction mode
+#define SYS_MODE 0x1F // System mode
+
+void support(void);
+
+/*----------------------------------------------------------------------------
+ Internal References
+ *----------------------------------------------------------------------------*/
+void Vectors (void) __attribute__ ((naked, section("RESET")));
+void Reset_Handler (void) __attribute__ ((naked));
+
+/*----------------------------------------------------------------------------
+ Exception / Interrupt Handler
+ *----------------------------------------------------------------------------*/
+void Undef_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void PAbt_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void DAbt_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+void FIQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
+
+/*----------------------------------------------------------------------------
+ Exception / Interrupt Vector Table
+ *----------------------------------------------------------------------------*/
+void Vectors(void) {
+ __ASM volatile(
+ "LDR PC, =Reset_Handler \n"
+ "LDR PC, =Undef_Handler \n"
+ "LDR PC, =SVC_Handler \n"
+ "LDR PC, =PAbt_Handler \n"
+ "LDR PC, =DAbt_Handler \n"
+ "NOP \n"
+ "LDR PC, =IRQ_Handler \n"
+ "LDR PC, =FIQ_Handler \n"
+ );
+}
+
+extern void initialise_monitor_handles(void);
+
+/*----------------------------------------------------------------------------
+ Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+void Reset_Handler(void) {
+ __ASM volatile(
+
+ // Mask interrupts
+ "CPSID if \n"
+
+ // Put any cores other than 0 to sleep
+ "MRC p15, 0, R0, c0, c0, 5 \n" // Read MPIDR
+ "ANDS R0, R0, #3 \n"
+ "goToSleep: \n"
+ "WFINE \n"
+ "BNE goToSleep \n"
+
+ // Reset SCTLR Settings
+ "MRC p15, 0, R0, c1, c0, 0 \n" // Read CP15 System Control register
+ "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
+ "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)
+ "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
+ "LDR R0, =Vectors \n"
+ "MCR p15, 0, R0, c12, c0, 0 \n"
+
+ // Setup Stack for each exceptional mode
+ "CPS #0x11 \n"
+ "LDR SP, =Image$$FIQ_STACK$$ZI$$Limit \n"
+ "CPS #0x12 \n"
+ "LDR SP, =Image$$IRQ_STACK$$ZI$$Limit \n"
+ "CPS #0x13 \n"
+ "LDR SP, =Image$$SVC_STACK$$ZI$$Limit \n"
+ "CPS #0x17 \n"
+ "LDR SP, =Image$$ABT_STACK$$ZI$$Limit \n"
+ "CPS #0x1B \n"
+ "LDR SP, =Image$$UND_STACK$$ZI$$Limit \n"
+ "CPS #0x1F \n"
+ "LDR SP, =Image$$SYS_STACK$$ZI$$Limit \n"
+
+ // Call SystemInit
+ "BL SystemInit \n"
+
+ // Unmask interrupts
+ "CPSIE if \n"
+
+ // Call __main
+ "BL _start \n"
+ );
+}
+
+/*----------------------------------------------------------------------------
+ Default Handler for Exceptions / Interrupts
+ *----------------------------------------------------------------------------*/
+void Default_Handler(void) {
+ while(1);
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/GCC/support.c b/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/GCC/support.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/Startup/GCC/support.c
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/irq_ctrl_gic.c b/CMSIS/DSP/Platforms/FVP/ARMCA5/irq_ctrl_gic.c
new file mode 100644
index 0000000..25d1359
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/irq_ctrl_gic.c
@@ -0,0 +1,410 @@
+/**************************************************************************//**
+ * @file irq_ctrl_gic.c
+ * @brief Interrupt controller handling implementation for GIC
+ * @version V1.0.1
+ * @date 9. April 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2017 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 <stddef.h>
+
+#include "RTE_Components.h"
+#include CMSIS_device_header
+
+#include "irq_ctrl.h"
+
+#if defined(__GIC_PRESENT) && (__GIC_PRESENT == 1U)
+
+/// Number of implemented interrupt lines
+#ifndef IRQ_GIC_LINE_COUNT
+#define IRQ_GIC_LINE_COUNT (1020U)
+#endif
+
+static IRQHandler_t IRQTable[IRQ_GIC_LINE_COUNT] = { 0U };
+static uint32_t IRQ_ID0;
+
+/// Initialize interrupt controller.
+__WEAK int32_t IRQ_Initialize (void) {
+ uint32_t i;
+
+ for (i = 0U; i < IRQ_GIC_LINE_COUNT; i++) {
+ IRQTable[i] = (IRQHandler_t)NULL;
+ }
+ GIC_Enable();
+ return (0);
+}
+
+
+/// Register interrupt handler.
+__WEAK int32_t IRQ_SetHandler (IRQn_ID_t irqn, IRQHandler_t handler) {
+ int32_t status;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ IRQTable[irqn] = handler;
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Get the registered interrupt handler.
+__WEAK IRQHandler_t IRQ_GetHandler (IRQn_ID_t irqn) {
+ IRQHandler_t h;
+
+ // Ignore CPUID field (software generated interrupts)
+ irqn &= 0x3FFU;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ h = IRQTable[irqn];
+ } else {
+ h = (IRQHandler_t)0;
+ }
+
+ return (h);
+}
+
+
+/// Enable interrupt.
+__WEAK int32_t IRQ_Enable (IRQn_ID_t irqn) {
+ int32_t status;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ GIC_EnableIRQ ((IRQn_Type)irqn);
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Disable interrupt.
+__WEAK int32_t IRQ_Disable (IRQn_ID_t irqn) {
+ int32_t status;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ GIC_DisableIRQ ((IRQn_Type)irqn);
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Get interrupt enable state.
+__WEAK uint32_t IRQ_GetEnableState (IRQn_ID_t irqn) {
+ uint32_t enable;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ enable = GIC_GetEnableIRQ((IRQn_Type)irqn);
+ } else {
+ enable = 0U;
+ }
+
+ return (enable);
+}
+
+
+/// Configure interrupt request mode.
+__WEAK int32_t IRQ_SetMode (IRQn_ID_t irqn, uint32_t mode) {
+ uint32_t val;
+ uint8_t cfg;
+ uint8_t secure;
+ uint8_t cpu;
+ int32_t status = 0;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ // Check triggering mode
+ val = (mode & IRQ_MODE_TRIG_Msk);
+
+ if (val == IRQ_MODE_TRIG_LEVEL) {
+ cfg = 0x00U;
+ } else if (val == IRQ_MODE_TRIG_EDGE) {
+ cfg = 0x02U;
+ } else {
+ cfg = 0x00U;
+ status = -1;
+ }
+
+ // Check interrupt type
+ val = mode & IRQ_MODE_TYPE_Msk;
+
+ if (val != IRQ_MODE_TYPE_IRQ) {
+ status = -1;
+ }
+
+ // Check interrupt domain
+ val = mode & IRQ_MODE_DOMAIN_Msk;
+
+ if (val == IRQ_MODE_DOMAIN_NONSECURE) {
+ secure = 0U;
+ } else {
+ // Check security extensions support
+ val = GIC_DistributorInfo() & (1UL << 10U);
+
+ if (val != 0U) {
+ // Security extensions are supported
+ secure = 1U;
+ } else {
+ secure = 0U;
+ status = -1;
+ }
+ }
+
+ // Check interrupt CPU targets
+ val = mode & IRQ_MODE_CPU_Msk;
+
+ if (val == IRQ_MODE_CPU_ALL) {
+ cpu = 0xFFU;
+ } else {
+ cpu = val >> IRQ_MODE_CPU_Pos;
+ }
+
+ // Apply configuration if no mode error
+ if (status == 0) {
+ GIC_SetConfiguration((IRQn_Type)irqn, cfg);
+ GIC_SetTarget ((IRQn_Type)irqn, cpu);
+
+ if (secure != 0U) {
+ GIC_SetGroup ((IRQn_Type)irqn, secure);
+ }
+ }
+ }
+
+ return (status);
+}
+
+
+/// Get interrupt mode configuration.
+__WEAK uint32_t IRQ_GetMode (IRQn_ID_t irqn) {
+ uint32_t mode;
+ uint32_t val;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ mode = IRQ_MODE_TYPE_IRQ;
+
+ // Get trigger mode
+ val = GIC_GetConfiguration((IRQn_Type)irqn);
+
+ if ((val & 2U) != 0U) {
+ // Corresponding interrupt is edge triggered
+ mode |= IRQ_MODE_TRIG_EDGE;
+ } else {
+ // Corresponding interrupt is level triggered
+ mode |= IRQ_MODE_TRIG_LEVEL;
+ }
+
+ // Get interrupt CPU targets
+ mode |= GIC_GetTarget ((IRQn_Type)irqn) << IRQ_MODE_CPU_Pos;
+
+ } else {
+ mode = IRQ_MODE_ERROR;
+ }
+
+ return (mode);
+}
+
+
+/// Get ID number of current interrupt request (IRQ).
+__WEAK IRQn_ID_t IRQ_GetActiveIRQ (void) {
+ IRQn_ID_t irqn;
+ uint32_t prio;
+
+ /* Dummy read to avoid GIC 390 errata 801120 */
+ GIC_GetHighPendingIRQ();
+
+ irqn = GIC_AcknowledgePending();
+
+ __DSB();
+
+ /* Workaround GIC 390 errata 733075 (GIC-390_Errata_Notice_v6.pdf, 09-Jul-2014) */
+ /* The following workaround code is for a single-core system. It would be */
+ /* different in a multi-core system. */
+ /* If the ID is 0 or 0x3FE or 0x3FF, then the GIC CPU interface may be locked-up */
+ /* so unlock it, otherwise service the interrupt as normal. */
+ /* Special IDs 1020=0x3FC and 1021=0x3FD are reserved values in GICv1 and GICv2 */
+ /* so will not occur here. */
+
+ if ((irqn == 0) || (irqn >= 0x3FE)) {
+ /* Unlock the CPU interface with a dummy write to Interrupt Priority Register */
+ prio = GIC_GetPriority((IRQn_Type)0);
+ GIC_SetPriority ((IRQn_Type)0, prio);
+
+ __DSB();
+
+ if ((irqn == 0U) && ((GIC_GetIRQStatus ((IRQn_Type)irqn) & 1U) != 0U) && (IRQ_ID0 == 0U)) {
+ /* If the ID is 0, is active and has not been seen before */
+ IRQ_ID0 = 1U;
+ }
+ /* End of Workaround GIC 390 errata 733075 */
+ }
+
+ return (irqn);
+}
+
+
+/// Get ID number of current fast interrupt request (FIQ).
+__WEAK IRQn_ID_t IRQ_GetActiveFIQ (void) {
+ return ((IRQn_ID_t)-1);
+}
+
+
+/// Signal end of interrupt processing.
+__WEAK int32_t IRQ_EndOfInterrupt (IRQn_ID_t irqn) {
+ int32_t status;
+ IRQn_Type irq = (IRQn_Type)irqn;
+
+ irqn &= 0x3FFU;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ GIC_EndInterrupt (irq);
+
+ if (irqn == 0) {
+ IRQ_ID0 = 0U;
+ }
+
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Set interrupt pending flag.
+__WEAK int32_t IRQ_SetPending (IRQn_ID_t irqn) {
+ int32_t status;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ GIC_SetPendingIRQ ((IRQn_Type)irqn);
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+/// Get interrupt pending flag.
+__WEAK uint32_t IRQ_GetPending (IRQn_ID_t irqn) {
+ uint32_t pending;
+
+ if ((irqn >= 16) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ pending = GIC_GetPendingIRQ ((IRQn_Type)irqn);
+ } else {
+ pending = 0U;
+ }
+
+ return (pending & 1U);
+}
+
+
+/// Clear interrupt pending flag.
+__WEAK int32_t IRQ_ClearPending (IRQn_ID_t irqn) {
+ int32_t status;
+
+ if ((irqn >= 16) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ GIC_ClearPendingIRQ ((IRQn_Type)irqn);
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Set interrupt priority value.
+__WEAK int32_t IRQ_SetPriority (IRQn_ID_t irqn, uint32_t priority) {
+ int32_t status;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ GIC_SetPriority ((IRQn_Type)irqn, priority);
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Get interrupt priority.
+__WEAK uint32_t IRQ_GetPriority (IRQn_ID_t irqn) {
+ uint32_t priority;
+
+ if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {
+ priority = GIC_GetPriority ((IRQn_Type)irqn);
+ } else {
+ priority = IRQ_PRIORITY_ERROR;
+ }
+
+ return (priority);
+}
+
+
+/// Set priority masking threshold.
+__WEAK int32_t IRQ_SetPriorityMask (uint32_t priority) {
+ GIC_SetInterfacePriorityMask (priority);
+ return (0);
+}
+
+
+/// Get priority masking threshold
+__WEAK uint32_t IRQ_GetPriorityMask (void) {
+ return GIC_GetInterfacePriorityMask();
+}
+
+
+/// Set priority grouping field split point
+__WEAK int32_t IRQ_SetPriorityGroupBits (uint32_t bits) {
+ int32_t status;
+
+ if (bits == IRQ_PRIORITY_Msk) {
+ bits = 7U;
+ }
+
+ if (bits < 8U) {
+ GIC_SetBinaryPoint (7U - bits);
+ status = 0;
+ } else {
+ status = -1;
+ }
+
+ return (status);
+}
+
+
+/// Get priority grouping field split point
+__WEAK uint32_t IRQ_GetPriorityGroupBits (void) {
+ uint32_t bp;
+
+ bp = GIC_GetBinaryPoint() & 0x07U;
+
+ return (7U - bp);
+}
+
+#endif
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/mmu_ARMCA5.c b/CMSIS/DSP/Platforms/FVP/ARMCA5/mmu_ARMCA5.c
new file mode 100644
index 0000000..58a9480
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/mmu_ARMCA5.c
@@ -0,0 +1,232 @@
+/**************************************************************************//**
+ * @file mmu_ARMCA5.c
+ * @brief MMU Configuration for ARM Cortex-A5 Device Series
+ * @version V1.2.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.
+ */
+
+/* Memory map description from: DUI0447G_v2m_p1_trm.pdf 4.2.2 Arm Cortex-A Series memory map
+
+ Memory Type
+0xffffffff |--------------------------| ------------
+ | FLAG SYNC | Device Memory
+0xfffff000 |--------------------------| ------------
+ | Fault | Fault
+0xfff00000 |--------------------------| ------------
+ | | Normal
+ | |
+ | Daughterboard |
+ | memory |
+ | |
+0x80505000 |--------------------------| ------------
+ |TTB (L2 Sync Flags ) 4k | Normal
+0x80504C00 |--------------------------| ------------
+ |TTB (L2 Peripherals-B) 16k| Normal
+0x80504800 |--------------------------| ------------
+ |TTB (L2 Peripherals-A) 16k| Normal
+0x80504400 |--------------------------| ------------
+ |TTB (L2 Priv Periphs) 4k | Normal
+0x80504000 |--------------------------| ------------
+ | TTB (L1 Descriptors) | Normal
+0x80500000 |--------------------------| ------------
+ | Stack | Normal
+ |--------------------------| ------------
+ | Heap | Normal
+0x80400000 |--------------------------| ------------
+ | ZI Data | Normal
+0x80300000 |--------------------------| ------------
+ | RW Data | Normal
+0x80200000 |--------------------------| ------------
+ | RO Data | Normal
+ |--------------------------| ------------
+ | RO Code | USH Normal
+0x80000000 |--------------------------| ------------
+ | Daughterboard | Fault
+ | HSB AXI buses |
+0x40000000 |--------------------------| ------------
+ | Daughterboard | Fault
+ | test chips peripherals |
+0x2c002000 |--------------------------| ------------
+ | Private Address | Device Memory
+0x2c000000 |--------------------------| ------------
+ | Daughterboard | Fault
+ | test chips peripherals |
+0x20000000 |--------------------------| ------------
+ | Peripherals | Device Memory RW/RO
+ | | & Fault
+0x00000000 |--------------------------|
+*/
+
+// L1 Cache info and restrictions about architecture of the caches (CCSIR register):
+// Write-Through support *not* available
+// Write-Back support available.
+// Read allocation support available.
+// Write allocation support available.
+
+//Note: You should use the Shareable attribute carefully.
+//For cores without coherency logic (such as SCU) marking a region as shareable forces the processor to not cache that region regardless of the inner cache settings.
+//Cortex-A versions of RTX use LDREX/STREX instructions relying on Local monitors. Local monitors will be used only when the region gets cached, regions that are not cached will use the Global Monitor.
+//Some Cortex-A implementations do not include Global Monitors, so wrongly setting the attribute Shareable may cause STREX to fail.
+
+//Recall: When the Shareable attribute is applied to a memory region that is not Write-Back, Normal memory, data held in this region is treated as Non-cacheable.
+//When SMP bit = 0, Inner WB/WA Cacheable Shareable attributes are treated as Non-cacheable.
+//When SMP bit = 1, Inner WB/WA Cacheable Shareable attributes are treated as Cacheable.
+
+
+//Following MMU configuration is expected
+//SCTLR.AFE == 1 (Simplified access permissions model - AP[2:1] define access permissions, AP[0] is an access flag)
+//SCTLR.TRE == 0 (TEX remap disabled, so memory type and attributes are described directly by bits in the descriptor)
+//Domain 0 is always the Client domain
+//Descriptors should place all memory in domain 0
+
+#include "ARMCA5.h"
+#include "mem_ARMCA5.h"
+
+// TTB base address
+#define TTB_BASE ((uint32_t*)__TTB_BASE)
+
+// L2 table pointers
+//----------------------------------------
+#define TTB_L1_SIZE (0x00004000) // The L1 translation table divides the full 4GB address space of a 32-bit core
+ // into 4096 equally sized sections, each of which describes 1MB of virtual memory space.
+ // The L1 translation table therefore contains 4096 32-bit (word-sized) entries.
+
+#define PRIVATE_TABLE_L2_BASE_4k (__TTB_BASE + TTB_L1_SIZE) // Map 4k Private Address space
+#define PERIPHERAL_A_TABLE_L2_BASE_64k (__TTB_BASE + TTB_L1_SIZE + 0x400) // Map 64k Peripheral #1 0x1C000000 - 0x1C00FFFFF
+#define PERIPHERAL_B_TABLE_L2_BASE_64k (__TTB_BASE + TTB_L1_SIZE + 0x800) // Map 64k Peripheral #2 0x1C100000 - 0x1C1FFFFFF
+#define SYNC_FLAGS_TABLE_L2_BASE_4k (__TTB_BASE + TTB_L1_SIZE + 0xC00) // Map 4k Flag synchronization
+
+//--------------------- PERIPHERALS -------------------
+#define PERIPHERAL_A_FAULT (0x00000000 + 0x1c000000) //0x1C000000-0x1C00FFFF (1M)
+#define PERIPHERAL_B_FAULT (0x00100000 + 0x1c000000) //0x1C100000-0x1C10FFFF (1M)
+
+//--------------------- SYNC FLAGS --------------------
+#define FLAG_SYNC 0xFFFFF000
+#define F_SYNC_BASE 0xFFF00000 //1M aligned
+
+static uint32_t Sect_Normal; //outer & inner wb/wa, non-shareable, executable, rw, domain 0, base addr 0
+static uint32_t Sect_Normal_Cod; //outer & inner wb/wa, non-shareable, executable, ro, domain 0, base addr 0
+static uint32_t Sect_Normal_RO; //as Sect_Normal_Cod, but not executable
+static uint32_t Sect_Normal_RW; //as Sect_Normal_Cod, but writeable and not executable
+static uint32_t Sect_Device_RO; //device, non-shareable, non-executable, ro, domain 0, base addr 0
+static uint32_t Sect_Device_RW; //as Sect_Device_RO, but writeable
+
+/* Define global descriptors */
+static uint32_t Page_L1_4k = 0x0; //generic
+static uint32_t Page_L1_64k = 0x0; //generic
+static uint32_t Page_4k_Device_RW; //Shared device, not executable, rw, domain 0
+static uint32_t Page_64k_Device_RW; //Shared device, not executable, rw, domain 0
+
+void MMU_CreateTranslationTable(void)
+{
+ mmu_region_attributes_Type region;
+
+ //Create 4GB of faulting entries
+ MMU_TTSection (TTB_BASE, 0, 4096, DESCRIPTOR_FAULT);
+
+ /*
+ * Generate descriptors. Refer to core_ca.h to get information about attributes
+ *
+ */
+ //Create descriptors for Vectors, RO, RW, ZI sections
+ section_normal(Sect_Normal, region);
+ section_normal_cod(Sect_Normal_Cod, region);
+ section_normal_ro(Sect_Normal_RO, region);
+ section_normal_rw(Sect_Normal_RW, region);
+ //Create descriptors for peripherals
+ section_device_ro(Sect_Device_RO, region);
+ section_device_rw(Sect_Device_RW, region);
+ //Create descriptors for 64k pages
+ page64k_device_rw(Page_L1_64k, Page_64k_Device_RW, region);
+ //Create descriptors for 4k pages
+ page4k_device_rw(Page_L1_4k, Page_4k_Device_RW, region);
+
+
+ /*
+ * Define MMU flat-map regions and attributes
+ *
+ */
+
+ //Define Image
+ MMU_TTSection (TTB_BASE, __ROM_BASE, __ROM_SIZE/0x100000, Sect_Normal_Cod); // multiple of 1MB sections
+ MMU_TTSection (TTB_BASE, __RAM_BASE, __RAM_SIZE/0x100000, Sect_Normal_RW); // multiple of 1MB sections
+
+ //--------------------- PERIPHERALS -------------------
+ MMU_TTSection (TTB_BASE, VE_A5_MP_FLASH_BASE0 , 64, Sect_Device_RO); // 64MB NOR
+ MMU_TTSection (TTB_BASE, VE_A5_MP_FLASH_BASE1 , 64, Sect_Device_RO); // 64MB NOR
+ MMU_TTSection (TTB_BASE, VE_A5_MP_SRAM_BASE , 32, Sect_Device_RW); // 32MB RAM
+ MMU_TTSection (TTB_BASE, VE_A5_MP_VRAM_BASE , 32, Sect_Device_RW); // 32MB RAM
+ MMU_TTSection (TTB_BASE, VE_A5_MP_ETHERNET_BASE , 16, Sect_Device_RW);
+ MMU_TTSection (TTB_BASE, VE_A5_MP_USB_BASE , 16, Sect_Device_RW);
+
+ // Create (16 * 64k)=1MB faulting entries to cover peripheral range 0x1C000000-0x1C00FFFF
+ MMU_TTPage64k(TTB_BASE, PERIPHERAL_A_FAULT , 16, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, DESCRIPTOR_FAULT);
+ // Define peripheral range 0x1C000000-0x1C00FFFF
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_DAP_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_SYSTEM_REG_BASE, 1, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_SERIAL_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_AACI_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_MMCI_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_KMI0_BASE , 2, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_UART_BASE , 4, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_WDT_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_A_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+
+ // Create (16 * 64k)=1MB faulting entries to cover peripheral range 0x1C100000-0x1C10FFFF
+ MMU_TTPage64k(TTB_BASE, PERIPHERAL_B_FAULT , 16, Page_L1_64k, (uint32_t *)PERIPHERAL_B_TABLE_L2_BASE_64k, DESCRIPTOR_FAULT);
+ // Define peripheral range 0x1C100000-0x1C10FFFF
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_TIMER_BASE , 2, Page_L1_64k, (uint32_t *)PERIPHERAL_B_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_DVI_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_B_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_RTC_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_B_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_UART4_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_B_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+ MMU_TTPage64k(TTB_BASE, VE_A5_MP_CLCD_BASE , 1, Page_L1_64k, (uint32_t *)PERIPHERAL_B_TABLE_L2_BASE_64k, Page_64k_Device_RW);
+
+ // Create (256 * 4k)=1MB faulting entries to cover private address space. Needs to be marked as Device memory
+ MMU_TTPage4k (TTB_BASE, __get_CBAR() ,256, Page_L1_4k, (uint32_t *)PRIVATE_TABLE_L2_BASE_4k, DESCRIPTOR_FAULT);
+ // Define private address space entry.
+ MMU_TTPage4k (TTB_BASE, __get_CBAR() , 3, Page_L1_4k, (uint32_t *)PRIVATE_TABLE_L2_BASE_4k, Page_4k_Device_RW);
+ // Define L2CC entry. Uncomment if PL310 is present
+ // MMU_TTPage4k (TTB_BASE, VE_A5_MP_PL310_BASE , 1, Page_L1_4k, (uint32_t *)PRIVATE_TABLE_L2_BASE_4k, Page_4k_Device_RW);
+
+ // Create (256 * 4k)=1MB faulting entries to synchronization space (Useful if some non-cacheable DMA agent is present in the SoC)
+ MMU_TTPage4k (TTB_BASE, F_SYNC_BASE , 256, Page_L1_4k, (uint32_t *)SYNC_FLAGS_TABLE_L2_BASE_4k, DESCRIPTOR_FAULT);
+ // Define synchronization space entry.
+ MMU_TTPage4k (TTB_BASE, FLAG_SYNC , 1, Page_L1_4k, (uint32_t *)SYNC_FLAGS_TABLE_L2_BASE_4k, Page_4k_Device_RW);
+
+ /* Set location of level 1 page table
+ ; 31:14 - Translation table base addr (31:14-TTBCR.N, TTBCR.N is 0 out of reset)
+ ; 13:7 - 0x0
+ ; 6 - IRGN[0] 0x1 (Inner WB WA)
+ ; 5 - NOS 0x0 (Non-shared)
+ ; 4:3 - RGN 0x01 (Outer WB WA)
+ ; 2 - IMP 0x0 (Implementation Defined)
+ ; 1 - S 0x0 (Non-shared)
+ ; 0 - IRGN[1] 0x0 (Inner WB WA) */
+ __set_TTBR0(__TTB_BASE | 0x48);
+ __ISB();
+
+ /* Set up domain access control register
+ ; We set domain 0 to Client and all other domains to No Access.
+ ; All translation table entries specify domain 0 */
+ __set_DACR(1);
+ __ISB();
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCA5/system_ARMCA5.c b/CMSIS/DSP/Platforms/FVP/ARMCA5/system_ARMCA5.c
new file mode 100644
index 0000000..5f599f6
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCA5/system_ARMCA5.c
@@ -0,0 +1,93 @@
+/******************************************************************************
+ * @file system_ARMCA5.c
+ * @brief CMSIS Device System Source File for Arm Cortex-A5 Device Series
+ * @version V1.0.1
+ * @date 13. February 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.
+ */
+
+#include "RTE_Components.h"
+#include CMSIS_device_header
+#include "irq_ctrl.h"
+
+#define SYSTEM_CLOCK 12000000U
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ 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. */
+
+ // Invalidate entire Unified TLB
+ __set_TLBIALL(0);
+
+ // Invalidate entire branch predictor array
+ __set_BPIALL(0);
+ __DSB();
+ __ISB();
+
+ // Invalidate instruction cache and flush branch target cache
+ __set_ICIALLU(0);
+ __DSB();
+ __ISB();
+
+ // Invalidate data cache
+ L1C_InvalidateDCacheAll();
+
+#if ((__FPU_PRESENT == 1) && (__FPU_USED == 1))
+ // Enable FPU
+ __FPU_Enable();
+#endif
+
+ // Create Translation Table
+ MMU_CreateTranslationTable();
+
+ // Enable MMU
+ MMU_Enable();
+
+ // Enable Caches
+ L1C_EnableCaches();
+ L1C_EnableBTAC();
+
+#if (__L2C_PRESENT == 1)
+ // Enable GIC
+ L2C_Enable();
+#endif
+
+ // IRQ Initialize
+ IRQ_Initialize();
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/ARMCM33_DSP_FP_config.txt b/CMSIS/DSP/Platforms/FVP/ARMCM33/ARMCM33_DSP_FP_config.txt
new file mode 100644
index 0000000..d52478f
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/ARMCM33_DSP_FP_config.txt
@@ -0,0 +1,169 @@
+# Parameters:
+# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max]
+#----------------------------------------------------------------------------------------------
+cpu0.FPU=1 # (bool , init-time) default = '1' : Set whether the model has VFP support
+cpu0.DSP=1 # (bool , init-time) default = '1' : Set whether the model has the DSP extension
+cpu0.semihosting-enable=1 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false.
+cpu0.MPU_S=0x8 # (int , init-time) default = '0x8' : Number of regions in the Secure MPU. If Security Extentions are absent, this is ignored : [0x0..0x10]
+cpu0.MPU_NS=0x8 # (int , init-time) default = '0x8' : Number of regions in the Non-Secure MPU. If Security Extentions are absent, this is the total number of MPU regions : [0x0..0x10]
+cpu0.ITM=0 # (bool , init-time) default = '1' : Level of instrumentation trace supported. false : No ITM trace included, true: ITM trace included
+cpu0.IRQLVL=0x3 # (int , init-time) default = '0x3' : Number of bits of interrupt priority : [0x3..0x8]
+cpu0.BIGENDINIT=0 # (bool , init-time) default = '0' : Initialize processor to big endian mode
+cpu0.INITSVTOR=0x00000000 # (int , init-time) default = '0x10000000' : Secure vector-table offset at reset : [0x0..0xFFFFFF80]
+cpu0.INITNSVTOR=0x0 # (int , init-time) default = '0x0' : Non-Secure vector-table offset at reset : [0x0..0xFFFFFF80]
+cpu0.SAU=0x0 # (int , init-time) default = '0x4' : Number of SAU regions (0 => no SAU) : [0x0..0x8]
+cpu0.SAU_CTRL.ENABLE=0 # (bool , init-time) default = '0' : Enable SAU at reset
+cpu0.SAU_CTRL.ALLNS=0 # (bool , init-time) default = '0' : At reset, the SAU treats entire memory space as NS when the SAU is disabled if this is set
+idau.NUM_IDAU_REGION=0x0 # (int , init-time) default = '0xA' :
+cpu0.LOCK_SAU=0 # (bool , init-time) default = '0' : Lock down of SAU registers write
+cpu0.LOCK_S_MPU=0 # (bool , init-time) default = '0' : Lock down of Secure MPU registers write
+cpu0.LOCK_NS_MPU=0 # (bool , init-time) default = '0' : Lock down of Non-Secure MPU registers write
+cpu0.CPIF=1 # (bool , init-time) default = '1' : Specifies whether the external coprocessor interface is included
+cpu0.SECEXT=0 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included
+fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic
+fvp_mps2.SCC_ID.Variant=0x0 # (int , init-time) default = '0x0' : SCC_ID[23:20], X in the FGPA version 'rXpY' : [0x0..0xF]
+fvp_mps2.SCC_ID.Revision=0x1 # (int , init-time) default = '0x1' : SCC_ID[3:0], Y in the FGPA version 'rXpY' : [0x0..0xF]
+fvp_mps2.platform_type=0x0 # (int , init-time) default = '0x0' : 0:MPS2 ; 1:IoT Kit ; 2:Castor : [0x0..0x2]
+fvp_mps2.UART2.out_file="" # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout)
+fvp_mps2.UART2.in_file="" # (string, init-time) default = '' : Input file for data to be read by the UART
+fvp_mps2.UART2.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output
+fvp_mps2.UART2.in_file_escape_sequence="##" # (string, init-time) default = '##' : Input file escape sequence
+fvp_mps2.UART2.shutdown_on_eot=0 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available)
+fvp_mps2.UART2.shutdown_tag="" # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted
+fvp_mps2.UART1.out_file="" # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout)
+fvp_mps2.UART1.in_file="" # (string, init-time) default = '' : Input file for data to be read by the UART
+fvp_mps2.UART1.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output
+fvp_mps2.UART1.in_file_escape_sequence="##" # (string, init-time) default = '##' : Input file escape sequence
+fvp_mps2.UART1.shutdown_on_eot=0 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available)
+fvp_mps2.UART1.shutdown_tag="" # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted
+fvp_mps2.mps2_visualisation.rate_limit-enable=1 # (bool , init-time) default = '1' : Rate limit simulation.
+fvp_mps2.mps2_visualisation.disable-visualisation=0 # (bool , init-time) default = '0' : Enable/disable visualisation
+fvp_mps2.mps2_visualisation.window_title="CLCD %cpu%" # (string, init-time) default = 'CLCD %cpu%' : Window title (%cpu% is replaced by cpu_name)
+fvp_mps2.mps2_visualisation.idler.delay_ms=0x32 # (int , init-time) default = '0x32' : Determines the period, in milliseconds of real time, between gui_callback() calls.
+fvp_mps2.telnetterminal0.mode="telnet" # (string, init-time) default = 'telnet' : Terminal initialisation mode
+fvp_mps2.telnetterminal0.start_telnet=1 # (bool , init-time) default = '1' : Start telnet if nothing connected
+fvp_mps2.telnetterminal0.start_port=0x1388 # (int , init-time) default = '0x1388' : Telnet TCP Port Number : [0x0..0xFFFFFFFF]
+fvp_mps2.telnetterminal0.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr
+fvp_mps2.telnetterminal0.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows)
+fvp_mps2.telnetterminal1.mode="telnet" # (string, init-time) default = 'telnet' : Terminal initialisation mode
+fvp_mps2.telnetterminal1.start_telnet=1 # (bool , init-time) default = '1' : Start telnet if nothing connected
+fvp_mps2.telnetterminal1.start_port=0x1388 # (int , init-time) default = '0x1388' : Telnet TCP Port Number : [0x0..0xFFFFFFFF]
+fvp_mps2.telnetterminal1.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr
+fvp_mps2.telnetterminal1.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows)
+fvp_mps2.telnetterminal2.mode="telnet" # (string, init-time) default = 'telnet' : Terminal initialisation mode
+fvp_mps2.telnetterminal2.start_telnet=1 # (bool , init-time) default = '1' : Start telnet if nothing connected
+fvp_mps2.telnetterminal2.start_port=0x1388 # (int , init-time) default = '0x1388' : Telnet TCP Port Number : [0x0..0xFFFFFFFF]
+fvp_mps2.telnetterminal2.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr
+fvp_mps2.telnetterminal2.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows)
+fvp_mps2.PSRAM_M7.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.PSRAM_M7.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.PSRAM_M7.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.UART0.out_file="" # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout)
+fvp_mps2.UART0.in_file="" # (string, init-time) default = '' : Input file for data to be read by the UART
+fvp_mps2.UART0.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output
+fvp_mps2.UART0.in_file_escape_sequence="##" # (string, init-time) default = '##' : Input file escape sequence
+fvp_mps2.UART0.shutdown_on_eot=0 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available)
+fvp_mps2.UART0.shutdown_tag="" # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted
+fvp_mps2.cmsdk_watchdog.simhalt=0 # (bool , run-time ) default = '0' : Halt on reset.
+fvp_mps2.sse200.s32k_watchdog.simhalt=0 # (bool , run-time ) default = '0' : Halt on reset.
+fvp_mps2.sse200.secure_watchdog.simhalt=0 # (bool , run-time ) default = '0' : Halt on reset.
+fvp_mps2.sse200.nonsecure_watchdog.simhalt=0 # (bool , run-time ) default = '0' : Halt on reset.
+fvp_mps2.PSRAM.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.PSRAM.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.PSRAM.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.ssram2.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.ssram2.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.ssram2.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.ssram1.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.ssram1.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.ssram1.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram0.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.sse200.iotss_internal_sram0.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram0.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram1.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.sse200.iotss_internal_sram1.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram1.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram2.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.sse200.iotss_internal_sram2.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram2.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram3.size=0x100000000 # (int , init-time) default = '0x100000000' : Memory Size
+fvp_mps2.sse200.iotss_internal_sram3.fill1=0xDFDFDFCF # (int , init-time) default = '0xDFDFDFCF' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.iotss_internal_sram3.fill2=0xCFDFDFDF # (int , init-time) default = '0xCFDFDFDF' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern
+fvp_mps2.sse200.sys_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.sys_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.cpu0core_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.cpu0dbg_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.cpu1core_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.cpu1core_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.cpu1dbg_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.cpu1dbg_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.crypto_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.crypto_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.cordio_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.cordio_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.dbg_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.dbg_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.ram0_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.ram0_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.ram1_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.ram1_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.ram2_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.ram2_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.sse200.ram3_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal
+fvp_mps2.sse200.ram3_ppu.revision="r0p0" # (string, init-time) default = 'r0p0' : Revision
+fvp_mps2.smsc_91c111.enabled=0 # (bool , init-time) default = '0' : Host interface connection enabled
+fvp_mps2.smsc_91c111.mac_address="00:02:f7:ef:5d:a2" # (string, init-time) default = '00:02:f7:ef:5d:a2' : Host/model MAC address
+fvp_mps2.smsc_91c111.promiscuous=1 # (bool , init-time) default = '1' : Put host into promiscuous mode
+fvp_mps2.hostbridge.interfaceName="ARM0" # (string, init-time) default = 'ARM0' : Host Interface
+fvp_mps2.hostbridge.userNetworking=0 # (bool , init-time) default = '0' : Enable user-mode networking
+fvp_mps2.hostbridge.userNetSubnet="172.20.51.0/24" # (string, init-time) default = '172.20.51.0/24' : Virtual subnet for user-mode networking
+fvp_mps2.hostbridge.userNetPorts="" # (string, init-time) default = '' : Listening ports to expose in user-mode networking
+fvp_mps2.mps2_secure_control_register_block.FLASH_BLOCK_CFG=0x3 # (int , init-time) default = '0x3' : Flash Block size configuration : [0x0..0x31]
+fvp_mps2.mps2_secure_control_register_block.SRAM_BLOCK_CFG=0x3 # (int , init-time) default = '0x3' : SRAM Block size configuration : [0x0..0x31]
+fvp_mps2.mps2_secure_control_register_block.FLASH_WATERMARK_SUPPORTED=1 # (bool , init-time) default = '1' : Flash Watermark supported
+fvp_mps2.mps2_secure_control_register_block.SRAM_WATERMARK_SUPPORTED=1 # (bool , init-time) default = '1' : SRAM Watermark supported
+fvp_mps2.exclusive_monitor_psram.enable_component=1 # (bool , init-time) default = '1' : Enable component
+fvp_mps2.exclusive_monitor_psram.number_of_monitors=0x8 # (int , init-time) default = '0x8' : Number of monitors : [0x1..0xFFFFFFFF]
+fvp_mps2.exclusive_monitor_psram.log2_granule_size=0x0 # (int , init-time) default = '0x0' : log2 of address granule size : [0x0..0xB]
+fvp_mps2.exclusive_monitor_psram.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master
+fvp_mps2.exclusive_monitor_psram.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit
+fvp_mps2.exclusive_monitor_psram.shareability_domain=0x3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) : [0x0..0x3]
+fvp_mps2.exclusive_monitor_psram.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores
+fvp_mps2.exclusive_monitor_zbtsram1.enable_component=1 # (bool , init-time) default = '1' : Enable component
+fvp_mps2.exclusive_monitor_zbtsram1.number_of_monitors=0x8 # (int , init-time) default = '0x8' : Number of monitors : [0x1..0xFFFFFFFF]
+fvp_mps2.exclusive_monitor_zbtsram1.log2_granule_size=0x0 # (int , init-time) default = '0x0' : log2 of address granule size : [0x0..0xB]
+fvp_mps2.exclusive_monitor_zbtsram1.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master
+fvp_mps2.exclusive_monitor_zbtsram1.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit
+fvp_mps2.exclusive_monitor_zbtsram1.shareability_domain=0x3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) : [0x0..0x3]
+fvp_mps2.exclusive_monitor_zbtsram1.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores
+fvp_mps2.exclusive_monitor_zbtsram2.enable_component=1 # (bool , init-time) default = '1' : Enable component
+fvp_mps2.exclusive_monitor_zbtsram2.number_of_monitors=0x8 # (int , init-time) default = '0x8' : Number of monitors : [0x1..0xFFFFFFFF]
+fvp_mps2.exclusive_monitor_zbtsram2.log2_granule_size=0x0 # (int , init-time) default = '0x0' : log2 of address granule size : [0x0..0xB]
+fvp_mps2.exclusive_monitor_zbtsram2.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master
+fvp_mps2.exclusive_monitor_zbtsram2.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit
+fvp_mps2.exclusive_monitor_zbtsram2.shareability_domain=0x3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) : [0x0..0x3]
+fvp_mps2.exclusive_monitor_zbtsram2.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores
+fvp_mps2.dma0_securitymodifier.behaviour_ns_to_s=0x0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S
+fvp_mps2.dma1_securitymodifier.behaviour_ns_to_s=0x0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S
+fvp_mps2.dma2_securitymodifier.behaviour_ns_to_s=0x0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S
+fvp_mps2.dma3_securitymodifier.behaviour_ns_to_s=0x0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S
+fvp_mps2.dma0.fifo_size=0x10 # (int , init-time) default = '0x10' : Channel FIFO size in bytes
+fvp_mps2.dma0.max_transfer=0x100 # (int , init-time) default = '0x100' : Largest atomic transfer
+fvp_mps2.dma0.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response
+fvp_mps2.dma0.activate_delay=0x0 # (int , init-time) default = '0x0' : request delay
+fvp_mps2.dma1.fifo_size=0x10 # (int , init-time) default = '0x10' : Channel FIFO size in bytes
+fvp_mps2.dma1.max_transfer=0x100 # (int , init-time) default = '0x100' : Largest atomic transfer
+fvp_mps2.dma1.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response
+fvp_mps2.dma1.activate_delay=0x0 # (int , init-time) default = '0x0' : request delay
+fvp_mps2.dma2.fifo_size=0x10 # (int , init-time) default = '0x10' : Channel FIFO size in bytes
+fvp_mps2.dma2.max_transfer=0x100 # (int , init-time) default = '0x100' : Largest atomic transfer
+fvp_mps2.dma2.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response
+fvp_mps2.dma2.activate_delay=0x0 # (int , init-time) default = '0x0' : request delay
+fvp_mps2.dma3.fifo_size=0x10 # (int , init-time) default = '0x10' : Channel FIFO size in bytes
+fvp_mps2.dma3.max_transfer=0x100 # (int , init-time) default = '0x100' : Largest atomic transfer
+fvp_mps2.dma3.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response
+fvp_mps2.dma3.activate_delay=0x0 # (int , init-time) default = '0x0' : request delay
+fvp_mps2.iotss_systemcontrol.cpu0wait=0 # (bool , init-time) default = '0' : Whether to hold cpu1 in reset at boot
+fvp_mps2.iotss_systemcontrol.cpu1wait=1 # (bool , init-time) default = '1' : Whether to hold cpu1 in reset at boot
+fvp_mps2.sse200.iotss_cpuidentity.debugger_master_id=0xFFFFFFFF # (int , init-time) default = '0xFFFFFFFF' : : [0x0..0xFFFFFFFF]
+#----------------------------------------------------------------------------------------------
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33.h
new file mode 100644
index 0000000..9593c61
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33.h
@@ -0,0 +1,130 @@
+/**************************************************************************//**
+ * @file ARMCM33.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM33 Device (configured for ARMCM33 without FPU, without DSP extension, without TrustZone)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM33_H
+#define ARMCM33_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SecureFault_IRQn = -9, /* 7 Secure Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 480 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM33_REV 0x0000U /* Core revision r0p1 */
+#define __SAUREGION_PRESENT 0U /* SAU regions present */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 0U /* no FPU present */
+#define __DSP_PRESENT 0U /* no DSP extension present */
+
+#include "core_cm33.h" /* Processor and core peripherals */
+#include "system_ARMCM33.h" /* System Header */
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM33_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_DSP_FP.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_DSP_FP.h
new file mode 100644
index 0000000..d303bea
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_DSP_FP.h
@@ -0,0 +1,130 @@
+/**************************************************************************//**
+ * @file ARMCM33_DSP_FP.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM33 Device (configured for ARMCM33 with FPU, with DSP extension)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM33_DSP_FP_H
+#define ARMCM33_DSP_FP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SecureFault_IRQn = -9, /* 7 Secure Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 480 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM33_REV 0x0000U /* Core revision r0p1 */
+#define __SAUREGION_PRESENT 0U /* SAU regions present */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 1U /* FPU present */
+#define __DSP_PRESENT 1U /* DSP extension present */
+
+#include "core_cm33.h" /* Processor and core peripherals */
+#include "system_ARMCM33.h" /* System Header */
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM33_DSP_FP_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h
new file mode 100644
index 0000000..0d78c79
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h
@@ -0,0 +1,130 @@
+/**************************************************************************//**
+ * @file ARMCM33_DSP_FP_TZ.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM33 Device (configured for ARMCM33 with FPU, with DSP extension, with TrustZone)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM33_DSP_FP_TZ_H
+#define ARMCM33_DSP_FP_TZ_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SecureFault_IRQn = -9, /* 7 Secure Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 480 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM33_REV 0x0000U /* Core revision r0p1 */
+#define __SAUREGION_PRESENT 1U /* SAU regions present */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 1U /* FPU present */
+#define __DSP_PRESENT 1U /* DSP extension present */
+
+#include "core_cm33.h" /* Processor and core peripherals */
+#include "system_ARMCM33.h" /* System Header */
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM33_DSP_FP_TZ_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_TZ.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_TZ.h
new file mode 100644
index 0000000..3912a11
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/ARMCM33_TZ.h
@@ -0,0 +1,130 @@
+/**************************************************************************//**
+ * @file ARMCM33_TZ.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM33 Device (configured for ARMCM33 without FPU, without DSP extension, with TrustZone)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM33_TZ_H
+#define ARMCM33_TZ_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SecureFault_IRQn = -9, /* 7 Secure Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 480 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM33_REV 0x0000U /* Core revision r0p1 */
+#define __SAUREGION_PRESENT 1U /* SAU regions present */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 0U /* no FPU present */
+#define __DSP_PRESENT 0U /* no DSP extension present */
+
+#include "core_cm33.h" /* Processor and core peripherals */
+#include "system_ARMCM33.h" /* System Header */
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM33_TZ_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/system_ARMCM33.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/system_ARMCM33.h
new file mode 100644
index 0000000..42d07ec
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Include/system_ARMCM33.h
@@ -0,0 +1,55 @@
+/**************************************************************************//**
+ * @file system_ARMCM33.h
+ * @brief CMSIS Device System Header File for
+ * ARMCM33 Device
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_ARMCM33_H
+#define SYSTEM_ARMCM33_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
+
+
+/**
+ \brief Setup the microcontroller system.
+
+ Initialize the System and update the SystemCoreClock variable.
+ */
+extern void SystemInit (void);
+
+
+/**
+ \brief Update SystemCoreClock variable.
+
+ Updates the SystemCoreClock with current core Clock retrieved from cpu registers.
+ */
+extern void SystemCoreClockUpdate (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SYSTEM_ARMCM33_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct
new file mode 100644
index 0000000..6f8695c
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/lnk.sct
@@ -0,0 +1,75 @@
+#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m7 -xc
+; command above MUST be in first line (no comment above!)
+
+/*
+;-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
+*/
+
+#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
+
+
+/*----------------------------------------------------------------------------
+ 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/ARMCM33/LinkScripts/AC6/mem_ARMCM33.h b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/mem_ARMCM33.h
new file mode 100644
index 0000000..19ec60e
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/LinkScripts/AC6/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_ARMCM33_H
+#define __MEM_ARMCM33_H
+
+
+
+#define STACK_SIZE 0x00003000
+#define HEAP_SIZE 0x00100000
+
+
+
+#endif /* __MEM_ARMCM33_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/AC6/startup_ARMCM33.s b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/AC6/startup_ARMCM33.s
new file mode 100644
index 0000000..2212cd8
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/Startup/AC6/startup_ARMCM33.s
@@ -0,0 +1,172 @@
+;/**************************************************************************//**
+; * @file startup_ARMCM33.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM33 Device
+; * @version V5.4.0
+; * @date 12. December 2018
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+
+#include "mem_ARMCM33.h"
+
+;<h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Stack_Size EQU STACK_SIZE
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+__stack_limit
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+;<h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Heap_Size EQU HEAP_SIZE
+
+ IF Heap_Size != 0 ; Heap is provided
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+ ENDIF
+
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; -14 NMI Handler
+ DCD HardFault_Handler ; -13 Hard Fault Handler
+ DCD MemManage_Handler ; -12 MPU Fault Handler
+ DCD BusFault_Handler ; -11 Bus Fault Handler
+ DCD UsageFault_Handler ; -10 Usage Fault Handler
+ DCD SecureFault_Handler ; -9 Secure Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; -5 SVCall Handler
+ DCD DebugMon_Handler ; -4 Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; -2 PendSV Handler
+ DCD SysTick_Handler ; -1 SysTick Handler
+
+ ; Interrupts
+ DCD Interrupt0_Handler ; 0 Interrupt 0
+ DCD Interrupt1_Handler ; 1 Interrupt 1
+ DCD Interrupt2_Handler ; 2 Interrupt 2
+ DCD Interrupt3_Handler ; 3 Interrupt 3
+ DCD Interrupt4_Handler ; 4 Interrupt 4
+ DCD Interrupt5_Handler ; 5 Interrupt 5
+ DCD Interrupt6_Handler ; 6 Interrupt 6
+ DCD Interrupt7_Handler ; 7 Interrupt 7
+ DCD Interrupt8_Handler ; 8 Interrupt 8
+ DCD Interrupt9_Handler ; 9 Interrupt 9
+
+ SPACE (470 * 4) ; Interrupts 10 .. 480 are left out
+__Vectors_End
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+
+ AREA |.text|, CODE, READONLY
+
+; Reset Handler
+
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =__stack_limit
+ MSR MSPLIM, R0 ; Non-secure version of MSPLIM is RAZ/WI
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+
+; Macro to define default exception/interrupt handlers.
+; Default handler are weak symbols with an endless loop.
+; They can be overwritten by real handlers.
+ MACRO
+ Set_Default_Handler $Handler_Name
+$Handler_Name PROC
+ EXPORT $Handler_Name [WEAK]
+ B .
+ ENDP
+ MEND
+
+
+; Default exception/interrupt handler
+
+ Set_Default_Handler NMI_Handler
+ Set_Default_Handler HardFault_Handler
+ Set_Default_Handler MemManage_Handler
+ Set_Default_Handler BusFault_Handler
+ Set_Default_Handler UsageFault_Handler
+ Set_Default_Handler SecureFault_Handler
+ Set_Default_Handler SVC_Handler
+ Set_Default_Handler DebugMon_Handler
+ Set_Default_Handler PendSV_Handler
+ Set_Default_Handler SysTick_Handler
+
+ Set_Default_Handler Interrupt0_Handler
+ Set_Default_Handler Interrupt1_Handler
+ Set_Default_Handler Interrupt2_Handler
+ Set_Default_Handler Interrupt3_Handler
+ Set_Default_Handler Interrupt4_Handler
+ Set_Default_Handler Interrupt5_Handler
+ Set_Default_Handler Interrupt6_Handler
+ Set_Default_Handler Interrupt7_Handler
+ Set_Default_Handler Interrupt8_Handler
+ Set_Default_Handler Interrupt9_Handler
+
+ ALIGN
+
+
+; User setup Stack & Heap
+
+ IF :LNOT::DEF:__MICROLIB
+ IMPORT __use_two_region_memory
+ ENDIF
+
+ EXPORT __stack_limit
+ EXPORT __initial_sp
+ IF Heap_Size != 0 ; Heap is provided
+ EXPORT __heap_base
+ EXPORT __heap_limit
+ ENDIF
+
+ END
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c b/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c
new file mode 100644
index 0000000..a6f4c88
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM33/system_ARMCM33.c
@@ -0,0 +1,99 @@
+/**************************************************************************//**
+ * @file system_ARMCM33.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM33 Device
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#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
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL (50000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (XTAL / 2U)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __VECTOR_TABLE;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+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 */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ TZ_SAU_Setup();
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/ARMCM4.h b/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/ARMCM4.h
new file mode 100644
index 0000000..c1a9877
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/ARMCM4.h
@@ -0,0 +1,127 @@
+/**************************************************************************//**
+ * @file ARMCM4.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM4 Device (configured for CM4 without FPU)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM4_H
+#define ARMCM4_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 224 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM4_REV 0x0001U /* Core revision r0p1 */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 0U /* no FPU present */
+
+#include "core_cm4.h" /* Processor and core peripherals */
+#include "system_ARMCM4.h" /* System Header */
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM4_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/ARMCM4_FP.h b/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/ARMCM4_FP.h
new file mode 100644
index 0000000..6e53824
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/ARMCM4_FP.h
@@ -0,0 +1,127 @@
+/**************************************************************************//**
+ * @file ARMCM4_FP.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM4 Device (configured for CM4 with FPU)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM4_FP_H
+#define ARMCM4_FP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 224 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM4_REV 0x0001U /* Core revision r0p1 */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 1U /* FPU present */
+
+#include "core_cm4.h" /* Processor and core peripherals */
+#include "system_ARMCM4.h" /* System Header */
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM4_FP_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/system_ARMCM4.h b/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/system_ARMCM4.h
new file mode 100644
index 0000000..2557390
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Include/system_ARMCM4.h
@@ -0,0 +1,55 @@
+/**************************************************************************//**
+ * @file system_ARMCM4.h
+ * @brief CMSIS Device System Header File for
+ * ARMCM4 Device
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_ARMCM4_H
+#define SYSTEM_ARMCM4_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
+
+
+/**
+ \brief Setup the microcontroller system.
+
+ Initialize the System and update the SystemCoreClock variable.
+ */
+extern void SystemInit (void);
+
+
+/**
+ \brief Update SystemCoreClock variable.
+
+ Updates the SystemCoreClock with current core Clock retrieved from cpu registers.
+ */
+extern void SystemCoreClockUpdate (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SYSTEM_ARMCM4_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct
new file mode 100644
index 0000000..9952d51
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/lnk.sct
@@ -0,0 +1,75 @@
+#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m4 -xc
+; command above MUST be in first line (no comment above!)
+
+/*
+;-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
+*/
+
+#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
+
+/*--------------------- Embedded RAM Configuration ---------------------------
+; <h> RAM Configuration
+; <o0> RAM Base Address <0x0-0xFFFFFFFF:8>
+; <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+ *----------------------------------------------------------------------------*/
+#define __RAM_BASE 0x20000000
+#define __RAM_SIZE 0x00200000
+
+/*--------------------- Stack / Heap Configuration ---------------------------
+; <h> Stack / Heap Configuration
+; <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+ *----------------------------------------------------------------------------*/
+#define __STACK_SIZE STACK_SIZE
+#define __HEAP_SIZE HEAP_SIZE
+
+
+/*----------------------------------------------------------------------------
+ User Stack & Heap boundery definition
+ *----------------------------------------------------------------------------*/
+#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */
+#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */
+
+
+/*----------------------------------------------------------------------------
+ Scatter File Definitions definition
+ *----------------------------------------------------------------------------*/
+#define __RO_BASE __ROM_BASE
+#define __RO_SIZE __ROM_SIZE
+
+#define __RW_BASE (__RAM_BASE )
+#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE)
+
+
+
+LR_ROM __RO_BASE __RO_SIZE { ; load region size_region
+ ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ .ANY (+XO)
+ }
+
+ RW_RAM __RW_BASE __RW_SIZE { ; RW data
+ .ANY (+RW +ZI)
+ }
+
+#if __HEAP_SIZE > 0
+ ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap
+ }
+#endif
+
+ ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack
+ }
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/mem_ARMCM4.h b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/mem_ARMCM4.h
new file mode 100644
index 0000000..84a1ff1
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/LinkScripts/AC6/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.s b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/AC6/startup_ARMCM4.s
new file mode 100644
index 0000000..9b2851e
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/Startup/AC6/startup_ARMCM4.s
@@ -0,0 +1,168 @@
+;/**************************************************************************//**
+; * @file startup_ARMCM4.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM4 Device
+; * @version V5.4.0
+; * @date 12. December 2018
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+
+#include "mem_ARMCM4.h"
+
+;<h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Stack_Size EQU STACK_SIZE
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+__stack_limit
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+;<h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Heap_Size EQU HEAP_SIZE
+
+ IF Heap_Size != 0 ; Heap is provided
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+ ENDIF
+
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; -14 NMI Handler
+ DCD HardFault_Handler ; -13 Hard Fault Handler
+ DCD MemManage_Handler ; -12 MPU Fault Handler
+ DCD BusFault_Handler ; -11 Bus Fault Handler
+ DCD UsageFault_Handler ; -10 Usage Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; -5 SVCall Handler
+ DCD DebugMon_Handler ; -4 Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; -2 PendSV Handler
+ DCD SysTick_Handler ; -1 SysTick Handler
+
+ ; Interrupts
+ DCD Interrupt0_Handler ; 0 Interrupt 0
+ DCD Interrupt1_Handler ; 1 Interrupt 1
+ DCD Interrupt2_Handler ; 2 Interrupt 2
+ DCD Interrupt3_Handler ; 3 Interrupt 3
+ DCD Interrupt4_Handler ; 4 Interrupt 4
+ DCD Interrupt5_Handler ; 5 Interrupt 5
+ DCD Interrupt6_Handler ; 6 Interrupt 6
+ DCD Interrupt7_Handler ; 7 Interrupt 7
+ DCD Interrupt8_Handler ; 8 Interrupt 8
+ DCD Interrupt9_Handler ; 9 Interrupt 9
+
+ SPACE (214 * 4) ; Interrupts 10 .. 224 are left out
+__Vectors_End
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+
+ AREA |.text|, CODE, READONLY
+
+; Reset Handler
+
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+
+; Macro to define default exception/interrupt handlers.
+; Default handler are weak symbols with an endless loop.
+; They can be overwritten by real handlers.
+ MACRO
+ Set_Default_Handler $Handler_Name
+$Handler_Name PROC
+ EXPORT $Handler_Name [WEAK]
+ B .
+ ENDP
+ MEND
+
+
+; Default exception/interrupt handler
+
+ Set_Default_Handler NMI_Handler
+ Set_Default_Handler HardFault_Handler
+ Set_Default_Handler MemManage_Handler
+ Set_Default_Handler BusFault_Handler
+ Set_Default_Handler UsageFault_Handler
+ Set_Default_Handler SVC_Handler
+ Set_Default_Handler DebugMon_Handler
+ Set_Default_Handler PendSV_Handler
+ Set_Default_Handler SysTick_Handler
+
+ Set_Default_Handler Interrupt0_Handler
+ Set_Default_Handler Interrupt1_Handler
+ Set_Default_Handler Interrupt2_Handler
+ Set_Default_Handler Interrupt3_Handler
+ Set_Default_Handler Interrupt4_Handler
+ Set_Default_Handler Interrupt5_Handler
+ Set_Default_Handler Interrupt6_Handler
+ Set_Default_Handler Interrupt7_Handler
+ Set_Default_Handler Interrupt8_Handler
+ Set_Default_Handler Interrupt9_Handler
+
+ ALIGN
+
+
+; User setup Stack & Heap
+
+ IF :LNOT::DEF:__MICROLIB
+ IMPORT __use_two_region_memory
+ ENDIF
+
+ EXPORT __stack_limit
+ EXPORT __initial_sp
+ IF Heap_Size != 0 ; Heap is provided
+ EXPORT __heap_base
+ EXPORT __heap_limit
+ ENDIF
+
+ END
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c b/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c
new file mode 100644
index 0000000..94541d8
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM4/system_ARMCM4.c
@@ -0,0 +1,83 @@
+/**************************************************************************//**
+ * @file system_ARMCM4.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM4 Device
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined (ARMCM4)
+ #include "ARMCM4.h"
+#elif defined (ARMCM4_FP)
+ #include "ARMCM4_FP.h"
+#else
+ #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL (50000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (XTAL / 2U)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __VECTOR_TABLE;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+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 */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7.h
new file mode 100644
index 0000000..4db9527
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7.h
@@ -0,0 +1,132 @@
+/**************************************************************************//**
+ * @file ARMCM7.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM7 Device (configured for CM7 without FPU)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM7_H
+#define ARMCM7_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 224 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM7_REV 0x0000U /* Core revision r0p0 */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 0U /* no FPU present */
+#define __FPU_DP 0U /* unused */
+#define __ICACHE_PRESENT 1U
+#define __DCACHE_PRESENT 1U
+#define __DTCM_PRESENT 1U
+
+#include "core_cm7.h" /* Processor and core peripherals */
+#include "system_ARMCM7.h" /* System Header */
+
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM7_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7_DP.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7_DP.h
new file mode 100644
index 0000000..d1626fa
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7_DP.h
@@ -0,0 +1,132 @@
+/**************************************************************************//**
+ * @file ARMCM7_DP.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM7 Device (configured for CM7 with double precision FPU)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM7_DP_H
+#define ARMCM7_DP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 224 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM7_REV 0x0000U /* Core revision r0p0 */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 1U /* FPU present */
+#define __FPU_DP 1U /* double precision FPU */
+#define __ICACHE_PRESENT 1U
+#define __DCACHE_PRESENT 1U
+#define __DTCM_PRESENT 1U
+
+#include "core_cm7.h" /* Processor and core peripherals */
+#include "system_ARMCM7.h" /* System Header */
+
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM7_DP_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7_SP.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7_SP.h
new file mode 100644
index 0000000..c993210
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/ARMCM7_SP.h
@@ -0,0 +1,132 @@
+/**************************************************************************//**
+ * @file ARMCM7_SP.h
+ * @brief CMSIS Core Peripheral Access Layer Header File for
+ * ARMCM7 Device (configured for CM7 with single precision FPU)
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ARMCM7_SP_H
+#define ARMCM7_SP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+typedef enum IRQn
+{
+/* ------------------- Processor Exceptions Numbers ----------------------------- */
+ NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */
+ HardFault_IRQn = -13, /* 3 HardFault Interrupt */
+ MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */
+ BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */
+ UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */
+ SVCall_IRQn = -5, /* 11 SV Call Interrupt */
+ DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */
+ PendSV_IRQn = -2, /* 14 Pend SV Interrupt */
+ SysTick_IRQn = -1, /* 15 System Tick Interrupt */
+
+/* ------------------- Processor Interrupt Numbers ------------------------------ */
+ Interrupt0_IRQn = 0,
+ Interrupt1_IRQn = 1,
+ Interrupt2_IRQn = 2,
+ Interrupt3_IRQn = 3,
+ Interrupt4_IRQn = 4,
+ Interrupt5_IRQn = 5,
+ Interrupt6_IRQn = 6,
+ Interrupt7_IRQn = 7,
+ Interrupt8_IRQn = 8,
+ Interrupt9_IRQn = 9
+ /* Interrupts 10 .. 224 are left out */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================ Processor and Core Peripheral Section ================ */
+/* ================================================================================ */
+
+/* ------- Start of section using anonymous unions and disabling warnings ------- */
+#if defined (__CC_ARM)
+ #pragma push
+ #pragma anon_unions
+#elif defined (__ICCARM__)
+ #pragma language=extended
+#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wc11-extensions"
+ #pragma clang diagnostic ignored "-Wreserved-id-macro"
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning 586
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+/* -------- Configuration of Core Peripherals ----------------------------------- */
+#define __CM7_REV 0x0000U /* Core revision r0p0 */
+#define __MPU_PRESENT 1U /* MPU present */
+#define __VTOR_PRESENT 1U /* VTOR present */
+#define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
+#define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
+#define __FPU_PRESENT 1U /* FPU present */
+#define __FPU_DP 0U /* single precision FPU */
+#define __ICACHE_PRESENT 1U
+#define __DCACHE_PRESENT 1U
+#define __DTCM_PRESENT 1U
+
+#include "core_cm7.h" /* Processor and core peripherals */
+#include "system_ARMCM7.h" /* System Header */
+
+
+
+/* -------- End of section using anonymous unions and disabling warnings -------- */
+#if defined (__CC_ARM)
+ #pragma pop
+#elif defined (__ICCARM__)
+ /* leave anonymous unions enabled */
+#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
+ #pragma clang diagnostic pop
+#elif defined (__GNUC__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TMS470__)
+ /* anonymous unions are enabled by default */
+#elif defined (__TASKING__)
+ #pragma warning restore
+#elif defined (__CSMC__)
+ /* anonymous unions are enabled by default */
+#else
+ #warning Not supported compiler type
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARMCM7_SP_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/system_ARMCM7.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/system_ARMCM7.h
new file mode 100644
index 0000000..ec831e0
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Include/system_ARMCM7.h
@@ -0,0 +1,55 @@
+/**************************************************************************//**
+ * @file system_ARMCM7.h
+ * @brief CMSIS Device System Header File for
+ * ARMCM7 Device
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_ARMCM7_H
+#define SYSTEM_ARMCM7_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
+
+
+/**
+ \brief Setup the microcontroller system.
+
+ Initialize the System and update the SystemCoreClock variable.
+ */
+extern void SystemInit (void);
+
+
+/**
+ \brief Update SystemCoreClock variable.
+
+ Updates the SystemCoreClock with current core Clock retrieved from cpu registers.
+ */
+extern void SystemCoreClockUpdate (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SYSTEM_ARMCM7_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct
new file mode 100644
index 0000000..7d580da
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/lnk.sct
@@ -0,0 +1,75 @@
+#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m7 -xc
+; command above MUST be in first line (no comment above!)
+
+/*
+;-------- <<< Use Configuration Wizard in Context Menu >>> -------------------
+*/
+
+#include "mem_ARMCM7.h"
+
+/*--------------------- Flash Configuration ----------------------------------
+; <h> Flash Configuration
+; <o0> Flash Base Address <0x0-0xFFFFFFFF:8>
+; <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+ *----------------------------------------------------------------------------*/
+#define __ROM_BASE 0x00000000
+#define __ROM_SIZE 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
+
+
+/*----------------------------------------------------------------------------
+ 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/AC6/mem_ARMCM7.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/mem_ARMCM7.h
new file mode 100644
index 0000000..84a1ff1
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/AC6/mem_ARMCM7.h
@@ -0,0 +1,38 @@
+/**************************************************************************//**
+ * @file mem_ARMCM7.h
+ * @brief Memory base and size definitions (used in scatter file)
+ * @version V1.1.0
+ * @date 15. May 2019
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MEM_ARMCM7_H
+#define __MEM_ARMCM7_H
+
+
+
+#define STACK_SIZE 0x00003000
+#define HEAP_SIZE 0x00100000
+
+
+
+#endif /* __MEM_ARMCM7_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
new file mode 100644
index 0000000..cc86072
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/lnk.ld
@@ -0,0 +1,296 @@
+/******************************************************************************
+ * @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_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 = 0x00100000;
+
+/*--------------------- 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 >>> -------------------
+ */
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
+ RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
+}
+
+/* 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
+{
+ .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*))
+ } > FLASH
+
+ /*
+ * 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.*)
+ } > FLASH
+
+ __exidx_start = .;
+ .ARM.exidx :
+ {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > FLASH
+ __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__ = .;
+ } > FLASH
+
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ /* Add each additional bss section here */
+/*
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+*/
+ __zero_table_end__ = .;
+ } > FLASH
+
+ /**
+ * 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/ARMCM7/LinkScripts/GCC/mem_ARMCM7.h b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/mem_ARMCM7.h
new file mode 100644
index 0000000..84a1ff1
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/LinkScripts/GCC/mem_ARMCM7.h
@@ -0,0 +1,38 @@
+/**************************************************************************//**
+ * @file mem_ARMCM7.h
+ * @brief Memory base and size definitions (used in scatter file)
+ * @version V1.1.0
+ * @date 15. May 2019
+ *
+ * @note
+ *
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MEM_ARMCM7_H
+#define __MEM_ARMCM7_H
+
+
+
+#define STACK_SIZE 0x00003000
+#define HEAP_SIZE 0x00100000
+
+
+
+#endif /* __MEM_ARMCM7_H */
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC6/startup_ARMCM7.s b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC6/startup_ARMCM7.s
new file mode 100644
index 0000000..333d358
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/AC6/startup_ARMCM7.s
@@ -0,0 +1,168 @@
+;/**************************************************************************//**
+; * @file startup_ARMCM7.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM7 Device
+; * @version V5.4.0
+; * @date 12. December 2018
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+
+#include "mem_ARMCM7.h"
+
+;<h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Stack_Size EQU STACK_SIZE
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+__stack_limit
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+;<h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;</h>
+
+Heap_Size EQU HEAP_SIZE
+
+ IF Heap_Size != 0 ; Heap is provided
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+ ENDIF
+
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; -14 NMI Handler
+ DCD HardFault_Handler ; -13 Hard Fault Handler
+ DCD MemManage_Handler ; -12 MPU Fault Handler
+ DCD BusFault_Handler ; -11 Bus Fault Handler
+ DCD UsageFault_Handler ; -10 Usage Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; -5 SVCall Handler
+ DCD DebugMon_Handler ; -4 Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; -2 PendSV Handler
+ DCD SysTick_Handler ; -1 SysTick Handler
+
+ ; Interrupts
+ DCD Interrupt0_Handler ; 0 Interrupt 0
+ DCD Interrupt1_Handler ; 1 Interrupt 1
+ DCD Interrupt2_Handler ; 2 Interrupt 2
+ DCD Interrupt3_Handler ; 3 Interrupt 3
+ DCD Interrupt4_Handler ; 4 Interrupt 4
+ DCD Interrupt5_Handler ; 5 Interrupt 5
+ DCD Interrupt6_Handler ; 6 Interrupt 6
+ DCD Interrupt7_Handler ; 7 Interrupt 7
+ DCD Interrupt8_Handler ; 8 Interrupt 8
+ DCD Interrupt9_Handler ; 9 Interrupt 9
+
+ SPACE (214 * 4) ; Interrupts 10 .. 224 are left out
+__Vectors_End
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+
+ AREA |.text|, CODE, READONLY
+
+; Reset Handler
+
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+
+; Macro to define default exception/interrupt handlers.
+; Default handler are weak symbols with an endless loop.
+; They can be overwritten by real handlers.
+ MACRO
+ Set_Default_Handler $Handler_Name
+$Handler_Name PROC
+ EXPORT $Handler_Name [WEAK]
+ B .
+ ENDP
+ MEND
+
+
+; Default exception/interrupt handler
+
+ Set_Default_Handler NMI_Handler
+ Set_Default_Handler HardFault_Handler
+ Set_Default_Handler MemManage_Handler
+ Set_Default_Handler BusFault_Handler
+ Set_Default_Handler UsageFault_Handler
+ Set_Default_Handler SVC_Handler
+ Set_Default_Handler DebugMon_Handler
+ Set_Default_Handler PendSV_Handler
+ Set_Default_Handler SysTick_Handler
+
+ Set_Default_Handler Interrupt0_Handler
+ Set_Default_Handler Interrupt1_Handler
+ Set_Default_Handler Interrupt2_Handler
+ Set_Default_Handler Interrupt3_Handler
+ Set_Default_Handler Interrupt4_Handler
+ Set_Default_Handler Interrupt5_Handler
+ Set_Default_Handler Interrupt6_Handler
+ Set_Default_Handler Interrupt7_Handler
+ Set_Default_Handler Interrupt8_Handler
+ Set_Default_Handler Interrupt9_Handler
+
+ ALIGN
+
+
+; User setup Stack & Heap
+
+ IF :LNOT::DEF:__MICROLIB
+ IMPORT __use_two_region_memory
+ ENDIF
+
+ EXPORT __stack_limit
+ EXPORT __initial_sp
+ IF Heap_Size != 0 ; Heap is provided
+ EXPORT __heap_base
+ EXPORT __heap_limit
+ ENDIF
+
+ END
diff --git a/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.S b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.S
new file mode 100644
index 0000000..4c03cfc
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/startup_ARMCM7.S
@@ -0,0 +1,170 @@
+/**************************************************************************//**
+ * @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/support.c b/CMSIS/DSP/Platforms/FVP/ARMCM7/Startup/GCC/support.c
new file mode 100644
index 0000000..740f6b0
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/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/ARMCM7/system_ARMCM7.c b/CMSIS/DSP/Platforms/FVP/ARMCM7/system_ARMCM7.c
new file mode 100644
index 0000000..f096084
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/ARMCM7/system_ARMCM7.c
@@ -0,0 +1,85 @@
+/**************************************************************************//**
+ * @file system_ARMCM7.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM7 Device
+ * @version V5.3.1
+ * @date 09. July 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#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
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL (50000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (XTAL / 2U)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __VECTOR_TABLE;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+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 */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/CMSIS/DSP/Platforms/FVP/platform.cmake b/CMSIS/DSP/Platforms/FVP/platform.cmake
new file mode 100644
index 0000000..8a097de
--- /dev/null
+++ b/CMSIS/DSP/Platforms/FVP/platform.cmake
@@ -0,0 +1,2 @@
+function(configure_platform PROJECTNAME ROOT CORE PLATFORMFOLDER)
+endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/Source/BasicMathFunctions/CMakeLists.txt b/CMSIS/DSP/Source/BasicMathFunctions/CMakeLists.txt
index 717669f..890b502 100644
--- a/CMSIS/DSP/Source/BasicMathFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/BasicMathFunctions/CMakeLists.txt
@@ -2,15 +2,18 @@
project(CMSISDSPBasicMath)
+include(config)
+include(configDsp)
file(GLOB SRC "./*_*.c")
add_library(CMSISDSPBasicMath STATIC ${SRC})
-configdsp(CMSISDSPBasicMath ..)
+configLib(CMSISDSPBasicMath ${ROOT})
+configDsp(CMSISDSPBasicMath ${ROOT})
### Includes
-target_include_directories(CMSISDSPBasicMath PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPBasicMath PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/CMakeLists.txt b/CMSIS/DSP/Source/CMakeLists.txt
index f5c58a7..0624362 100755
--- a/CMSIS/DSP/Source/CMakeLists.txt
+++ b/CMSIS/DSP/Source/CMakeLists.txt
@@ -1,10 +1,19 @@
cmake_minimum_required (VERSION 3.6)
-
+cmake_policy(SET CMP0077 NEW)
project(CMSISDSP)
+include(config)
# Needed to find the config modules
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/..)
+
+option(FASTMATHCOMPUTATIONS "Fast Math enabled" ON)
+option(NEON "Neon acceleration" OFF)
+option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF)
+option(LOOPUNROLL "Loop unrolling" ON)
+option(ROUNDING "Rounding" OFF)
+option(MATRIXCHECK "Matrix Checks" OFF)
+
# Select which parts of the CMSIS-DSP must be compiled.
# There are some dependencies between the parts but they are not tracked
# by this cmake. So, enabling some functions may require to enable some
@@ -131,13 +140,12 @@
###########################
# DSP Sources
-SET(DSP ".")
+SET(DSP ${ROOT}/CMSIS/DSP)
+
+list(APPEND CMAKE_MODULE_PATH ${DSP}/Source)
add_library(CMSISDSP INTERFACE)
-include(config)
-
-
if (BASICMATH)
add_subdirectory(BasicMathFunctions)
target_link_libraries(CMSISDSP INTERFACE CMSISDSPBasicMath)
@@ -217,7 +225,7 @@
endif()
### Includes
-target_include_directories(CMSISDSP INTERFACE "${DSP}/../Include")
+target_include_directories(CMSISDSP INTERFACE "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/CommonTables/CMakeLists.txt b/CMSIS/DSP/Source/CommonTables/CMakeLists.txt
index 7bdad93..c8a9912 100644
--- a/CMSIS/DSP/Source/CommonTables/CMakeLists.txt
+++ b/CMSIS/DSP/Source/CommonTables/CMakeLists.txt
@@ -2,10 +2,14 @@
project(CMSISDSPCommon)
-
+include(config)
+include(configDsp)
add_library(CMSISDSPCommon STATIC arm_common_tables.c)
+configLib(CMSISDSPCommon ${ROOT})
+configDsp(CMSISDSPCommon ${ROOT})
+
if (CONFIGTABLE AND ALLFFT)
target_compile_definitions(CMSISDSPCommon PUBLIC ARM_ALL_FFT_TABLES)
endif()
@@ -22,10 +26,9 @@
target_sources(CMSISDSPCommon PRIVATE arm_const_structs.c)
-configdsp(CMSISDSPCommon ..)
### Includes
-target_include_directories(CMSISDSPCommon PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPCommon PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/CMakeLists.txt b/CMSIS/DSP/Source/ComplexMathFunctions/CMakeLists.txt
index 16e06c6..c3bf93d 100644
--- a/CMSIS/DSP/Source/ComplexMathFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/ComplexMathFunctions/CMakeLists.txt
@@ -2,15 +2,18 @@
project(CMSISDSPComplexMath)
+include(config)
+include(configDsp)
file(GLOB SRC "./*_*.c")
add_library(CMSISDSPComplexMath STATIC ${SRC})
-configdsp(CMSISDSPComplexMath ..)
+configLib(CMSISDSPComplexMath ${ROOT})
+configDsp(CMSISDSPComplexMath ${ROOT})
### Includes
-target_include_directories(CMSISDSPComplexMath PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPComplexMath PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/ControllerFunctions/CMakeLists.txt b/CMSIS/DSP/Source/ControllerFunctions/CMakeLists.txt
index 705f5b8..1addc4b 100644
--- a/CMSIS/DSP/Source/ControllerFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/ControllerFunctions/CMakeLists.txt
@@ -2,9 +2,13 @@
project(CMSISDSPController)
+include(config)
+include(configDsp)
+
add_library(CMSISDSPController STATIC)
-configdsp(CMSISDSPController ..)
+configLib(CMSISDSPController ${ROOT})
+configDsp(CMSISDSPController ${ROOT})
include(interpol)
interpol(CMSISDSPController)
@@ -31,7 +35,7 @@
### Includes
-target_include_directories(CMSISDSPController PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPController PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt b/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt
index 6719b41..f5f181b 100644
--- a/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/FastMathFunctions/CMakeLists.txt
@@ -2,10 +2,14 @@
project(CMSISDSPFastMath)
+include(config)
+include(configDsp)
file(GLOB SRC "./*_*.c")
add_library(CMSISDSPFastMath STATIC)
+configLib(CMSISDSPFastMath ${ROOT})
+configDsp(CMSISDSPFastMath ${ROOT})
include(interpol)
interpol(CMSISDSPFastMath)
@@ -42,10 +46,11 @@
target_sources(CMSISDSPFastMath PRIVATE arm_sqrt_q31.c)
-configdsp(CMSISDSPFastMath ..)
+
+
### Includes
-target_include_directories(CMSISDSPFastMath PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPFastMath PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/FilteringFunctions/CMakeLists.txt b/CMSIS/DSP/Source/FilteringFunctions/CMakeLists.txt
index 59471ad..b351602 100644
--- a/CMSIS/DSP/Source/FilteringFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/FilteringFunctions/CMakeLists.txt
@@ -2,13 +2,16 @@
project(CMSISDSPFiltering)
+include(config)
+include(configDsp)
add_library(CMSISDSPFiltering STATIC)
include(interpol)
interpol(CMSISDSPFiltering)
-configdsp(CMSISDSPFiltering ..)
+configLib(CMSISDSPFiltering ${ROOT})
+configDsp(CMSISDSPFiltering ${ROOT})
if (CONFIGTABLE AND ALLFAST)
target_compile_definitions(CMSISDSPFiltering PUBLIC ARM_ALL_FAST_TABLES)
@@ -122,7 +125,7 @@
### Includes
-target_include_directories(CMSISDSPFiltering PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPFiltering PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/MatrixFunctions/CMakeLists.txt b/CMSIS/DSP/Source/MatrixFunctions/CMakeLists.txt
index d48d6b1..5a5b32b 100644
--- a/CMSIS/DSP/Source/MatrixFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/MatrixFunctions/CMakeLists.txt
@@ -2,15 +2,18 @@
project(CMSISDSPMatrix)
+include(config)
+include(configDsp)
file(GLOB SRC "./*_*.c")
add_library(CMSISDSPMatrix STATIC ${SRC})
-configdsp(CMSISDSPMatrix ..)
+configLib(CMSISDSPMatrix ${ROOT})
+configDsp(CMSISDSPMatrix ${ROOT})
### Includes
-target_include_directories(CMSISDSPMatrix PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPMatrix PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt b/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
index 3f23355..b8723ce 100644
--- a/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
@@ -2,15 +2,18 @@
project(CMSISDSPStatistics)
+include(config)
+include(configDsp)
file(GLOB SRC "./*_*.c")
add_library(CMSISDSPStatistics STATIC ${SRC})
-configdsp(CMSISDSPStatistics ..)
+configLib(CMSISDSPStatistics ${ROOT})
+configDsp(CMSISDSPStatistics ${ROOT})
### Includes
-target_include_directories(CMSISDSPStatistics PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPStatistics PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/SupportFunctions/CMakeLists.txt b/CMSIS/DSP/Source/SupportFunctions/CMakeLists.txt
index 33c4f87..61db36e 100644
--- a/CMSIS/DSP/Source/SupportFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/SupportFunctions/CMakeLists.txt
@@ -2,15 +2,18 @@
project(CMSISDSPSupport)
+include(config)
+include(configDsp)
file(GLOB SRC "./*_*.c")
add_library(CMSISDSPSupport STATIC ${SRC})
-configdsp(CMSISDSPSupport ..)
+configLib(CMSISDSPSupport ${ROOT})
+configDsp(CMSISDSPSupport ${ROOT})
### Includes
-target_include_directories(CMSISDSPSupport PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPSupport PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/TransformFunctions/CMakeLists.txt b/CMSIS/DSP/Source/TransformFunctions/CMakeLists.txt
index 4e5b4f2..02f40c8 100644
--- a/CMSIS/DSP/Source/TransformFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/TransformFunctions/CMakeLists.txt
@@ -2,9 +2,12 @@
project(CMSISDSPTransform)
-
+include(config)
+include(configDsp)
add_library(CMSISDSPTransform STATIC)
+configLib(CMSISDSPTransform ${ROOT})
+configDsp(CMSISDSPTransform ${ROOT})
include(fft)
fft(CMSISDSPTransform)
@@ -107,10 +110,9 @@
target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_q31.c)
endif()
-configdsp(CMSISDSPTransform ..)
### Includes
-target_include_directories(CMSISDSPTransform PUBLIC "${DSP}/../../Include")
+target_include_directories(CMSISDSPTransform PUBLIC "${DSP}/Include")
diff --git a/CMSIS/DSP/Source/configDsp.cmake b/CMSIS/DSP/Source/configDsp.cmake
new file mode 100644
index 0000000..9f2ee99
--- /dev/null
+++ b/CMSIS/DSP/Source/configDsp.cmake
@@ -0,0 +1,21 @@
+function(configDsp project root)
+
+if (CONFIGTABLE)
+ # Public because initialization for FFT may be defined in client code
+ # and needs access to the table.
+ target_compile_definitions(${project} PUBLIC ARM_DSP_CONFIG_TABLES)
+endif()
+
+if (LOOPUNROLL)
+ target_compile_definitions(${project} PRIVATE ARM_MATH_LOOPUNROLL)
+endif()
+
+if (ROUNDING)
+ target_compile_definitions(${project} PRIVATE ARM_MATH_ROUNDING)
+endif()
+
+if (MATRIXCHECK)
+ target_compile_definitions(${project} PRIVATE ARM_MATH_MATRIX_CHECK)
+endif()
+
+endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/.gitignore b/CMSIS/DSP/Testing/.gitignore
new file mode 100644
index 0000000..692a320
--- /dev/null
+++ b/CMSIS/DSP/Testing/.gitignore
@@ -0,0 +1,12 @@
+bench/
+build/
+build_m7/
+build_a5/
+build_sdsim_a5/
+build_sdsim_a15/
+build_m33/
+TODO.txt
+olddesc.txt
+oldprocessTests.py
+shortdesc.txt
+TestScripts/__pycache__/
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
new file mode 100644
index 0000000..4a074bb
--- /dev/null
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -0,0 +1,140 @@
+cmake_minimum_required (VERSION 3.6)
+cmake_policy(SET CMP0077 NEW)
+# The tests are assuming that MATRIX_CHECK is enabled when building
+# CMSIS-DSP.
+
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/..)
+
+function(writeConfig path)
+ set(output "")
+ list(APPEND output "OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION\n")
+
+ if (OPTIMIZED)
+ list(APPEND output "1")
+ else()
+ list(APPEND output "0")
+ endif()
+
+ if (HARDFP)
+ list(APPEND output ",1")
+ else()
+ list(APPEND output ",0")
+ endif()
+
+ if (FASTMATHCOMPUTATIONS)
+ list(APPEND output ",1")
+ else()
+ list(APPEND output ",0")
+ endif()
+
+ if (NEON OR NEONEXPERIMENTAL)
+ list(APPEND output ",1")
+ else()
+ list(APPEND output ",0")
+ endif()
+
+ if (LOOPUNROLL)
+ list(APPEND output ",1")
+ else()
+ list(APPEND output ",0")
+ endif()
+
+ if (ROUNDING)
+ list(APPEND output ",1")
+ else()
+ list(APPEND output ",0")
+ endif()
+
+ list(APPEND output ",${PLATFORMID}")
+ list(APPEND output ",${COREID},")
+ if (ARMAC6)
+ list(APPEND output "AC6")
+ elseif(GCC)
+ list(APPEND output "GCC")
+ endif()
+ compilerVersion()
+ list(APPEND output ",${COMPILERVERSION}")
+
+ file(WRITE ${path} ${output})
+
+
+endfunction()
+
+project(Testing)
+
+# Needed to find the config modules
+
+
+set(ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
+
+set(TESTSRC testmain.cpp
+ FrameworkSource/Test.cpp
+ FrameworkSource/Semihosting.cpp
+ FrameworkSource/IORunner.cpp
+ FrameworkSource/ArrayMemory.cpp
+ FrameworkSource/Pattern.cpp
+ FrameworkSource/PatternMgr.cpp
+ FrameworkSource/Error.cpp
+ FrameworkSource/FPGA.cpp
+ FrameworkSource/Timing.cpp
+ FrameworkSource/Generators.cpp
+ Source/BasicTestsF32.cpp
+ Source/BasicMathsBenchmarksF32.cpp
+ Source/BasicMathsBenchmarksQ31.cpp
+ Source/FullyConnected.cpp
+ Source/FullyConnectedBench.cpp
+ GeneratedSource/TestDesc.cpp
+ )
+
+
+add_subdirectory(../Source bin_dsp)
+add_subdirectory(${ROOT}/CMSIS/NN/Source bin_nn)
+
+add_library(TestingLib STATIC)
+
+
+# Change behavior of configBoot for scatter file
+# We use the linker files from older test framework because bigger sections are needed.
+# We should migrate the linker files to this new framework.
+set(TESTFRAMEWORK ON)
+include(config)
+
+# With -O2, generated code is crashing on some cycle accurate models.
+# (cpp part)
+disableOptimization(TestingLib)
+
+
+target_sources(TestingLib PRIVATE ${TESTSRC})
+
+
+### Includes
+target_link_libraries(TestingLib PRIVATE CMSISDSP)
+target_link_libraries(TestingLib PRIVATE CMSISNN)
+target_include_directories(TestingLib PRIVATE Include)
+target_include_directories(TestingLib PRIVATE FrameworkInclude)
+target_include_directories(TestingLib PRIVATE GeneratedInclude)
+configLib(TestingLib ${ROOT})
+
+# Because we need access to core include for
+# timing features in the test framework.
+# So we need to identify the core
+# then reference the right include folder
+set_platform_core()
+core_includes(TestingLib)
+
+add_executable(Testing main.cpp)
+
+# With -O2, generated code is crashing on some cycle accurate models.
+# (cpp part)
+disableOptimization(Testing)
+
+configApp(Testing ${ROOT})
+
+target_link_libraries(Testing PRIVATE TestingLib)
+
+writeConfig("currentConfig.csv")
+
+
+
+
+
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h b/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h
new file mode 100644
index 0000000..0bd144c
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/ArrayMemory.h
@@ -0,0 +1,63 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: ArrayMemory.h
+ * Description: Array Memory Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ARRAY_MEMORY_H_
+#define _ARRAY_MEMORY_H_
+
+#include "Test.h"
+
+namespace Client{
+
+// Memory is implemented as a big buffer in which
+// we reserve blocks.
+// Like that we can manage alignment and tails
+class ArrayMemory:public Client::Memory
+{
+ public:
+ ArrayMemory(char* ptr, size_t bufferLength,int aligned, bool tail);
+ ArrayMemory(char* ptr, size_t bufferLength);
+ char *NewBuffer(size_t length);
+ void FreeMemory();
+
+ private:
+ // Pointer to C array used for memory
+ char *m_ptr;
+ // Size of C array buffer
+ size_t m_bufferLength;
+ // Alignement required for all buffers
+ // (in future may be a setting per bufer)
+ int alignSize;
+ // True if some padding must be added after buffers
+ bool tail=true;
+ // Current pointer to the memory
+ // It is where a new buffer will be allocated
+ char *m_currentPtr;
+};
+}
+
+#endif
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Error.h b/CMSIS/DSP/Testing/FrameworkInclude/Error.h
new file mode 100644
index 0000000..a49ed34
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Error.h
@@ -0,0 +1,161 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Error.h
+ * Description: Error Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _ASSERT_H_
+#define _ASSERT_H_
+
+#include <exception>
+#include "Test.h"
+#include "Pattern.h"
+
+#define UNKNOWN_ERROR 1
+#define EQUAL_ERROR 2
+#define NEAR_EQUAL_ERROR 3
+#define RELATIVE_ERROR 4
+#define SNR_ERROR 5
+#define DIFFERENT_LENGTH_ERROR 6
+#define BOOL_ERROR 7
+
+namespace Client {
+
+// Exception used by tests and runner
+// to report errors
+class Error: public std::exception
+{
+ public:
+ Error(Testing::errorID_t id,unsigned long nb)
+ {
+ this->errorID = id;
+ this->lineNumber = nb;
+ };
+
+ Testing::errorID_t errorID;
+ unsigned long lineNumber;
+};
+
+/*
+
+Several test functions to implement tests in the client.
+They should not be called directly but through macro
+to get the line number.
+
+(SNR functions to finish implementing)
+
+*/
+
+template <typename T>
+void assert_equal(unsigned long nb,T pa, T pb)
+{
+ if (pa != pb)
+ {
+ throw (Error(EQUAL_ERROR,nb));
+ }
+
+};
+
+template <typename T>
+void assert_equal(unsigned long nb,AnyPattern<T> &pa, AnyPattern<T> &pb)
+{
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(EQUAL_ERROR,nb));
+ }
+
+ unsigned long i=0;
+
+ T *ptrA = pa.ptr();
+ T *ptrB = pb.ptr();
+
+ for(i=0; i < pa.nbSamples(); i++)
+ {
+ assert_equal(nb,ptrA[i],ptrB[i]);
+ }
+};
+
+template <typename T>
+void assert_near_equal(unsigned long nb,T pa, T pb, T threshold)
+{
+ if (abs(pa - pb) > threshold)
+ {
+ throw (Error(EQUAL_ERROR,nb));
+ }
+};
+
+template <>
+void assert_near_equal(unsigned long nb,float32_t pa, float32_t pb, float32_t threshold);
+
+template <typename T>
+void assert_near_equal(unsigned long nb,AnyPattern<T> &pa, AnyPattern<T> &pb, T threshold)
+{
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(NEAR_EQUAL_ERROR,nb));
+ }
+
+ unsigned long i=0;
+
+ T *ptrA = pa.ptr();
+ T *ptrB = pb.ptr();
+
+ for(i=0; i < pa.nbSamples(); i++)
+ {
+ if (abs(ptrA[i] - ptrB[i]) > threshold)
+ {
+ throw (Error(NEAR_EQUAL_ERROR,nb));
+ }
+ }
+};
+
+template <>
+void assert_near_equal(unsigned long nb,AnyPattern<float32_t> &pa, AnyPattern<float32_t> &pb, float32_t threshold);
+
+
+extern void assert_relative_error(unsigned long nb,float32_t &a, float32_t &b, float32_t threshold);
+extern void assert_relative_error(unsigned long nb,AnyPattern<float32_t> &pa, AnyPattern<float32_t> &pb, float32_t threshold);
+
+extern void assert_snr_error(unsigned long nb,AnyPattern<float32_t> &pa,AnyPattern<float32_t> &pb, float32_t threshold);
+extern void assert_snr_error(unsigned long nb,AnyPattern<q31_t> &pa,AnyPattern<q31_t> &pb, float32_t threshold);
+extern void assert_snr_error(unsigned long nb,AnyPattern<q15_t> &pa,AnyPattern<q15_t> &pb, float32_t threshold);
+extern void assert_snr_error(unsigned long nb,AnyPattern<q7_t> &pa,AnyPattern<q7_t> &pb, float32_t threshold);
+
+extern void assert_true(unsigned long nb,bool cond);
+extern void assert_false(unsigned long nb,bool cond);
+
+}
+
+/*
+
+Macros to use to implement tests.
+
+*/
+#define ASSERT_EQ(A,B) Client::assert_equal(__LINE__,A,B)
+#define ASSERT_NEAR_EQ(A,B,THRESH) Client::assert_near_equal(__LINE__,A,B,THRESH)
+#define ASSERT_REL_ERROR(A,B,THRESH) Client::assert_relative_error(__LINE__,A,B,THRESH)
+#define ASSERT_SNR(A,B,SNR) Client::assert_snr_error(__LINE__,A,B,SNR)
+#define ASSERT_TRUE(A) Client::assert_true(__LINE__,A)
+#define ASSERT_FALSE(A) Client::assert_false(__LINE__,A)
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h b/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
new file mode 100644
index 0000000..008fb2d
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/FPGA.h
@@ -0,0 +1,140 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: FPGA.h
+ * Description: FPGA Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _FPGA_H_
+#define _FPGA_H_
+#include <string>
+
+namespace Client
+{
+
+/*
+
+FPGA driver. Used to read a C array describing how to drive the test.
+
+
+*/
+
+ struct offsetOrGen;
+
+ class FPGA:public IO
+ {
+ public:
+ FPGA(const char *testDesc,const char *patterns);
+ ~FPGA();
+ void ReadIdentification();
+ void ReadTestIdentification();
+ Testing::nbParameters_t ReadNbParameters();
+ void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t);
+ void EndGroup();
+ void ImportPattern(Testing::PatternID_t);
+ void ReadPatternList();
+ void ReadOutputList();
+ void ReadParameterList();
+ Testing::nbSamples_t GetPatternSize(Testing::PatternID_t);
+
+ void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+ void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb);
+
+ void DumpParams(std::vector<Testing::param_t>&);
+ Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &);
+ bool hasParam();
+ Testing::PatternID_t getParamID();
+
+ void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t* data);
+ void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t* data);
+ void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t* data);
+ void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t* data);
+ void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t* data);
+ void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t* data);
+ void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t* data);
+ void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t* data);
+
+ Testing::testID_t CurrentTestID();
+ private:
+ void recomputeTestDir();
+ void DeleteParams();
+ struct offsetOrGen getParameterDesc(Testing::PatternID_t id);
+ // Get offset in C array of a pattern.
+ unsigned long getPatternOffset(Testing::PatternID_t);
+ // Get output path
+ std::string getOutputPath(Testing::outputID_t id);
+ // Get offset in C array of a parameter.
+ unsigned long getParameterOffset(Testing::PatternID_t);
+ // Read data from the driver C array.
+ void read32(unsigned long *);
+ void readStr(char *str);
+ void readChar(char *);
+
+ // Driver array
+ const char *m_testDesc;
+
+ // Pattern array
+ const char *m_patterns;
+
+ // Parameter array
+ char *m_parameters;
+
+ // Current position in the driver array
+ const char *currentDesc;
+ int currentKind;
+ Testing::testID_t currentId;
+ // Current param ID for the node
+ Testing::PatternID_t currentParam;
+ bool m_hasParam;
+
+ // Association pattern ID to pattern offset in C array m_patterns
+ std::vector<unsigned long> *patternOffsets;
+
+ // Association pattern ID to pattern size.
+ std::vector<Testing::nbSamples_t> *patternSizes;
+
+ // Association parameter ID to parameter offset in C array m_parameters
+ std::vector<struct offsetOrGen> *parameterOffsets;
+
+ // Association parameter ID to parameter size.
+ std::vector<Testing::nbSamples_t> *parameterSizes;
+
+ // testDir is only used for output.
+ // In a future version it will be removed.
+ // Output will just use ID and post processing
+ // script will recover the path
+ std::string testDir;
+ std::vector<std::string> *path;
+ std::string currentPath;
+ std::vector<std::string> *outputNames;
+
+ };
+}
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Generators.h b/CMSIS/DSP/Testing/FrameworkInclude/Generators.h
new file mode 100644
index 0000000..01e1145
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Generators.h
@@ -0,0 +1,11 @@
+#ifndef _GENERATORS_H_
+#define _GENERATORS_H_
+
+#include "Test.h"
+
+extern void generate1(Testing::param_t *,Testing::param_t *,Testing::nbParameterEntries_t &);
+extern void generate2(Testing::param_t *,Testing::param_t *,Testing::nbParameterEntries_t &);
+extern void generate3(Testing::param_t *,Testing::param_t *,Testing::nbParameterEntries_t &);
+extern void generate4(Testing::param_t *,Testing::param_t *,Testing::nbParameterEntries_t &);
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h b/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h
new file mode 100644
index 0000000..c275ef9
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/IORunner.h
@@ -0,0 +1,51 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: IORunner.h
+ * Description: IORunner Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _IORUNNER_H_
+#define _IORUNNER_H_
+
+#include "Test.h"
+
+namespace Client
+{
+ class IORunner:public Runner
+ {
+ public:
+ IORunner(IO*,PatternMgr*);
+ IORunner(IO*,PatternMgr*, Testing::RunningMode);
+ ~IORunner();
+ Testing::TestStatus run(Suite *s);
+ Testing::TestStatus run(Group *g);
+ private:
+ IO *m_io;
+ PatternMgr *m_mgr;
+ Testing::RunningMode m_runningMode;
+ };
+
+}
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h b/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
new file mode 100644
index 0000000..117227c
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Pattern.h
@@ -0,0 +1,286 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Pattern.h
+ * Description: Pattern Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _PATTERN_H_
+#define _PATTERN_H_
+
+#include "Test.h"
+#include "Pattern.h"
+
+namespace Client {
+
+template <typename T>
+T *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES)
+{
+ return(NULL);
+};
+
+template <>
+float64_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+float32_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+q31_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+q15_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+q7_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+uint32_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+uint16_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <>
+uint8_t *loadPattern(Testing::PatternID_t id, PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples);
+
+template <typename T>
+T *localPattern(Testing::nbSamples_t id, PatternMgr *mgr)
+{
+ return(NULL);
+};
+
+template <>
+float64_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+float32_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+q31_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+q15_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+q7_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+uint32_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+uint16_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+template <>
+uint8_t *localPattern(Testing::nbSamples_t nb, PatternMgr *mgr);
+
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nb,float64_t* data,PatternMgr *mgr);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,float32_t*,PatternMgr *);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q31_t*,PatternMgr *);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q15_t*,PatternMgr *);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,q7_t*,PatternMgr *);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,uint32_t*,PatternMgr *);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,uint16_t*,PatternMgr *);
+extern void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t,uint8_t*,PatternMgr *);
+
+
+
+template <class T>
+class AnyPattern {
+ protected:
+ // Pattern data
+ T *data;
+ // To know if the pattern has loaded any data
+ bool isLoaded;
+ // Memory generation when the data was loaded.
+ // If memory generation is different when accessing the data
+ // the pattern should return NULL.
+ unsigned long currentGen;
+ PatternMgr *m_mgr;
+ // Nb of samples in the loaded pattern
+ Testing::nbSamples_t m_nbSamples;
+ public:
+ AnyPattern()
+ {
+ this->data = NULL;
+ this->isLoaded = false;
+ this->currentGen = 0;
+ this->m_mgr=NULL;
+ this->m_nbSamples = 0;
+ }
+
+ /** Get pointer to the pattern data.
+
+ Pointer is NULL in following conditions:
+ Memory generation of pattern is different from memory manager's one
+ Pattern not loaded
+ Number of samples i 0
+
+ */
+ T *ptr()
+ {
+
+ if (this->currentGen != this->m_mgr->generation())
+ {
+ return(NULL);
+ }
+ else
+ {
+ if (this->isLoaded)
+ {
+ if (this->m_nbSamples > 0)
+ {
+ return(this->data);
+ }
+ else
+ {
+ return(NULL);
+ }
+ }
+ else
+ {
+ return(NULL);
+ }
+ }
+ }
+
+ Testing::nbSamples_t nbSamples()
+ {
+ return(this->m_nbSamples);
+ }
+
+};
+
+/** An input pattern
+
+*/
+template <class T>
+class Pattern : public AnyPattern<T>{
+ private:
+ Testing::PatternID_t m_id;
+ public:
+ Pattern()
+ {
+ }
+
+ /** Reload fresh data for the pattern.
+
+ If memory manager has not released its memory,
+ reloading an already loaded pattern will leak some memory
+ since the previous pattern will still be allocated
+ in the memory manager.
+
+ Generally this reload is used in setUp function of tests.
+ The memory being released in the tearDown function.
+
+ */
+ void reload(Testing::PatternID_t id,PatternMgr *mgr, Testing::nbSamples_t maxSamples=0)
+ {
+ Testing::nbSamples_t nbSamples;
+ this->m_id = id;
+ this->m_mgr=mgr;
+ this->currentGen = this->m_mgr->generation();
+ this->data = loadPattern<T>(this->m_id,this->m_mgr,nbSamples,maxSamples);
+ // Initialize the field with the number of samples read
+ // (which may have been constrained with maxSamples)
+ this->m_nbSamples = nbSamples;
+ this->isLoaded = true;
+ }
+};
+
+/** An reference pattern
+
+ The difference with input pattern is that reference
+ patterns are not loaded in dump mode and are not wasting
+ memory.
+
+*/
+template <class T>
+class RefPattern : public AnyPattern<T>{
+ private:
+ Testing::PatternID_t m_id;
+ public:
+ RefPattern()
+ {
+ }
+ void reload(Testing::PatternID_t id,PatternMgr *mgr, Testing::nbSamples_t maxSamples=0)
+ {
+ Testing::nbSamples_t nbSamples;
+ this->m_id = id;
+ this->m_mgr=mgr;
+ this->currentGen = this->m_mgr->generation();
+ // Reference patterns are not loaded in dump mode
+ if (this->m_mgr->runningMode() != Testing::kDumpOnly)
+ {
+ this->data = loadPattern<T>(this->m_id,this->m_mgr,nbSamples,maxSamples);
+ this->m_nbSamples = nbSamples;
+ this->isLoaded = true;
+ }
+ else
+ {
+ this->data=NULL;
+ this->m_nbSamples = 0;
+ this->isLoaded = false;
+ }
+ }
+};
+
+/** A local pattern is to be used for an output.
+ It is the only way for the test to allocate memory in the
+ memory manager.
+
+ Local patterns can be dumped.
+
+ A local pattern is not dumped when in test mode.
+
+*/
+template <class T>
+class LocalPattern : public AnyPattern<T>{
+ private:
+ Testing::outputID_t m_id;
+ public:
+ LocalPattern()
+ {
+ }
+ void create(Testing::nbSamples_t nbSamples,Testing::outputID_t id,PatternMgr *mgr)
+ {
+ this->m_nbSamples = nbSamples;
+ this->m_mgr=mgr;
+ this->m_id=id;
+ this->currentGen = this->m_mgr->generation();
+ this->data = localPattern<T>(nbSamples,this->m_mgr);
+ this->isLoaded = true;
+ }
+
+ void dump(PatternMgr *mgr)
+ {
+ if (this->m_mgr->runningMode() != Testing::kTestOnly)
+ {
+ dumpPattern(this->m_id,this->m_nbSamples,this->data,this->m_mgr);
+ }
+ }
+};
+
+
+}
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h b/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
new file mode 100644
index 0000000..18cc0fa
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Semihosting.h
@@ -0,0 +1,140 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Semihosting.h
+ * Description: Semihosting Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _SEMIHOSTING_H_
+#define _SEMIHOSTING_H_
+#include <string>
+#include <memory>
+
+
+namespace Client
+{
+/*
+
+Semihosting driver. Used to read a text file describing how to drive the test.
+
+
+*/
+
+ struct pathOrGen;
+
+ class Semihosting:public IO
+ {
+ public:
+ Semihosting(std::string path,std::string patternRootPath
+ ,std::string outputRootPath
+ ,std::string parameterRootPath);
+ ~Semihosting();
+ void ReadIdentification();
+ void ReadTestIdentification();
+ Testing::nbParameters_t ReadNbParameters();
+ void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t);
+ void EndGroup();
+ void ImportPattern(Testing::PatternID_t);
+ void ReadPatternList();
+ void ReadOutputList();
+ void ReadParameterList();
+ Testing::nbSamples_t GetPatternSize(Testing::PatternID_t);
+ //Testing::nbSamples_t GetParameterSize(Testing::PatternID_t);
+
+ void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+ void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb=0);
+
+ void DumpParams(std::vector<Testing::param_t>&);
+ Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &);
+
+ bool hasParam();
+ Testing::PatternID_t getParamID();
+
+ void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*);
+ void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*);
+ void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*);
+ void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*);
+ void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t*);
+ void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t*);
+ void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t*);
+ void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t*);
+
+ Testing::testID_t CurrentTestID();
+ private:
+ void DeleteParams();
+ void recomputeTestDir();
+ // Get the path to a pattern from a pattern ID
+ std::string getPatternPath(Testing::PatternID_t id);
+ // Get a path to an output file from an ouput category
+ // (test ID will be used so same output ID
+ // is giving different names for different tests)
+ std::string getOutputPath(Testing::outputID_t id);
+ // Get description of parameters from parameter ID
+ struct pathOrGen getParameterDesc(Testing::PatternID_t id);
+ // Get file size from local path
+ Testing::nbSamples_t GetFileSize(std::string &path);
+ // Driver filer controlling the tests.
+ FILE* infile;
+ // Node description (group, suite or test)
+ int currentKind;
+ // Node ID
+ Testing::testID_t currentId;
+ // Current param ID for the node
+ Testing::PatternID_t currentParam;
+ bool m_hasParam;
+
+ // Current path for the node
+ // (It is not the full path but the path added by this node)
+ std::string currentPath;
+
+ // Contains the current test directory
+ // (where to find pattenrs)
+ std::string testDir;
+ // Array of folder used to build the
+ // testDir parth
+ std::vector<std::string> *path;
+ // Root directory for patterns
+ std::string patternRootPath;
+ // Root directory for output
+ std::string outputRootPath;
+ // Root directory for parameters
+ std::string parameterRootPath;
+ // List of pattern filenames
+ // Used to find a name from a pattern ID
+ std::vector<std::string> *patternFilenames;
+ // List of output names
+ // Used to find a name from an output ID
+ std::vector<std::string> *outputNames;
+ // List of parameters descriptions
+ // Used to find a path or generator from a parameter ID
+ std::vector<struct pathOrGen> *parameterNames;
+ };
+}
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Test.h b/CMSIS/DSP/Testing/FrameworkInclude/Test.h
new file mode 100644
index 0000000..6cd3253
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Test.h
@@ -0,0 +1,550 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Test.h
+ * Description: Test Framework Header
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _TEST_H_
+#define _TEST_H_
+
+#include <cstdlib>
+#include <vector>
+#include <queue>
+#include <cstdio>
+#include "arm_math.h"
+
+// This special value means no limit on the number of samples.
+// It is used when importing patterns and we want to read
+// all the samples contained in the pattern.
+#define MAX_NB_SAMPLES 0
+
+// Pattern files are containing hexadecimal values.
+// So we need to be able to convert some int into float without convertion
+#define TOINT32(v) *((uint32_t*)&v)
+#define TOINT64(v) *((uint64_t*)&v)
+// Or convert some float into a uint32 or uint64 without convertion
+#define TOTYP(TYP,v) *((TYP*)&v)
+// So it is a cast and not a data conversion.
+// (uint32_t)1.0 would give 1. We want the hexadecimal representation of the float.
+// TOINT32(1.0) can be used
+
+
+namespace Testing
+{
+ enum TestStatus
+ {
+ kTestFailed=0,
+ kTestPassed=1
+ };
+
+ /* In Dump only, reference patterns are never read.
+ So tests are failing
+ and we dump output.
+ In this mode we are only interested in the output data and
+ not the test status.
+
+ In test only mode, no output is dumped.
+ */
+ enum RunningMode
+ {
+ kTestOnly=0,
+ kDumpOnly=1,
+ kTestAndDump=2
+ };
+
+
+
+
+ // test ID are ID of nodes in the tree of tests.
+ // So a group ID, suite ID or test ID all have the same type
+ // testID_t
+ typedef unsigned long testID_t;
+ typedef unsigned long outputID_t;
+ typedef unsigned long PatternID_t;
+
+ typedef unsigned long testIndex_t;
+ typedef unsigned long nbSamples_t;
+ typedef unsigned long errorID_t;
+
+
+
+ typedef uint32_t cycles_t;
+ typedef unsigned long nbMeasurements_t;
+
+ // parameter value
+ // (always int since we need to be able to iterate on
+ // different parameter values which are often dimensions of
+ // input data)
+ typedef int param_t;
+ // Number of parameters for a given configuration
+ typedef unsigned long nbParameters_t;
+ // Number of parameter configurations
+ typedef unsigned long nbParameterEntries_t;
+
+}
+
+namespace Client
+{
+
+
+
+/*
+
+Client code
+
+*/
+
+
+
+ class Suite;
+ class Group;
+
+
+ // Type of a test function
+ // It is not a function pointer (because the function is
+ // a method of a CPP class)
+ typedef void (Suite::*test)();
+
+/*
+
+API of Memory managers used in the test framework
+
+*/
+ class Memory
+{
+ public:
+ // Allocate a new buffer of size length
+ // and generate a pointer to this buffer.
+ // It does not imply that any malloc is done.
+ // It depends on how the Memory manager is implemented.
+ virtual char *NewBuffer(size_t length)=0;
+
+ // Free all the memory allocated by the memory manager
+ // and increment the memory generation number.
+ virtual void FreeMemory()=0;
+
+ // Get the memory generation number
+ unsigned long generation()
+ {
+ return(m_generation);
+ }
+
+ protected:
+ unsigned long m_generation=0;
+};
+
+
+ // A runner is a class driving the tests
+ // It can use information from driving files
+ // or in the future could communicate with a process
+ // on a host computer which would be the real driver of the
+ // testing.
+ // It is following the visitor pattern. IT is the reason for an accept
+ // function in Group class.
+ // Run is the visitor
+ class Runner
+ {
+ public:
+ virtual Testing::TestStatus run(Suite*) = 0;
+ virtual Testing::TestStatus run(Group*) = 0;
+ };
+
+ // Abstract the IO needs of the test framework.
+ // IO could be done from semihosting, socket, C array in memory etc ...
+ class IO
+ {
+ public:
+
+ /** Read the identification of a node from driver data.
+
+ Update the node kind and node id and local folder.
+ To be used for group and suite. Generally update
+ the path to the folder by using this new local folder
+ which is appended to the path.
+ */
+ virtual void ReadIdentification()=0;
+
+ /** Read the identification of a node driver data.
+
+ Update the node kind and node id and local folder.
+ */
+ virtual void ReadTestIdentification()=0;
+
+ /** Read the number of parameters for all the tests in a suite
+
+ Used for benchmarking. Same functions executed with
+ different initializations controlled by the parameters.
+
+ */
+ virtual Testing::nbParameters_t ReadNbParameters()=0;
+
+ /** Dump the test status
+
+ For format of output, refer to Python script.
+ The format must be coherent with the Python script
+ parsing the output.
+ */
+ virtual void DispStatus(Testing::TestStatus,Testing::errorID_t,unsigned long,Testing::cycles_t cycles)=0;
+
+
+ /** Dump parameters for a test
+
+ When a test is run several time with different
+ parameters for benchmarking,
+ the parameters are displayed after test status.
+ Line should begin with b
+ */
+ virtual void DumpParams(std::vector<Testing::param_t>&)=0;
+
+
+ /** Dump an end of group/suite to output
+
+ Used by Python script parsing the output.
+
+ */
+ virtual void EndGroup()=0;
+
+ /** Get the zize of a pattern in this suite.
+
+ Pattern is identified with an ID.
+ Using the local path and ID, the IO implementatiom should
+ be able to access the pattern.
+
+ The path do not have to be a file path. Just a way
+ to identify patterns in a suite and know
+ how to access them.
+
+ */
+ virtual Testing::nbSamples_t GetPatternSize(Testing::PatternID_t)=0;
+
+ /** Get the size of a parameter pattern in this suite.
+
+ Parameter is identified with an ID.
+ Using the local path and ID, the IO implementatiom should
+ be able to access the data.
+
+ The path do not have to be a file path. Just a way
+ to identify data in a suite and know
+ how to access them.
+
+ */
+ //virtual Testing::nbSamples_t GetParameterSize(Testing::PatternID_t id)=0;
+
+ /** Check if some parameters are controlling this test
+ */
+ virtual bool hasParam()=0;
+
+ /** Get ID of parameter generator
+ */
+ virtual Testing::PatternID_t getParamID()=0;
+
+ /** Import pattern.
+
+ The nb field can be used to limit the number of samples read
+ to a smaller value than the number of samples available in the
+ pattern.
+
+ */
+ virtual void ImportPattern_f64(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_f32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_q31(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_q15(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_q7(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_u32(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_u16(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+ virtual void ImportPattern_u8(Testing::PatternID_t,char*,Testing::nbSamples_t nb=MAX_NB_SAMPLES)=0;
+
+ /** Import params.
+
+ This is allocating memory.
+ The runner should free it after use.
+
+ It is not using the Memory manager since tests don't have access
+ to the array of parameters.
+
+ They receive parameters as a vector argument for the setUp fucntion.
+ */
+ virtual Testing::param_t* ImportParams(Testing::PatternID_t,Testing::nbParameterEntries_t &)=0;
+
+ /** Dump pattern.
+
+ The output ID (and test ID) must be used to uniquely identify
+ the dump.
+
+
+ */
+ virtual void DumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t nb, float64_t*)=0;
+ virtual void DumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t nb, float32_t*)=0;
+ virtual void DumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t nb, q31_t*)=0;
+ virtual void DumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t nb, q15_t*)=0;
+ virtual void DumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t nb, q7_t*)=0;
+ virtual void DumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t nb, uint32_t*)=0;
+ virtual void DumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t nb, uint16_t*)=0;
+ virtual void DumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t nb, uint8_t*)=0;
+
+ /** Import list of patterns from the driver
+ for current suite.
+
+ This list is used to identify a pattern from its pattern ID.
+ The information of this list (local to the suite) is
+ combined with the path to identify patterns in other part of the class.
+
+ */
+ virtual void ReadPatternList()=0;
+
+ /** Import list of output from the driver
+ for current suite.
+
+ This list is used to identify an output from its pattern ID (and current test ID)
+ The information of this list (local to the suite) is
+ combined with the path and current test ID
+ to identify output in other part of the class.
+
+ */
+ virtual void ReadOutputList()=0;
+
+ /** Import list of parameters from the driver
+ for current suite.
+
+ This list is used to control a functions with different parameters
+ for benchmarking purpose.
+
+ A parameter can be a file of parameters or a generator
+ of parameters (cartesian product of lists only).
+
+ */
+ virtual void ReadParameterList()=0;
+
+ /** Get current node ID
+ group, suite or test. A group of test is considered as a test hence
+ the name of the function.
+
+ */
+ virtual Testing::testID_t CurrentTestID()=0;
+ };
+
+
+// A pattern manager is making the link between
+// IO and the Memory manager.
+// It knows how to import patterns into memory or dump
+// memory into outputs (output which may be different from a file)
+// The running mode is controlling if dumping is disabled or not.
+// But cna also be used by the runner to know if test results must be ignored or not.
+// Pattern manager is used by the tests
+// In current version load and dump functions are visible to any body.
+// In theory they should only be visible to Patterns
+class PatternMgr
+{
+public:
+ PatternMgr(IO*,Memory*);
+
+ /** In those loading APIs, nb samples is coming from the pattern read.
+ maxSamples is coming from the test.
+
+ A test does not know what is the length of a pattern since the test
+ has no visiblity on how the pattern is imported (file, serial port, include files
+ etc ...).
+
+ So the test is specifying the max sampls it needs.
+ The pattern is specifying its lengths.
+
+ Those functions are importing at most what is needed and what is available.
+
+ */
+ float64_t *load_f64(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+ float32_t *load_f32(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+ q31_t *load_q31(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+ q15_t *load_q15(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+ q7_t *load_q7(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+
+ uint32_t *load_u32(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+ uint16_t *load_u16(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+ uint8_t *load_u8(Testing::PatternID_t,Testing::nbSamples_t&,Testing::nbSamples_t maxSamples=MAX_NB_SAMPLES);
+
+ /** Create a local pattern.
+
+ Generally it is used as output of a test and has no
+ correspondance to a pattern in the suite.
+
+ */
+ float64_t *local_f64(Testing::nbSamples_t);
+ float32_t *local_f32(Testing::nbSamples_t);
+ q31_t *local_q31(Testing::nbSamples_t);
+ q15_t *local_q15(Testing::nbSamples_t);
+ q7_t *local_q7(Testing::nbSamples_t);
+
+ uint32_t *local_u32(Testing::nbSamples_t);
+ uint16_t *local_u16(Testing::nbSamples_t);
+ uint8_t *local_u8(Testing::nbSamples_t);
+
+ /** Dump a pattern
+
+ */
+ void dumpPattern_f64(Testing::outputID_t,Testing::nbSamples_t,float64_t*);
+ void dumpPattern_f32(Testing::outputID_t,Testing::nbSamples_t,float32_t*);
+
+ void dumpPattern_q31(Testing::outputID_t,Testing::nbSamples_t,q31_t*);
+ void dumpPattern_q15(Testing::outputID_t,Testing::nbSamples_t,q15_t*);
+ void dumpPattern_q7(Testing::outputID_t,Testing::nbSamples_t,q7_t*);
+
+ void dumpPattern_u32(Testing::outputID_t,Testing::nbSamples_t,uint32_t*);
+ void dumpPattern_u16(Testing::outputID_t,Testing::nbSamples_t,uint16_t*);
+ void dumpPattern_u8(Testing::outputID_t,Testing::nbSamples_t,uint8_t*);
+
+ /** Free all allocated patterns.
+
+ Just wrapper around the memory manager free function.
+
+ */
+ void freeAll();
+
+ /** MEMory manager generation
+
+ */
+ unsigned long generation()
+ {
+ return(m_mem->generation());
+ }
+
+ // Set by the runner when in dump mode
+ void setDumpMode()
+ {
+ this->m_runningMode = Testing::kDumpOnly;
+ }
+
+ void setTestAndDumpMode()
+ {
+ this->m_runningMode = Testing::kTestAndDump;
+ }
+
+ Testing::RunningMode runningMode()
+ {
+ return(this->m_runningMode);
+ }
+
+private:
+ IO *m_io;
+ Memory *m_mem;
+ Testing::RunningMode m_runningMode=Testing::kTestOnly;
+
+};
+
+ // TestContainer which is a node of the tree of tests
+ class TestContainer
+ {
+ public:
+ TestContainer(Testing::testID_t);
+ // Used for implementing the visitor pattern.
+ // The visitor pattern is allowing to implement
+ // different Runner for a tree of tests.
+ virtual Testing::TestStatus accept(Runner* v) = 0;
+ protected:
+ // Node ID (test ID)
+ Testing::testID_t m_containerID;
+ };
+
+ // A suite object
+ // It contains a list of tests
+ // Methods to get a test from the test ID
+ // Initialization and cleanup (setUp and tearDown) to be called
+ // between each test.
+ // Those functions are used by the Runner to execute the tests
+ class Suite:public TestContainer
+ {
+ public:
+ Suite(Testing::testID_t);
+
+ // Prepare memory for a test
+ // (Load input and reference patterns)
+ virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>&,PatternMgr *mgr)=0;
+
+ // Clean memory after a test
+ // Free all memory
+ // DUmp outputs
+ virtual void tearDown(Testing::testID_t,PatternMgr *mgr)=0;
+
+ // Add a test to be run.
+ void addTest(Testing::testID_t,test aTest);
+
+ // Get a test from its index. Used by runner when iterating
+ // on all the tests. Index is not the test ID.
+ // It is the index in internal list of tests
+ test getTest(Testing::testIndex_t);
+
+ // Get number of test in this suite.
+ // The suite is only containing the active tests
+ // (deprecated tests are never generated by python scripts)
+ int getNbTests();
+
+ // Used for implementing the visitor pattern.
+ // The visitor pattern is allowing to implement
+ // different Runner for a tree of tests.
+ virtual Testing::TestStatus accept(Runner* v) override
+ {
+ return(v->run(this));
+ }
+
+ private:
+ // List of tests
+ std::vector<test> m_tests;
+ // List of tests IDs (since they are not contiguous
+ // due to deprecation feature in python scripts)
+ std::vector<Testing::testID_t> m_testIds;
+ };
+
+
+
+ // A group
+ // It is possible to add subgroups to a group
+ // and get a subgroup from its ID.
+ class Group:public TestContainer
+ {
+ public:
+ Group(Testing::testID_t);
+
+ // Add a group or suite to this group.
+ void addContainer(TestContainer*);
+
+ // Get a container from its index. (index is not the node ID)
+ TestContainer *getContainer(Testing::testIndex_t);
+
+ // Get number of containers
+ int getNbContainer();
+
+ virtual Testing::TestStatus accept(Runner* v) override
+ {
+ return(v->run(this));
+ }
+
+ public:
+ std::vector<TestContainer*> m_groups;
+
+ };
+
+
+
+}
+
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkInclude/Timing.h b/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
new file mode 100644
index 0000000..1169921
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkInclude/Timing.h
@@ -0,0 +1,12 @@
+#ifndef _TIMING_H_
+#define _TIMING_H_
+
+#include "Test.h"
+#include "arm_math.h"
+void initCycleMeasurement();
+void cycleMeasurementStart();
+void cycleMeasurementStop();
+
+Testing::cycles_t getCycles();
+
+#endif
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp b/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp
new file mode 100644
index 0000000..285b418
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/ArrayMemory.cpp
@@ -0,0 +1,117 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: ArrayMemory.cpp
+ * Description: Array Memory Manager
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ArrayMemory.h"
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+namespace Client {
+ ArrayMemory::ArrayMemory(char* ptr, size_t bufferLength,int aligned, bool tail)
+ {
+ this->m_ptr=ptr;
+ this->m_currentPtr=ptr;
+ this->alignSize = aligned;
+ this->tail=tail;
+ this->m_bufferLength = bufferLength;
+ this->m_generation=0;
+ memset((void*)ptr, 0, bufferLength);
+ }
+
+ // By default there is alignment and tail
+ ArrayMemory::ArrayMemory(char* ptr, size_t bufferLength)
+ {
+ this->m_ptr=ptr;
+ this->m_currentPtr=ptr;
+ // Align on 64 bits per default
+ this->alignSize = 8;
+ this->tail=true;
+ this->m_bufferLength = bufferLength;
+ this->m_generation=0;
+ memset((void*)ptr, 0, bufferLength);
+ }
+
+ char *ArrayMemory::NewBuffer(size_t length)
+ {
+ if (length == 0)
+ {
+ return(NULL);
+ }
+
+ size_t tailSize = 0;
+ // Add a tail of 16 bytes corresponding to the max number of lanes.
+ if (this->tail)
+ {
+ tailSize = 16;
+ }
+
+ // Compute some offset to align the new buffer to be allocated
+ if (this->alignSize > 0)
+ {
+ unsigned long offset;
+ unsigned long pad;
+
+ offset=(unsigned long)(this->m_currentPtr - this->m_ptr);
+ pad = this->alignSize*ceil(1.0*offset / (1.0*this->alignSize)) - offset;
+ //printf("new = %ld, old = %ld\n",pad,offset);
+ this->m_currentPtr += pad;
+ }
+
+ // Return NULL is no more enough memory in array
+ if (this->m_currentPtr + length + tailSize < this->m_ptr + m_bufferLength)
+ {
+ char *result=this->m_currentPtr;
+ this->m_currentPtr += length + tailSize;
+
+ return(result);
+ }
+ else
+ {
+ return(NULL);
+ }
+ }
+
+
+ /** Reset memory
+
+ The full C buffer is set to 0
+ Current pointer is moved to start of buffer
+ Memory generation is incremented (which is
+ indirectly unvalidating all patterns.
+ If the patterns are not reloaded after this, they'll return NULL
+ when trying to access their pointer.
+ )
+
+ */
+ void ArrayMemory::FreeMemory()
+ {
+ memset(this->m_ptr, 0, this->m_bufferLength);
+ this->m_currentPtr=this->m_ptr;
+ this->m_generation++;
+
+ }
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Error.cpp b/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
new file mode 100644
index 0000000..4b79554
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/Error.cpp
@@ -0,0 +1,404 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Error.cpp
+ * Description: Error functions
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Error.h"
+
+namespace Client {
+
+template <>
+void assert_near_equal(unsigned long nb,float32_t pa, float32_t pb, float32_t threshold)
+{
+ if (fabs(pa - pb) > threshold)
+ {
+ throw (Error(EQUAL_ERROR,nb));
+ }
+};
+
+template <>
+void assert_near_equal(unsigned long nb,AnyPattern<float32_t> &pa, AnyPattern<float32_t> &pb, float32_t threshold)
+{
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(DIFFERENT_LENGTH_ERROR,nb));
+ }
+
+ unsigned long i=0;
+
+ float32_t *ptrA = pa.ptr();
+ float32_t *ptrB = pb.ptr();
+
+ for(i=0; i < pa.nbSamples(); i++)
+ {
+ if (fabs(ptrA[i] - ptrB[i]) > threshold)
+ {
+ throw (Error(NEAR_EQUAL_ERROR,nb));
+ }
+ }
+};
+
+void assert_relative_error(unsigned long nb,float32_t &a, float32_t &b, float32_t threshold)
+{
+ float32_t rel,delta,average;
+
+ delta=abs(a-b);
+ average = (abs(a) + abs(b)) / 2.0;
+ if (average !=0)
+ {
+ rel = delta / average;
+ if (rel > threshold)
+ {
+ throw (Error(RELATIVE_ERROR,nb));
+ }
+ }
+};
+
+void assert_relative_error(unsigned long nb,AnyPattern<float32_t> &pa, AnyPattern<float32_t> &pb, float32_t threshold)
+{
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(DIFFERENT_LENGTH_ERROR,nb));
+ }
+
+ unsigned long i=0;
+
+ float32_t *ptrA = pa.ptr();
+ float32_t *ptrB = pb.ptr();
+
+ for(i=0; i < pa.nbSamples(); i++)
+ {
+ assert_relative_error(nb,ptrA[i],ptrB[i],threshold);
+ }
+};
+
+/*
+
+SNR functions below are just computing the error noise.
+Signal power needs to be computed.
+
+*/
+
+/**
+ * @brief Caluclation of SNR
+ * @param float* Pointer to the reference buffer
+ * @param float* Pointer to the test buffer
+ * @param uint32_t total number of samples
+ * @return float SNR
+ * The function Caluclates signal to noise ratio for the reference output
+ * and test output
+ */
+
+float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)
+{
+ float EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ float SNR;
+ int temp;
+ int *test;
+
+ for (i = 0; i < buffSize; i++)
+ {
+ /* Checking for a NAN value in pRef array */
+ test = (int *)(&pRef[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+ /* Checking for a NAN value in pTest array */
+ test = (int *)(&pTest[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+ /* Checking for a NAN value in EnergyError */
+ test = (int *)(&EnergyError);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+
+ SNR = 10 * log10f (EnergySignal / EnergyError);
+
+ /* Checking for a NAN value in SNR */
+ test = (int *)(&SNR);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+ return (SNR);
+
+}
+
+float arm_snr_q31(q31_t *pRef, q31_t *pTest, uint32_t buffSize)
+{
+ float EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ float SNR;
+ int temp;
+ float32_t test,ref;
+
+ for (i = 0; i < buffSize; i++)
+ {
+
+ test = (float32_t)pTest[i] / 2147483648.0f;
+ ref = (float32_t)pRef[i] / 2147483648.0f;
+
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+
+ SNR = 10 * log10f (EnergySignal / EnergyError);
+
+ return (SNR);
+
+}
+
+float arm_snr_q15(q15_t *pRef, q15_t *pTest, uint32_t buffSize)
+{
+ float EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ float SNR;
+ int temp;
+ float32_t test,ref;
+
+ for (i = 0; i < buffSize; i++)
+ {
+
+ test = (float32_t)pTest[i] / 32768.0f;
+ ref = (float32_t)pRef[i] / 32768.0f;
+
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+
+ SNR = 10 * log10f (EnergySignal / EnergyError);
+
+ return (SNR);
+
+}
+
+float arm_snr_q7(q7_t *pRef, q7_t *pTest, uint32_t buffSize)
+{
+ float EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ float SNR;
+ int temp;
+ float32_t test,ref;
+
+ for (i = 0; i < buffSize; i++)
+ {
+
+ test = (float32_t)pTest[i] / 128.0f;
+ ref = (float32_t)pRef[i] / 128.0f;
+
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+
+ SNR = 10 * log10f (EnergySignal / EnergyError);
+
+ return (SNR);
+
+}
+
+double arm_snr_f64(double *pRef, double *pTest, uint32_t buffSize)
+{
+ double EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ double SNR;
+ int temp;
+ int *test;
+
+ for (i = 0; i < buffSize; i++)
+ {
+ /* Checking for a NAN value in pRef array */
+ test = (int *)(&pRef[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+ /* Checking for a NAN value in pTest array */
+ test = (int *)(&pTest[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+ /* Checking for a NAN value in EnergyError */
+ test = (int *)(&EnergyError);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+
+ SNR = 10 * log10 (EnergySignal / EnergyError);
+
+ /* Checking for a NAN value in SNR */
+ test = (int *)(&SNR);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(10000.0);
+ }
+
+ return (SNR);
+
+}
+
+void assert_snr_error(unsigned long nb,AnyPattern<float32_t> &pa,AnyPattern<float32_t> &pb, float32_t threshold)
+{
+ float32_t snr;
+
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(DIFFERENT_LENGTH_ERROR,nb));
+ }
+
+ float32_t *ptrA = pa.ptr();
+ float32_t *ptrB = pb.ptr();
+
+ snr = arm_snr_f32(ptrA, ptrB, pa.nbSamples());
+
+
+ if (snr < threshold)
+ {
+ throw (Error(SNR_ERROR,nb));
+ }
+}
+
+void assert_snr_error(unsigned long nb,AnyPattern<q31_t> &pa,AnyPattern<q31_t> &pb, float32_t threshold)
+{
+ float32_t snr;
+
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(DIFFERENT_LENGTH_ERROR,nb));
+ }
+
+ q31_t *ptrA = pa.ptr();
+ q31_t *ptrB = pb.ptr();
+
+ snr = arm_snr_q31(ptrA, ptrB, pa.nbSamples());
+
+
+ if (snr < threshold)
+ {
+ throw (Error(SNR_ERROR,nb));
+ }
+
+}
+
+void assert_snr_error(unsigned long nb,AnyPattern<q15_t> &pa,AnyPattern<q15_t> &pb, float32_t threshold)
+{
+ float32_t snr;
+
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(DIFFERENT_LENGTH_ERROR,nb));
+ }
+
+ q15_t *ptrA = pa.ptr();
+ q15_t *ptrB = pb.ptr();
+
+ snr = arm_snr_q15(ptrA, ptrB, pa.nbSamples());
+
+
+ if (snr < threshold)
+ {
+ throw (Error(SNR_ERROR,nb));
+ }
+
+}
+
+void assert_snr_error(unsigned long nb,AnyPattern<q7_t> &pa,AnyPattern<q7_t> &pb, float32_t threshold)
+{
+ float32_t snr;
+
+ if (pa.nbSamples() != pb.nbSamples())
+ {
+ throw (Error(DIFFERENT_LENGTH_ERROR,nb));
+ }
+
+ q7_t *ptrA = pa.ptr();
+ q7_t *ptrB = pb.ptr();
+
+ snr = arm_snr_q7(ptrA, ptrB, pa.nbSamples());
+
+
+ if (snr < threshold)
+ {
+ throw (Error(SNR_ERROR,nb));
+ }
+
+}
+
+void assert_true(unsigned long nb,bool cond)
+{
+ if (!cond)
+ {
+ throw (Error(BOOL_ERROR,nb));
+ }
+}
+
+void assert_false(unsigned long nb,bool cond)
+{
+ if (cond)
+ {
+ throw (Error(BOOL_ERROR,nb));
+ }
+}
+
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp b/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
new file mode 100644
index 0000000..8ef82a9
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/FPGA.cpp
@@ -0,0 +1,762 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: FPGA.cpp
+ * Description: FPGA
+ *
+ * IO implementation for constrained platforms where
+ * inputs are contained in a header files and output is
+ * only stdout.
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Test.h"
+
+#include <string>
+#include <cstddef>
+#include "FPGA.h"
+#include <stdio.h>
+#include <string.h>
+#include "Generators.h"
+
+namespace Client
+{
+ struct offsetOrGen
+ {
+ int kind;
+ unsigned long offset;
+ Testing::param_t *data;
+ Testing::nbSamples_t nbInputSamples;
+ Testing::nbSamples_t nbOutputSamples;
+ int dimensions;
+ };
+
+ FPGA::FPGA(const char *testDesc,const char *patterns)
+ {
+ this->m_testDesc=testDesc;
+ this->m_patterns=patterns;
+
+ this->currentDesc=testDesc;
+ this->path=new std::vector<std::string>();
+
+ this->patternOffsets=new std::vector<unsigned long>();
+ this->patternSizes=new std::vector<unsigned long>();
+
+ this->parameterOffsets=new std::vector<struct offsetOrGen>();
+ this->parameterSizes=new std::vector<unsigned long>();
+
+ this->outputNames=new std::vector<std::string>();
+
+ }
+
+ void FPGA::DeleteParams()
+ {
+ for (std::vector<struct offsetOrGen>::iterator it = this->parameterOffsets->begin() ; it != this->parameterOffsets->end(); ++it)
+ {
+ if (it->kind==1)
+ {
+ if (it->data)
+ {
+ free(it->data);
+ it->data = NULL;
+ }
+ }
+ }
+ }
+
+ FPGA::~FPGA()
+ {
+ delete(this->path);
+
+ delete(this->patternOffsets);
+ delete(this->patternSizes);
+ this->DeleteParams();
+ delete(this->parameterOffsets);
+ delete(this->parameterSizes);
+
+ delete(this->outputNames);
+ }
+
+ /** Read word 32 from C array
+
+ */
+ void FPGA::read32(unsigned long *r)
+ {
+ unsigned char a,b,c,d;
+ unsigned long v;
+ a = *this->currentDesc++;
+ b = *this->currentDesc++;
+ c = *this->currentDesc++;
+ d = *this->currentDesc++;
+ //printf("%d %d %d %d\n",a,b,c,d);
+
+ v = a | (b << 8) | (c << 16) | (d << 24);
+ *r = v;
+ }
+
+ /** Read null terminated C string C array
+
+ */
+ void FPGA::readStr(char *str)
+ {
+ char *p = str;
+ while(*this->currentDesc != 0)
+ {
+ *p++ = *this->currentDesc++;
+ }
+ *p++ = 0;
+ this->currentDesc++;
+ }
+
+ void FPGA::readChar(char *c)
+ {
+ *c = *this->currentDesc;
+ this->currentDesc++;
+ }
+
+ /** Get output path from output ID
+
+ */
+ std::string FPGA::getOutputPath(Testing::outputID_t id)
+ {
+ char fmt[256];
+
+ std::string tmp;
+ tmp += this->testDir;
+ sprintf(fmt,"/%s_%ld.txt",(*this->outputNames)[id].c_str(),this->currentId);
+ tmp += std::string(fmt);
+ //printf("%s\n",tmp.c_str());
+
+ return(tmp);
+ }
+
+ /** Read the number of parameters for all the tests in a suite
+
+ Used for benchmarking. Same functions executed with
+ different initializations controlled by the parameters.
+
+ */
+ Testing::nbParameters_t FPGA::ReadNbParameters()
+ {
+ unsigned long nb;
+ this->read32(&nb);
+
+ return(nb);
+ }
+
+ void FPGA::ReadTestIdentification()
+ {
+ char tmp[255];
+ unsigned long kind;
+ unsigned long theId;
+ char hasPath;
+ char hasParamID;
+ Testing::PatternID_t paramID;
+ //printf("Read ident\n");
+
+ this->read32(&kind);
+ this->read32(&theId);
+
+ this->readChar(&hasParamID);
+ this->m_hasParam=false;
+ if (hasParamID == 'y')
+ {
+ this->m_hasParam=true;
+ this->read32(¶mID);
+ this->currentParam=paramID;
+ }
+
+ this->readChar(&hasPath);
+ if (hasPath == 'y')
+ {
+ this->readStr(tmp);
+ //printf("-->%s\n",tmp);
+ currentPath.assign(tmp);
+ }
+
+ this->currentKind=kind;
+ this->currentId=theId;
+ switch(kind)
+ {
+ case 1:
+ printf("S: t \n");
+ break;
+ case 2:
+ printf("S: s %ld\n",this->currentId);
+ break;
+ case 3:
+ printf("S: g %ld\n",this->currentId);
+ break;
+ default:
+ printf("S: u\n");
+ }
+
+
+ //printf("End read ident\n\n");
+ }
+
+ void FPGA::recomputeTestDir()
+ {
+ this->testDir = ".";
+ int start = 1;
+ std::vector<std::string>::const_iterator iter;
+ for (iter = this->path->begin(); iter != this->path->end(); ++iter)
+ {
+ if (start)
+ {
+ this->testDir = *iter;
+ start =0;
+ }
+ else
+ {
+ if (!(*iter).empty())
+ {
+ this->testDir += "/" + *iter;
+ }
+ }
+ }
+ }
+
+ void FPGA::ReadIdentification()
+ {
+ this->ReadTestIdentification();
+ this->path->push_back(currentPath);
+ this->recomputeTestDir();
+ }
+
+ /** There is only stdout available for "FPGA".
+ So status output and data output are interleaved.
+
+ Status is starting with "S: "
+
+ */
+ void FPGA::DispStatus(Testing::TestStatus status
+ ,Testing::errorID_t error
+ ,unsigned long lineNb
+ ,Testing::cycles_t cycles)
+ {
+ if (status == Testing::kTestFailed)
+ {
+ printf("S: %ld %ld %ld 0 N\n",this->currentId,error,lineNb);
+ }
+ else
+ {
+ printf("S: %ld 0 0 %u Y\n",this->currentId, cycles);
+ }
+ }
+
+ void FPGA::EndGroup()
+ {
+ printf("S: p\n");
+ this->path->pop_back();
+ }
+
+
+ /** Read pattern list
+
+ Different from semihosting.
+ We read offset and sizes for the patterns
+ rather than file names.
+
+ */
+ void FPGA::ReadPatternList()
+ {
+
+ unsigned long offset,nb;
+ unsigned long nbPatterns;
+ this->read32(&nbPatterns);
+ this->patternOffsets->clear();
+ this->patternSizes->clear();
+ std::string tmpstr;
+
+ for(int i=0;i<nbPatterns;i++)
+ {
+ this->read32(&offset);
+ this->read32(&nb);
+ this->patternOffsets->push_back(offset);
+ this->patternSizes->push_back(nb);
+ }
+
+ }
+
+ /** Read parameters list
+
+ Different from semihosting.
+ We read offset and sizes for the parameters
+ rather than file names.
+
+ */
+ void FPGA::ReadParameterList()
+ {
+
+ unsigned long offset,nb;
+ unsigned long nbParams;
+ char paramKind;
+
+ this->read32(&nbParams);
+
+ this->DeleteParams();
+ this->parameterOffsets->clear();
+ this->parameterSizes->clear();
+ std::string tmpstr;
+
+ for(int i=0;i<nbParams;i++)
+ {
+ this->readChar(¶mKind);
+ struct offsetOrGen gen;
+ if (paramKind == 'p')
+ {
+ gen.kind=0;
+ this->read32(&offset);
+ this->read32(&nb);
+ gen.offset=offset;
+
+ gen.kind=0;
+ gen.nbInputSamples=nb;
+ }
+ else
+ {
+ unsigned long kind,nbInputSamples,nbOutputSamples,dimensions,len,sample;
+ Testing::param_t *p,*current;
+ size_t length;
+
+ // Generator kind
+ this->read32(&kind);
+
+ this->read32(&nbInputSamples);
+ this->read32(&nbOutputSamples);
+ this->read32(&dimensions);
+
+ p=(Testing::param_t*)malloc(sizeof(Testing::param_t)*(nbInputSamples));
+ current=p;
+ for(int i=0;i < nbInputSamples; i ++)
+ {
+
+ this->read32(&sample);
+ *current++ = (Testing::param_t)sample;
+ }
+
+
+ gen.kind=1;
+ gen.data=p;
+ gen.nbInputSamples = nbInputSamples;
+ gen.nbOutputSamples = nbOutputSamples;
+ gen.dimensions = dimensions;
+
+ }
+ this->parameterOffsets->push_back(gen);
+ this->parameterSizes->push_back(nb);
+ }
+
+ }
+
+ void FPGA::ReadOutputList()
+ {
+ char tmp[256];
+ unsigned long nbOutputs;
+ this->read32(&nbOutputs);
+ this->outputNames->clear();
+ std::string tmpstr;
+
+ for(int i=0;i<nbOutputs;i++)
+ {
+ this->readStr(tmp);
+ tmpstr.assign(tmp);
+ this->outputNames->push_back(tmpstr);
+ }
+ }
+
+ unsigned long FPGA::getPatternOffset(Testing::PatternID_t id)
+ {
+ return((*this->patternOffsets)[id]);
+ }
+
+ Testing::nbSamples_t FPGA::GetPatternSize(Testing::PatternID_t id)
+ {
+ return((Testing::nbSamples_t)((*this->patternSizes)[id]));
+ }
+
+ unsigned long FPGA::getParameterOffset(Testing::PatternID_t id)
+ {
+ return((*this->parameterOffsets)[id].offset);
+ }
+
+ struct offsetOrGen FPGA::getParameterDesc(Testing::PatternID_t id)
+ {
+
+ return((*this->parameterOffsets)[id]);
+
+ }
+
+
+ void FPGA::DumpParams(std::vector<Testing::param_t>& params)
+ {
+ bool begin=true;
+ printf("b ");
+ for(std::vector<Testing::param_t>::iterator it = params.begin(); it != params.end(); ++it)
+ {
+ if (!begin)
+ {
+ printf(",");
+ }
+ printf("%d",*it);
+ begin=false;
+ }
+ printf("\n");
+ }
+
+ Testing::param_t* FPGA::ImportParams(Testing::PatternID_t id,Testing::nbParameterEntries_t &nbEntries)
+ {
+ nbEntries=0;
+ unsigned long offset,i;
+
+ Testing::param_t *p;
+ uint32_t val;
+
+ Testing::nbSamples_t len;
+ struct offsetOrGen gen = this->getParameterDesc(id);
+
+ if (gen.kind == 0)
+ {
+ offset=gen.offset;
+ nbEntries = gen.nbInputSamples;
+
+ const char *patternStart = this->m_patterns + offset;
+
+ return((Testing::param_t*)patternStart);
+ }
+ else
+ {
+ Testing::param_t* result;
+ // Output samples is number of parameter line
+ len=gen.nbOutputSamples * gen.dimensions;
+
+ result=(Testing::param_t*)malloc(len*sizeof(Testing::param_t));
+
+ switch(gen.dimensions)
+ {
+ case 1:
+ generate1(result,gen.data,nbEntries);
+ break;
+ case 2:
+ generate2(result,gen.data,nbEntries);
+ break;
+ case 3:
+ generate3(result,gen.data,nbEntries);
+ break;
+ case 4:
+ generate4(result,gen.data,nbEntries);
+ break;
+ default:
+ generate1(result,gen.data,nbEntries);
+ break;
+ }
+
+ return(result);
+ }
+ }
+
+ bool FPGA::hasParam()
+ {
+ return(this->m_hasParam);
+ }
+
+ Testing::PatternID_t FPGA::getParamID()
+ {
+ return(this->currentParam);
+ }
+
+
+
+ void FPGA::ImportPattern_f64(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const float64_t *src = (const float64_t*)patternStart;
+ float64_t *dst = (float64_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ void FPGA::ImportPattern_f32(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const float32_t *src = (const float32_t*)patternStart;
+ float32_t *dst = (float32_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+
+
+ }
+
+ void FPGA::ImportPattern_q31(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const q31_t *src = (const q31_t*)patternStart;
+ q31_t *dst = (q31_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ void FPGA::ImportPattern_q15(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const q15_t *src = (const q15_t*)patternStart;
+ q15_t *dst = (q15_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ void FPGA::ImportPattern_q7(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const q7_t *src = (const q7_t*)patternStart;
+ q7_t *dst = (q7_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ void FPGA::ImportPattern_u32(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const uint32_t *src = (const uint32_t*)patternStart;
+ uint32_t *dst = (uint32_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ void FPGA::ImportPattern_u16(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const uint16_t *src = (const uint16_t*)patternStart;
+ uint16_t *dst = (uint16_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ void FPGA::ImportPattern_u8(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ unsigned long offset,i;
+
+ offset=this->getPatternOffset(id);
+
+ const char *patternStart = this->m_patterns + offset;
+ const uint8_t *src = (const uint8_t*)patternStart;
+ uint8_t *dst = (uint8_t*)p;
+
+ for(i=0; i < nb; i++)
+ {
+ *dst++ = *src++;
+ }
+ }
+
+ /** Dump patterns.
+
+ There is only stdout available for "FPGA".
+ So status output and data output are interleaved.
+
+ Data is starting with "D: "
+
+ */
+ void FPGA::DumpPattern_f64(Testing::outputID_t id,Testing::nbSamples_t nb, float64_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint64_t t;
+ float64_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = TOINT64(v);
+ printf("D: 0x%016llx\n",t);
+ }
+ printf("D: END\n");
+
+ }
+ void FPGA::DumpPattern_f32(Testing::outputID_t id,Testing::nbSamples_t nb, float32_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ float32_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = TOINT32(v);
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ void FPGA::DumpPattern_q31(Testing::outputID_t id,Testing::nbSamples_t nb, q31_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ q31_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = (uint32_t)v;
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ void FPGA::DumpPattern_q15(Testing::outputID_t id,Testing::nbSamples_t nb, q15_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ q15_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = (uint32_t)v;
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ void FPGA::DumpPattern_q7(Testing::outputID_t id,Testing::nbSamples_t nb, q7_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ q7_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = (uint32_t)v;
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ void FPGA::DumpPattern_u32(Testing::outputID_t id,Testing::nbSamples_t nb, uint32_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ uint32_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = (uint32_t)v;
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ void FPGA::DumpPattern_u16(Testing::outputID_t id,Testing::nbSamples_t nb, uint16_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ uint16_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = (uint32_t)v;
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ void FPGA::DumpPattern_u8(Testing::outputID_t id,Testing::nbSamples_t nb, uint8_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ printf("D: %s\n",fileName.c_str());
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ uint8_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = (uint32_t)v;
+ printf("D: 0x%08x\n",t);
+ }
+ printf("D: END\n");
+ }
+
+ Testing::testID_t FPGA::CurrentTestID()
+ {
+ return(this->currentId);
+ }
+
+}
+
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp b/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp
new file mode 100644
index 0000000..6ede86b
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/Generators.cpp
@@ -0,0 +1,172 @@
+#include "Generators.h"
+
+void generate1(Testing::param_t *result,Testing::param_t *data,Testing::nbParameterEntries_t &nbEntries)
+{
+ Testing::param_t *pa,*paStart,va;
+
+ pa = data;
+ int nba = *pa++;
+ paStart = pa;
+ nbEntries = 0;
+ for(int ia=0; ia < nba ; ia ++)
+ {
+ va = *pa++;
+ *result++ = va;
+ nbEntries++;
+ }
+}
+
+void generate2(Testing::param_t *result,Testing::param_t *data,Testing::nbParameterEntries_t &nbEntries)
+{
+ Testing::param_t *pa,*paStart,va;
+ int na;
+
+ Testing::param_t *pb,*pbStart,vb;
+ int nb;
+
+ nbEntries = 0;
+
+ na = data[0];
+ paStart = &data[1];
+ pa = paStart;
+
+ nb = data[na+1];
+ pbStart = &data[na+2];
+ pb = pbStart;
+
+ pa = paStart;
+ for(int ia=0; ia < na; ia ++)
+ {
+ va = *pa++;
+
+ pb = pbStart;
+ for(int ib = 0; ib < nb; ib++)
+ {
+ vb = *pb++;
+
+ *result++ = va;
+ *result++ = vb;
+
+ }
+ }
+
+}
+
+void generate3(Testing::param_t *result,Testing::param_t *data,Testing::nbParameterEntries_t &nbEntries)
+{
+ Testing::param_t *pa,*paStart,va;
+ int na;
+
+ Testing::param_t *pb,*pbStart,vb;
+ int nb;
+
+ Testing::param_t *pc,*pcStart,vc;
+ int nc;
+
+ nbEntries=0;
+
+ na = data[0];
+ paStart = &data[1];
+ pa = paStart;
+
+ nb = data[na+1];
+ pbStart = &data[na+2];
+ pb = pbStart;
+
+ nc = data[na+1 + nb + 1];
+ pcStart = &data[na+1 + nb + 1 + 1];
+ pc = pcStart;
+
+
+ pa = paStart;
+ for(int ia=0; ia < na; ia ++)
+ {
+ va = *pa++;
+ //printf("%d \n",va);
+
+ pb = pbStart;
+ for(int ib = 0; ib < nb; ib++)
+ {
+ vb = *pb++;
+ //printf("%d %d \n",va,vb);
+
+ pc = pcStart;
+ for(int ic = 0; ic < nc; ic++)
+ {
+ vc = *pc++;
+
+ *result++ = va;
+ *result++ = vb;
+ *result++ = vc;
+ nbEntries++;
+ //printf("%d %d %d\n",va,vb,vc);
+ }
+
+ }
+ }
+ // printf("OK\n");
+}
+
+void generate4(Testing::param_t *result,Testing::param_t *data,Testing::nbParameterEntries_t &nbEntries)
+{
+ Testing::param_t *pa,*paStart,va;
+ int na;
+
+ Testing::param_t *pb,*pbStart,vb;
+ int nb;
+
+ Testing::param_t *pc,*pcStart,vc;
+ int nc;
+
+ Testing::param_t *pd,*pdStart,vd;
+ int nd;
+
+ nbEntries=0;
+
+ na = data[0];
+ paStart = &data[1];
+ pa = paStart;
+
+ nb = data[na+1];
+ pbStart = &data[na+2];
+ pb = pbStart;
+
+ nc = data[na+1 + nb + 1];
+ pcStart = &data[na+1 + nb + 1 + 1];
+ pc = pcStart;
+
+ nd = data[na+1 + nb + 1 + nc + 1 ];
+ pdStart = &data[na+1 + nb + 1 + nc + 1 + 1];
+ pd = pdStart;
+
+ pa = paStart;
+ for(int ia=0; ia < na; ia ++)
+ {
+ va = *pa++;
+
+ pb = pbStart;
+ for(int ib = 0; ib < nb; ib++)
+ {
+ vb = *pb++;
+
+ pc = pcStart;
+ for(int ic = 0; ic < nc; ic++)
+ {
+ vc = *pc++;
+
+ pd = pdStart;
+ for(int id = 0; id < nd; id++)
+ {
+ vd = *pd++;
+ *result++ = va;
+ *result++ = vb;
+ *result++ = vc;
+ *result++ = vd;
+ nbEntries++;
+ }
+ }
+
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp b/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
new file mode 100644
index 0000000..0c99a5b
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/IORunner.cpp
@@ -0,0 +1,245 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: IORunner.cpp
+ * Description: IORunner
+ *
+ * Runner implementation for runner running on device
+ * under test
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Test.h"
+
+#include <string>
+#include <cstddef>
+#include "IORunner.h"
+#include "Error.h"
+#include "Timing.h"
+#include "arm_math.h"
+
+namespace Client
+{
+
+ IORunner::IORunner(IO *io,PatternMgr *mgr, Testing::RunningMode runningMode):m_io(io), m_mgr(mgr)
+ {
+ this->m_runningMode = runningMode;
+ // Set running mode on PatternMgr.
+ if (runningMode == Testing::kDumpOnly)
+ {
+ mgr->setDumpMode();
+ }
+ if (runningMode == Testing::kTestAndDump)
+ {
+ mgr->setTestAndDumpMode();
+ }
+
+ initCycleMeasurement();
+ }
+
+ // Testing.
+ // When false we are in dump mode and the failed assertion are ignored
+ // (But exception is taken so assert should be at end of the test and not in the
+ // middle )
+ IORunner::IORunner(IO *io,PatternMgr *mgr):m_io(io), m_mgr(mgr)
+ {
+ this->m_runningMode = Testing::kTestOnly;
+ }
+
+ IORunner::~IORunner()
+ {
+
+ }
+
+
+ /** Read driver data to control execution of a suite
+ */
+ Testing::TestStatus IORunner::run(Suite *s)
+ {
+ Testing::TestStatus finalResult = Testing::kTestPassed;
+ int nbTests = s->getNbTests();
+ int failedTests=0;
+ Testing::errorID_t error=0;
+ unsigned long line = 0;
+ Testing::cycles_t cycles=0;
+ Testing::nbParameters_t nbParams;
+
+ // Read node identification (suite)
+ m_io->ReadIdentification();
+ // Read suite nb of parameters
+ nbParams = m_io->ReadNbParameters();
+
+ // Read list of patterns
+ m_io->ReadPatternList();
+ // Read list of output
+ m_io->ReadOutputList();
+ // Read list of parameters
+ m_io->ReadParameterList();
+
+ // Iterate on tests
+ for(int i=1; i <= nbTests; i++)
+ {
+ test t = s->getTest(i);
+ Testing::TestStatus result = Testing::kTestPassed;
+ error = UNKNOWN_ERROR;
+ line = 0;
+ cycles = 0;
+ Testing::param_t *paramData=NULL;
+ Testing::nbParameterEntries_t entries=0;
+ std::vector<Testing::param_t> params(nbParams);
+ bool canExecute=true;
+ int dataIndex=0;
+
+ // Read test identification (test ID)
+ m_io->ReadTestIdentification();
+
+
+ if (m_io->hasParam())
+ {
+ Testing::PatternID_t paramID=m_io->getParamID();
+ paramData = m_io->ImportParams(paramID,entries);
+ dataIndex = 0;
+ }
+
+
+ while(canExecute)
+ {
+ canExecute = false;
+
+ if (m_io->hasParam() && paramData)
+ {
+ // Load new params
+ for(int j=0; j < nbParams ; j++)
+ {
+ params[j] = paramData[nbParams*dataIndex+j];
+ }
+ // Update condition for new execution
+ dataIndex += 1;
+ canExecute = dataIndex < entries;
+ }
+ // Execute test
+ try {
+ // Prepare memory for test
+ // setUp will generally load patterns
+ // and do specific initialization for the tests
+ s->setUp(m_io->CurrentTestID(),params,m_mgr);
+ // Run the test
+ cycleMeasurementStart();
+ (s->*t)();
+ cycles=getCycles();
+ cycleMeasurementStop();
+ }
+ catch(Error &ex)
+ {
+ // In dump only mode we ignore the tests
+ // since the reference patterns are not loaded
+ // so tests will fail.
+ if (this->m_runningMode != Testing::kDumpOnly)
+ {
+ error = ex.errorID;
+ line = ex.lineNumber;
+ result=Testing::kTestFailed;
+ }
+ }
+ catch (...) {
+ // In dump only mode we ignore the tests
+ // since the reference patterns are not loaded
+ // so tests will fail.
+ if (this->m_runningMode != Testing::kDumpOnly)
+ {
+ result = Testing::kTestFailed;
+ error = UNKNOWN_ERROR;
+ line = 0;
+ }
+ }
+ try {
+ // Clean memory after this test
+ // May dump output and do specific cleaning for a test
+ s->tearDown(m_io->CurrentTestID(),m_mgr);
+ }
+ catch(...)
+ {
+
+ }
+
+ // Free all memory of memory manager so that next test
+ // is starting in a clean and controlled tests
+ m_mgr->freeAll();
+
+ // Dump test status to output
+ m_io->DispStatus(result,error,line,cycles);
+ m_io->DumpParams(params);
+ }
+ if (paramData)
+ {
+ free(paramData);
+ paramData = NULL;
+ }
+
+ if (result == Testing::kTestFailed)
+ {
+ failedTests ++;
+ finalResult = Testing::kTestFailed;
+ }
+ }
+ // Signal end of group processing to output
+ m_io->EndGroup();
+ return(finalResult);
+ }
+
+ /** Read driver data to control execution of a group
+ */
+ Testing::TestStatus IORunner::run(Group *g)
+ {
+ int nbTests = g->getNbContainer();
+ int failedTests=0;
+
+
+ // Read Node identification
+ m_io->ReadIdentification();
+
+
+ Testing::TestStatus finalResult = Testing::kTestPassed;
+ // Iterate on group elements
+ for(int i=1; i <= nbTests; i++)
+ {
+ TestContainer *c = g->getContainer(i);
+ if (c != NULL)
+ {
+ // Execute runner for this group
+ Testing::TestStatus result = c->accept(this);
+
+ if (result == Testing::kTestFailed)
+ {
+ failedTests ++;
+ finalResult = Testing::kTestFailed;
+ }
+ }
+
+ }
+ // Signal to output that processing of this group has finished.
+ m_io->EndGroup();
+ return(finalResult);
+ }
+
+
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp b/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
new file mode 100644
index 0000000..997b864
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/Pattern.cpp
@@ -0,0 +1,174 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Pattern.cpp
+ * Description: Patterns
+ *
+ * Abstraction to manipulate test patterns
+ * and hiding where they come from
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Test.h"
+#include "Pattern.h"
+
+namespace Client {
+
+template <>
+float64_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_f64(id,nb,maxSamples));
+}
+
+template <>
+float32_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_f32(id,nb,maxSamples));
+}
+
+template <>
+q31_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_q31(id,nb,maxSamples));
+}
+
+template <>
+q15_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_q15(id,nb,maxSamples));
+}
+
+template <>
+q7_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_q7(id,nb,maxSamples));
+}
+
+template <>
+uint32_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_u32(id,nb,maxSamples));
+}
+
+template <>
+uint16_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_u16(id,nb,maxSamples));
+}
+
+template <>
+uint8_t *loadPattern(Testing::PatternID_t id, Client::PatternMgr *mgr,Testing::nbSamples_t &nb, Testing::nbSamples_t maxSamples)
+{
+ return(mgr->load_u8(id,nb,maxSamples));
+}
+
+
+template <>
+float64_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_f64(id));
+}
+
+template <>
+float32_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_f32(id));
+}
+
+template <>
+q31_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_q31(id));
+}
+
+template <>
+q15_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_q15(id));
+}
+
+template <>
+q7_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_q7(id));
+}
+
+template <>
+uint32_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_u32(id));
+}
+
+template <>
+uint16_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_u16(id));
+}
+
+template <>
+uint8_t *localPattern(Testing::PatternID_t id, Client::PatternMgr *mgr)
+{
+ return(mgr->local_u8(id));
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float64_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_f64(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float32_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_f32(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q31_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_q31(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q15_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_q15(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q7_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_q7(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,uint32_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_u32(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,uint16_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_u16(id,nbSamples,data);
+}
+
+void dumpPattern(Testing::outputID_t id,Testing::nbSamples_t nbSamples,uint8_t* data,PatternMgr *mgr)
+{
+ mgr->dumpPattern_u8(id,nbSamples,data);
+}
+
+
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp b/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
new file mode 100644
index 0000000..84b67fb
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/PatternMgr.cpp
@@ -0,0 +1,217 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: PatternMgr.cpp
+ * Description: Pattern Manager
+ *
+ * The link between a pattern and a memory manager.
+ * Allow creation and initialization of patterns
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Test.h"
+
+namespace Client
+{
+PatternMgr::PatternMgr(IO* io, Memory *mem)
+{
+ m_io = io;
+ m_mem = mem;
+}
+
+#define LOCAL(TYPE,EXT) \
+TYPE *PatternMgr::local_##EXT(Testing::nbSamples_t nbSamples) \
+{ \
+ return((TYPE*)(m_mem->NewBuffer(sizeof(TYPE)*nbSamples))); \
+}
+
+LOCAL(float64_t,f64)
+LOCAL(float32_t,f32)
+LOCAL(q31_t,q31)
+LOCAL(q15_t,q15)
+LOCAL(q7_t,q7)
+LOCAL(uint32_t,u32)
+LOCAL(uint16_t,u16)
+LOCAL(uint8_t,u8)
+
+float64_t *PatternMgr::load_f64(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(float64_t)*nbSamples);
+ m_io->ImportPattern_f64(id,b,nbSamples);
+ return((float64_t*)b);
+
+}
+
+float32_t *PatternMgr::load_f32(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(float32_t)*nbSamples);
+ m_io->ImportPattern_f32(id,b,nbSamples);
+ return((float32_t*)b);
+
+}
+
+q31_t *PatternMgr::load_q31(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(q31_t)*nbSamples);
+ m_io->ImportPattern_q31(id,b,nbSamples);
+ return((q31_t*)b);
+}
+
+q15_t *PatternMgr::load_q15(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(q15_t)*nbSamples);
+ m_io->ImportPattern_q15(id,b,nbSamples);
+ return((q15_t*)b);
+}
+
+q7_t *PatternMgr::load_q7(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(q7_t)*nbSamples);
+ m_io->ImportPattern_q7(id,b,nbSamples);
+ return((q7_t*)b);
+}
+
+uint32_t *PatternMgr::load_u32(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(uint32_t)*nbSamples);
+ m_io->ImportPattern_u32(id,b,nbSamples);
+ return((uint32_t*)b);
+}
+
+uint16_t *PatternMgr::load_u16(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(uint16_t)*nbSamples);
+ m_io->ImportPattern_u16(id,b,nbSamples);
+ return((uint16_t*)b);
+}
+
+uint8_t *PatternMgr::load_u8(Testing::PatternID_t id,Testing::nbSamples_t& nbSamples,Testing::nbSamples_t maxSamples)
+{
+ nbSamples=m_io->GetPatternSize(id);
+
+ if ((maxSamples != MAX_NB_SAMPLES) && (maxSamples < nbSamples))
+ {
+ nbSamples = maxSamples;
+ }
+
+ char *b = m_mem->NewBuffer(sizeof(uint8_t)*nbSamples);
+ m_io->ImportPattern_u8(id,b,nbSamples);
+ return((uint8_t*)b);
+}
+
+void PatternMgr::dumpPattern_f64(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float64_t* data)
+{
+
+ m_io->DumpPattern_f64(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_f32(Testing::outputID_t id,Testing::nbSamples_t nbSamples,float32_t* data)
+{
+ m_io->DumpPattern_f32(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_q31(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q31_t* data)
+{
+ m_io->DumpPattern_q31(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_q15(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q15_t* data)
+{
+ m_io->DumpPattern_q15(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_q7(Testing::outputID_t id,Testing::nbSamples_t nbSamples,q7_t* data)
+{
+ m_io->DumpPattern_q7(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_u32(Testing::outputID_t id,Testing::nbSamples_t nbSamples,uint32_t* data)
+{
+ m_io->DumpPattern_u32(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_u16(Testing::outputID_t id,Testing::nbSamples_t nbSamples,uint16_t* data)
+{
+ m_io->DumpPattern_u16(id,nbSamples,data);
+}
+
+void PatternMgr::dumpPattern_u8(Testing::outputID_t id,Testing::nbSamples_t nbSamples,uint8_t* data)
+{
+ m_io->DumpPattern_u8(id,nbSamples,data);
+}
+
+void PatternMgr::freeAll()
+{
+ m_mem->FreeMemory();
+}
+
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp b/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
new file mode 100644
index 0000000..14e0fb4
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/Semihosting.cpp
@@ -0,0 +1,974 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Semihosting.cpp
+ * Description: Semihosting io
+ *
+ * IO for a platform supporting semihosting.
+ * (Several input and output files)
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Test.h"
+
+#include <string>
+#include <cstddef>
+#include "Semihosting.h"
+#include <stdio.h>
+#include <string.h>
+#include "Generators.h"
+
+namespace Client
+{
+
+ struct pathOrGen {
+ int kind;
+ std::string path;
+ Testing::param_t *data;
+ Testing::nbSamples_t nbInputSamples;
+ Testing::nbSamples_t nbOutputSamples;
+ int dimensions;
+ };
+
+ Semihosting::Semihosting(std::string path,std::string patternRootPath,std::string outputRootPath,std::string parameterRootPath)
+ {
+ // Open the driver file
+ this->infile=fopen(path.c_str(), "r");
+ this->path=new std::vector<std::string>();
+ this->patternRootPath=patternRootPath;
+ this->outputRootPath=outputRootPath;
+ this->parameterRootPath=parameterRootPath;
+ this->patternFilenames=new std::vector<std::string>();
+ this->outputNames=new std::vector<std::string>();
+ this->parameterNames=new std::vector<struct pathOrGen>();
+ this->m_hasParam = false;
+ }
+
+ void Semihosting::DeleteParams()
+ {
+ for (std::vector<struct pathOrGen>::iterator it = this->parameterNames->begin() ; it != this->parameterNames->end(); ++it)
+ {
+ if (it->kind==1)
+ {
+ if (it->data)
+ {
+ free(it->data);
+ it->data = NULL;
+ }
+ }
+ }
+ }
+
+ Semihosting::~Semihosting()
+ {
+ fclose(this->infile);
+ delete(this->path);
+ delete(this->patternFilenames);
+ delete(this->outputNames);
+ this->DeleteParams();
+ delete(this->parameterNames);
+ }
+
+ /**
+ Read the list of patterns from the driver file.
+
+ This list is for the current suite.
+
+ */
+ void Semihosting::ReadPatternList()
+ {
+ char tmp[256];
+ int nbPatterns;
+ fscanf(this->infile,"%d\n",&nbPatterns);
+ // Reset the list for the current suite
+ this->patternFilenames->clear();
+ std::string tmpstr;
+
+ for(int i=0;i<nbPatterns;i++)
+ {
+ fgets(tmp,256,this->infile);
+ // Remove end of line
+ if (tmp[strlen(tmp)-1] == '\n')
+ {
+ tmp[strlen(tmp)-1]=0;
+ }
+ tmpstr.assign(tmp);
+ this->patternFilenames->push_back(tmpstr);
+ }
+ }
+
+ /**
+ Read the list of parameters from the driver file.
+
+ This list is for the current suite.
+
+ */
+ void Semihosting::ReadParameterList()
+ {
+ char tmp[256];
+ char paramKind;
+ std::string tmpstr;
+
+ // It is the number of samples in the file.
+ // Not the number of parameters controlling the function
+ int nbParams;
+ fscanf(this->infile,"%d\n",&nbParams);
+
+ // Reset the list for the current suite
+ this->DeleteParams();
+ this->parameterNames->clear();
+
+ for(int i=0;i<nbParams;i++)
+ {
+ fscanf(this->infile,"%c\n",¶mKind);
+ struct pathOrGen gen;
+
+ if (paramKind == 'p')
+ {
+ fgets(tmp,256,this->infile);
+ // Remove end of line
+ if (tmp[strlen(tmp)-1] == '\n')
+ {
+ tmp[strlen(tmp)-1]=0;
+ }
+ tmpstr.assign(tmp);
+
+ std::string tmp;
+ tmp += this->parameterRootPath;
+ tmp += this->testDir;
+ tmp += "/";
+ tmp += tmpstr;
+
+
+ gen.kind=0;
+ gen.path=tmp;
+
+ gen.nbInputSamples = this->GetFileSize(tmp);
+
+ }
+ // Generator
+ // Generator kind (only 1 = cartesian product generator)
+ // Number of samples generated when run
+ // Number of dimensions
+ // For each dimension
+ // Length
+ // Samples
+ else
+ {
+ int kind,nbInputSamples,nbOutputSamples,dimensions,len,sample;
+ Testing::param_t *p,*current;
+ size_t length;
+ // Generator kind. Not yet used since there is only one kind of generator
+ fscanf(this->infile,"%d\n",&kind);
+ // Input data in config file
+ fscanf(this->infile,"%d\n",&nbInputSamples);
+
+ // Number of output combinations
+ // And each output has dimensions parameters
+ fscanf(this->infile,"%d\n",&nbOutputSamples);
+ fscanf(this->infile,"%d\n",&dimensions);
+
+ p=(Testing::param_t*)malloc(sizeof(Testing::param_t)*(nbInputSamples));
+ current=p;
+ for(int i=0;i < nbInputSamples; i ++)
+ {
+
+ fscanf(this->infile,"%d\n",&sample);
+ *current++ = (Testing::param_t)sample;
+ }
+
+ gen.kind=1;
+ gen.data=p;
+ gen.nbInputSamples = nbInputSamples;
+ gen.nbOutputSamples = nbOutputSamples;
+ gen.dimensions = dimensions;
+ }
+ this->parameterNames->push_back(gen);
+
+ }
+ }
+
+ /**
+ Read the list of output from the driver file.
+
+ This list is for the current suite.
+
+ */
+ void Semihosting::ReadOutputList()
+ {
+ char tmp[256];
+ int nbOutputs;
+ fscanf(this->infile,"%d\n",&nbOutputs);
+ // Reset the list for the current suite
+ this->outputNames->clear();
+ std::string tmpstr;
+
+ for(int i=0;i<nbOutputs;i++)
+ {
+ fgets(tmp,256,this->infile);
+ // Remove end of line
+ if (tmp[strlen(tmp)-1] == '\n')
+ {
+ tmp[strlen(tmp)-1]=0;
+ }
+ tmpstr.assign(tmp);
+ this->outputNames->push_back(tmpstr);
+ }
+ }
+
+
+ /** Read the number of parameters for all the tests in a suite
+
+ Used for benchmarking. Same functions executed with
+ different initializations controlled by the parameters.
+
+ It is not the number of parameters in a file
+ but the number of arguments (parameters) to control a function.
+
+ */
+ Testing::nbParameters_t Semihosting::ReadNbParameters()
+ {
+ unsigned long nb;
+ fscanf(this->infile,"%ld\n",&nb);
+
+ return(nb);
+ }
+
+ void Semihosting::recomputeTestDir()
+ {
+ this->testDir = ".";
+ int start = 1;
+ std::vector<std::string>::const_iterator iter;
+ for (iter = this->path->begin(); iter != this->path->end(); ++iter)
+ {
+ if (start)
+ {
+ this->testDir = *iter;
+ start =0;
+ }
+ else
+ {
+ if (!(*iter).empty())
+ {
+ this->testDir += "/" + *iter;
+ }
+ }
+ }
+ }
+
+
+ void Semihosting::ReadTestIdentification()
+ {
+
+ char tmp[255];
+ int kind;
+ Testing::testID_t theId;
+ char hasPath;
+ char hasParamID;
+ Testing::PatternID_t paramID;
+
+
+ fscanf(this->infile,"%d %ld\n",&kind,&theId);
+
+ fscanf(this->infile,"%c\n",&hasParamID);
+ this->m_hasParam=false;
+ if (hasParamID == 'y')
+ {
+ this->m_hasParam=true;
+ fscanf(this->infile,"%ld\n",¶mID);
+ this->currentParam=paramID;
+ }
+
+ fscanf(this->infile,"%c\n",&hasPath);
+ if (hasPath == 'y')
+ {
+ fgets(tmp,256,this->infile);
+ // Remove end of line
+ if (tmp[strlen(tmp)-1] == '\n')
+ {
+ tmp[strlen(tmp)-1]=0;
+ }
+ currentPath.assign(tmp);
+ }
+
+ this->currentKind=kind;
+ this->currentId=theId;
+ switch(kind)
+ {
+ case 1:
+ printf("t \n");
+ break;
+ case 2:
+ printf("s %ld\n",this->currentId);
+ break;
+ case 3:
+ printf("g %ld\n",this->currentId);
+ break;
+ default:
+ printf("u\n");
+ }
+
+ }
+
+ Testing::testID_t Semihosting::CurrentTestID()
+ {
+ return(this->currentId);
+ }
+
+ /**
+ Read identification of a group or suite.
+
+ The difference with a test node is that the current folder
+ can be changed by a group or suite.
+
+ */
+ void Semihosting::ReadIdentification()
+ {
+ this->ReadTestIdentification();
+ this->path->push_back(currentPath);
+ this->recomputeTestDir();
+ }
+
+ /**
+ Dump the test status into the output (stdout)
+
+ */
+ void Semihosting::DispStatus(Testing::TestStatus status
+ ,Testing::errorID_t error
+ ,unsigned long lineNb
+ ,Testing::cycles_t cycles)
+ {
+ if (status == Testing::kTestFailed)
+ {
+ printf("%ld %ld %ld 0 N\n",this->currentId,error,lineNb);
+ }
+ else
+ {
+ printf("%ld 0 0 %u Y\n",this->currentId,cycles);
+ }
+ }
+
+ /**
+ Signal end of group
+
+ (Used by scripts parsing the output to display the results)
+ */
+ void Semihosting::EndGroup()
+ {
+ printf("p\n");
+ this->path->pop_back();
+ }
+
+ /**
+ Get pattern path.
+
+
+ */
+ std::string Semihosting::getPatternPath(Testing::PatternID_t id)
+ {
+ std::string tmp;
+ tmp += this->patternRootPath;
+ tmp += this->testDir;
+ tmp += "/";
+ tmp += (*this->patternFilenames)[id];
+
+ return(tmp);
+ }
+
+ /**
+ Get parameter path.
+
+
+ */
+ struct pathOrGen Semihosting::getParameterDesc(Testing::PatternID_t id)
+ {
+
+
+
+ return((*this->parameterNames)[id]);
+
+ }
+
+ /**
+ Get output path.
+
+ The test ID (currentId) is used in the name
+ */
+ std::string Semihosting::getOutputPath(Testing::outputID_t id)
+ {
+ char fmt[256];
+
+ std::string tmp;
+ tmp += this->outputRootPath;
+ tmp += this->testDir;
+ sprintf(fmt,"/%s_%ld.txt",(*this->outputNames)[id].c_str(),this->currentId);
+ tmp += std::string(fmt);
+ //printf("%s\n",tmp.c_str());
+
+ return(tmp);
+ }
+
+ Testing::nbSamples_t Semihosting::GetPatternSize(Testing::PatternID_t id)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ std::string fileName = this->getPatternPath(id);
+
+ FILE *pattern=fopen(fileName.c_str(), "r");
+
+ if (pattern==NULL)
+ {
+ return(0);
+ }
+
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+
+ fclose(pattern);
+
+
+ len=atoi(tmp);
+ return(len);
+
+ }
+
+ Testing::nbSamples_t Semihosting::GetFileSize(std::string &filepath)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+
+
+ FILE *params=fopen(filepath.c_str(), "r");
+ if (params==NULL)
+ {
+ return(0);
+ }
+ // Get nb of samples
+ fgets(tmp,256,params);
+ fclose(params);
+
+ len=atoi(tmp);
+ return(len);
+
+ }
+
+ void Semihosting::DumpParams(std::vector<Testing::param_t>& params)
+ {
+ bool begin=true;
+ printf("b ");
+ for(std::vector<Testing::param_t>::iterator it = params.begin(); it != params.end(); ++it)
+ {
+ if (!begin)
+ {
+ printf(",");
+ }
+ printf("%d",*it);
+ begin=false;
+ }
+ printf("\n");
+ }
+
+ Testing::param_t* Semihosting::ImportParams(Testing::PatternID_t id,Testing::nbParameterEntries_t &nbEntries)
+ {
+ nbEntries = 0;
+
+ char tmp[256];
+
+ Testing::param_t *p;
+ uint32_t val;
+
+ Testing::nbSamples_t len;
+ struct pathOrGen gen = this->getParameterDesc(id);
+
+ if (gen.kind == 0)
+ {
+ char *result=NULL;
+ FILE *params=fopen(gen.path.c_str(), "r");
+
+ if (params==NULL)
+ {
+ return(NULL);
+ }
+ // Get nb of samples
+ fgets(tmp,256,params);
+
+
+ len=gen.nbInputSamples;
+ result=(char*)malloc(len*sizeof(Testing::param_t));
+ p = (Testing::param_t*)result;
+ nbEntries = len;
+
+ for(uint32_t i=0; i < len; i++)
+ {
+ fscanf(params,"%d\n",&val);
+ *p++ = val;
+ }
+
+
+ fclose(params);
+ return((Testing::param_t*)result);
+ }
+ else
+ {
+
+ Testing::param_t* result;
+ // Output samples is number of parameter line
+ len=gen.nbOutputSamples * gen.dimensions;
+
+ result=(Testing::param_t*)malloc(len*sizeof(Testing::param_t));
+
+
+ switch(gen.dimensions)
+ {
+ case 1:
+ generate1(result,gen.data,nbEntries);
+ break;
+ case 2:
+ generate2(result,gen.data,nbEntries);
+ break;
+ case 3:
+ generate3(result,gen.data,nbEntries);
+ break;
+ case 4:
+ generate4(result,gen.data,nbEntries);
+ break;
+ default:
+ generate1(result,gen.data,nbEntries);
+ break;
+ }
+
+ return(result);
+ }
+
+ }
+
+ bool Semihosting::hasParam()
+ {
+ return(this->m_hasParam);
+ }
+
+ Testing::PatternID_t Semihosting::getParamID()
+ {
+ return(this->currentParam);
+ }
+
+ void Semihosting::ImportPattern_f64(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint64_t val;
+ float64_t *ptr=(float64_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ // word size format is used when generating include files with python scripts
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%16llx\n",&val);
+ *ptr = TOTYP(float64_t,val);
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_f32(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ float32_t *ptr=(float32_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ //printf(":::: %s\n",fileName.c_str());
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ //printf(":::: %08X %f\n",val, TOTYP(float32_t,val));
+ *ptr = TOTYP(float32_t,val);
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_q31(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ q31_t *ptr=(q31_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ *ptr = TOTYP(q31_t,val);
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_q15(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ q15_t *ptr=(q15_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ *ptr = TOTYP(q15_t,val);
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_q7(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ q7_t *ptr=(q7_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ *ptr = TOTYP(q7_t,val);
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_u32(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ uint32_t *ptr=(uint32_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ *ptr = val;
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_u16(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ uint16_t *ptr=(uint16_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ *ptr = (uint16_t)val;
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::ImportPattern_u8(Testing::PatternID_t id,char* p,Testing::nbSamples_t nb)
+ {
+ char tmp[256];
+ Testing::nbSamples_t len;
+ Testing::nbSamples_t i=0;
+
+ uint32_t val;
+ uint8_t *ptr=(uint8_t*)p;
+
+ std::string fileName = this->getPatternPath(id);
+ FILE *pattern=fopen(fileName.c_str(), "r");
+ // Ignore word size format
+ fgets(tmp,256,pattern);
+ // Get nb of samples
+ fgets(tmp,256,pattern);
+ len=atoi(tmp);
+
+ if ((nb != MAX_NB_SAMPLES) && (nb < len))
+ {
+ len = nb;
+ }
+
+ for(i=0;i<len;i++)
+ {
+ // Ignore comment
+ fgets(tmp,256,pattern);
+ fscanf(pattern,"0x%08X\n",&val);
+ *ptr = (uint8_t)val;
+ ptr++;
+ }
+
+ fclose(pattern);
+
+ }
+
+ void Semihosting::DumpPattern_f64(Testing::outputID_t id,Testing::nbSamples_t nb, float64_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint64_t t;
+ float64_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = TOINT64(v);
+ fprintf(f,"0x%016llx\n",t);
+ }
+ fclose(f);
+
+ }
+ void Semihosting::DumpPattern_f32(Testing::outputID_t id,Testing::nbSamples_t nb, float32_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ float32_t v;
+ for(i=0; i < nb; i++)
+ {
+ v = data[i];
+ t = TOINT32(v);
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+ void Semihosting::DumpPattern_q31(Testing::outputID_t id,Testing::nbSamples_t nb, q31_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ for(i=0; i < nb; i++)
+ {
+ t = (uint32_t)data[i];
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+ void Semihosting::DumpPattern_q15(Testing::outputID_t id,Testing::nbSamples_t nb, q15_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ for(i=0; i < nb; i++)
+ {
+ t = (uint32_t)data[i];
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+ void Semihosting::DumpPattern_q7(Testing::outputID_t id,Testing::nbSamples_t nb, q7_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ for(i=0; i < nb; i++)
+ {
+ t = (uint32_t)data[i];
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+ void Semihosting::DumpPattern_u32(Testing::outputID_t id,Testing::nbSamples_t nb, uint32_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ for(i=0; i < nb; i++)
+ {
+ t = (uint32_t)data[i];
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+ void Semihosting::DumpPattern_u16(Testing::outputID_t id,Testing::nbSamples_t nb, uint16_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ for(i=0; i < nb; i++)
+ {
+ t = (uint32_t)data[i];
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+ void Semihosting::DumpPattern_u8(Testing::outputID_t id,Testing::nbSamples_t nb, uint8_t* data)
+ {
+ std::string fileName = this->getOutputPath(id);
+ FILE *f = fopen(fileName.c_str(),"w");
+ Testing::nbSamples_t i=0;
+ uint32_t t;
+ for(i=0; i < nb; i++)
+ {
+ t = (uint32_t)data[i];
+ fprintf(f,"0x%08x\n",t);
+ }
+ fclose(f);
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Test.cpp b/CMSIS/DSP/Testing/FrameworkSource/Test.cpp
new file mode 100644
index 0000000..4a4f5a2
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/Test.cpp
@@ -0,0 +1,102 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: Test.cpp
+ * Description: Generic test framework code
+ *
+ * $Date: 20. June 2019
+ * $Revision: V1.0.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Test.h"
+#include <cstdio>
+#include <iostream>
+#include <queue>
+
+
+
+int testIndex(Testing::testIndex_t i)
+{
+ return(i-1);
+}
+
+namespace Client
+{
+
+ TestContainer::TestContainer(Testing::testID_t id):m_containerID(id)
+ {
+
+ }
+/* Client */
+
+ Suite::Suite(Testing::testID_t id):
+ m_tests(std::vector<test>()),
+ m_testIds(std::vector<Testing::testID_t>()),
+ TestContainer(id)
+ {
+
+ }
+
+ void Suite::addTest(Testing::testID_t id,test aTest)
+ {
+ m_tests.push_back(aTest);
+ m_testIds.push_back(id);
+ }
+
+ test Suite::getTest(Testing::testIndex_t id)
+ {
+ return(m_tests[testIndex(id)]);
+ }
+
+ int Suite::getNbTests()
+ {
+ return(m_tests.size());
+ }
+
+
+
+
+ Group::Group(Testing::testID_t id):
+ m_groups(std::vector<TestContainer*>()),
+ TestContainer(id)
+ {
+
+ }
+
+ void Group::addContainer(TestContainer *s)
+ {
+ m_groups.push_back(s);
+ }
+
+ TestContainer *Group::getContainer(Testing::testIndex_t id)
+ {
+ return(m_groups[testIndex(id)]);
+ }
+
+ int Group::getNbContainer()
+ {
+ return(m_groups.size());
+ }
+
+
+
+
+}
+
diff --git a/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp b/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp
new file mode 100644
index 0000000..30bb6db
--- /dev/null
+++ b/CMSIS/DSP/Testing/FrameworkSource/Timing.cpp
@@ -0,0 +1,152 @@
+#include "Timing.h"
+
+#ifdef CORTEXM
+
+#define JTEST_SYSTICK_INITIAL_VALUE 0xFFFFFF
+static uint32_t startCycles=0;
+
+#if defined ARMCM0
+ #include "ARMCM0.h"
+#elif defined ARMCM0P
+ #include "ARMCM0plus.h"
+#elif defined ARMCM0P_MPU
+ #include "ARMCM0plus_MPU.h"
+#elif defined ARMCM3
+ #include "ARMCM3.h"
+#elif defined ARMCM4
+ #include "ARMCM4.h"
+#elif defined ARMCM4_FP
+ #include "ARMCM4_FP.h"
+#elif defined ARMCM7
+ #include "ARMCM7.h"
+#elif defined ARMCM7_SP
+ #include "ARMCM7_SP.h"
+#elif defined ARMCM7_DP
+ #include "ARMCM7_DP.h"
+#elif defined (ARMCM33_DSP_FP)
+ #include "ARMCM33_DSP_FP.h"
+#elif defined (ARMCM33_DSP_FP_TZ)
+ #include "ARMCM33_DSP_FP_TZ.h"
+#elif defined ARMSC000
+ #include "ARMSC000.h"
+#elif defined ARMSC300
+ #include "ARMSC300.h"
+#elif defined ARMv8MBL
+ #include "ARMv8MBL.h"
+#elif defined ARMv8MML
+ #include "ARMv8MML.h"
+#elif defined ARMv8MML_DSP
+ #include "ARMv8MML_DSP.h"
+#elif defined ARMv8MML_SP
+ #include "ARMv8MML_SP.h"
+#elif defined ARMv8MML_DSP_SP
+ #include "ARMv8MML_DSP_SP.h"
+#elif defined ARMv8MML_DP
+ #include "ARMv8MML_DP.h"
+#elif defined ARMv8MML_DSP_DP
+ #include "ARMv8MML_DSP_DP.h"
+#elif defined ARMv7A
+ /* TODO */
+#else
+ #warning "no appropriate header file found!"
+#endif
+#endif
+
+#ifdef CORTEXA
+#include "cmsis_cp15.h"
+unsigned int startCycles;
+
+#define DO_RESET 1
+#define ENABLE_DIVIDER 0
+#endif
+
+void initCycleMeasurement()
+{
+#ifdef CORTEXM
+ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk;
+ SysTick->LOAD = JTEST_SYSTICK_INITIAL_VALUE;
+ SysTick->VAL = JTEST_SYSTICK_INITIAL_VALUE;
+#endif
+
+#ifdef CORTEXA
+
+ // in general enable all counters (including cycle counter)
+ int32_t value = 1;
+
+ // peform reset:
+ if (DO_RESET)
+ {
+ value |= 2; // reset all counters to zero.
+ value |= 4; // reset cycle counter to zero.
+ }
+
+ if (ENABLE_DIVIDER)
+ value |= 8; // enable "by 64" divider for CCNT.
+
+ value |= 16;
+
+ // program the performance-counter control-register:
+ __set_CP(15, 0, value, 9, 12, 0);
+
+ // enable all counters:
+ __set_CP(15, 0, 0x8000000f, 9, 12, 1);
+
+ // clear overflows:
+ __set_CP(15, 0, 0x8000000f, 9, 12, 3);
+#endif
+
+}
+
+void cycleMeasurementStart()
+{
+#ifdef CORTEXM
+ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk;
+ SysTick->LOAD = JTEST_SYSTICK_INITIAL_VALUE;
+ SysTick->VAL = JTEST_SYSTICK_INITIAL_VALUE;
+
+ SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
+
+ // In fast model at least, when we start the SysTick, VAL is temporarily
+ // switching to zero. If the benchmark is too quick
+ // VAL has no time to switch to JTEST_SYSTICK_INITIAL_VALUE
+ // and benchmarking value returned is JTEST_SYSTICK_INITIAL_VALUE
+ // instead of 0
+ while(SysTick->VAL == 0);
+
+ startCycles = SysTick->VAL;
+
+#endif
+
+#ifdef CORTEXA
+ unsigned int value;
+ // Read CCNT Register
+ __get_CP(15, 0, value, 9, 13, 0);
+ startCycles = value;
+#endif
+}
+
+void cycleMeasurementStop()
+{
+#ifdef CORTEXM
+ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk;
+ SysTick->LOAD = JTEST_SYSTICK_INITIAL_VALUE;
+ SysTick->VAL = JTEST_SYSTICK_INITIAL_VALUE;
+#endif
+}
+
+Testing::cycles_t getCycles()
+{
+#ifdef CORTEXM
+ uint32_t v = SysTick->VAL;
+ return(startCycles - v);
+#endif
+
+#ifdef CORTEXA
+ unsigned int value;
+ // Read CCNT Register
+ asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n":"=r" (value));
+ return(value - startCycles);
+#endif
+
+ return(0);
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsF32/fullBenchmark.csv b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsF32/fullBenchmark.csv
new file mode 100644
index 0000000..316349b
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsF32/fullBenchmark.csv
@@ -0,0 +1,41 @@
+CATEGORY,NAME,ID,NB,CYCLES,OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION
+"DSP:BasicMaths:BasicMathsF32","vec_mult_f32",1,16,297,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_mult_f32",1,32,369,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_mult_f32",1,64,513,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_mult_f32",1,128,801,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_mult_f32",1,256,1377,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_add_f32",2,16,297,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_add_f32",2,32,369,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_add_f32",2,64,513,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_add_f32",2,128,801,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_add_f32",2,256,1377,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_sub_f32",3,16,297,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_sub_f32",3,32,369,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_sub_f32",3,64,513,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_sub_f32",3,128,801,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_sub_f32",3,256,1377,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_abs_f32",4,16,277,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_abs_f32",4,32,331,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_abs_f32",4,64,439,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_abs_f32",4,128,655,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_abs_f32",4,256,1087,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_negate_f32",5,16,222,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_negate_f32",5,32,276,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_negate_f32",5,64,384,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_negate_f32",5,128,600,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_negate_f32",5,256,1032,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_offset_f32",6,16,278,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_offset_f32",6,32,332,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_offset_f32",6,64,440,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_offset_f32",6,128,656,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_offset_f32",6,256,1088,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_scale_f32",7,16,278,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_scale_f32",7,32,332,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_scale_f32",7,64,440,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_scale_f32",7,128,656,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_scale_f32",7,256,1088,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_dot_f32",8,16,243,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_dot_f32",8,32,311,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_dot_f32",8,64,447,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_dot_f32",8,128,719,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsF32","vec_dot_f32",8,256,1263,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
diff --git a/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsF32/regression.csv b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsF32/regression.csv
new file mode 100644
index 0000000..dfc96e1
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsF32/regression.csv
@@ -0,0 +1,9 @@
+"ID","CATEGORY","NAME","OPTIMIZED","HARDFP","FASTMATH","NEON","UNROLL","ROUNDING","PLATFORM","CORE","COMPILER","VERSION","Regression","MAX"
+1,"DSP:BasicMaths:BasicMathsF32","vec_mult_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"224.99999999999997 + NB * 4.499999999999998",1377
+2,"DSP:BasicMaths:BasicMathsF32","vec_add_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"224.99999999999997 + NB * 4.499999999999998",1377
+3,"DSP:BasicMaths:BasicMathsF32","vec_sub_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"224.99999999999997 + NB * 4.499999999999998",1377
+4,"DSP:BasicMaths:BasicMathsF32","vec_abs_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"222.99999999999994 + NB * 3.3749999999999982",1087
+5,"DSP:BasicMaths:BasicMathsF32","vec_negate_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"168.00000000000006 + NB * 3.374999999999999",1032
+6,"DSP:BasicMaths:BasicMathsF32","vec_offset_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"223.99999999999994 + NB * 3.374999999999999",1088
+7,"DSP:BasicMaths:BasicMathsF32","vec_scale_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"223.99999999999994 + NB * 3.374999999999999",1088
+8,"DSP:BasicMaths:BasicMathsF32","vec_dot_f32",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"175.0 + NB * 4.249999999999999",1263
diff --git a/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsQ31/fullBenchmark.csv b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsQ31/fullBenchmark.csv
new file mode 100644
index 0000000..7fb8ea2
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsQ31/fullBenchmark.csv
@@ -0,0 +1,41 @@
+CATEGORY,NAME,ID,NB,CYCLES,OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION
+"DSP:BasicMaths:BasicMathsQ31","vec_mult_q31",1,16,329,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_mult_q31",1,32,433,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_mult_q31",1,64,641,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_mult_q31",1,128,1057,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_mult_q31",1,256,1889,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_add_q31",2,16,298,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_add_q31",2,32,370,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_add_q31",2,64,514,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_add_q31",2,128,802,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_add_q31",2,256,1378,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_sub_q31",3,16,298,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_sub_q31",3,32,370,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_sub_q31",3,64,514,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_sub_q31",3,128,802,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_sub_q31",3,256,1378,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_abs_q31",4,16,309,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_abs_q31",4,32,395,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_abs_q31",4,64,567,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_abs_q31",4,128,911,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_abs_q31",4,256,1599,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_negate_q31",5,16,224,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_negate_q31",5,32,278,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_negate_q31",5,64,386,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_negate_q31",5,128,602,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_negate_q31",5,256,1034,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_offset_q31",6,16,278,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_offset_q31",6,32,332,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_offset_q31",6,64,440,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_offset_q31",6,128,656,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_offset_q31",6,256,1088,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_scale_q31",7,16,375,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_scale_q31",7,32,515,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_scale_q31",7,64,795,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_scale_q31",7,128,1355,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_scale_q31",7,256,2475,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_dot_q31",8,16,311,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_dot_q31",8,32,429,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_dot_q31",8,64,665,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_dot_q31",8,128,1137,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"DSP:BasicMaths:BasicMathsQ31","vec_dot_q31",8,256,2081,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
diff --git a/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsQ31/regression.csv b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsQ31/regression.csv
new file mode 100644
index 0000000..632a75a
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/DSP/BasicMaths/BasicMathsQ31/regression.csv
@@ -0,0 +1,9 @@
+"ID","CATEGORY","NAME","OPTIMIZED","HARDFP","FASTMATH","NEON","UNROLL","ROUNDING","PLATFORM","CORE","COMPILER","VERSION","Regression","MAX"
+1,"DSP:BasicMaths:BasicMathsQ31","vec_mult_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"225.00000000000003 + NB * 6.499999999999997",1889
+2,"DSP:BasicMaths:BasicMathsQ31","vec_add_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"226.0 + NB * 4.499999999999998",1378
+3,"DSP:BasicMaths:BasicMathsQ31","vec_sub_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"226.0 + NB * 4.499999999999998",1378
+4,"DSP:BasicMaths:BasicMathsQ31","vec_abs_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"223.00000000000003 + NB * 5.374999999999997",1599
+5,"DSP:BasicMaths:BasicMathsQ31","vec_negate_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"170.0 + NB * 3.3749999999999982",1034
+6,"DSP:BasicMaths:BasicMathsQ31","vec_offset_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"223.99999999999994 + NB * 3.374999999999999",1088
+7,"DSP:BasicMaths:BasicMathsQ31","vec_scale_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"235.00000000000006 + NB * 8.749999999999996",2475
+8,"DSP:BasicMaths:BasicMathsQ31","vec_dot_q31",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"193.00000000000009 + NB * 7.374999999999998",2081
diff --git a/CMSIS/DSP/Testing/FullBenchmark/NN/FullyConnected/fullBenchmark.csv b/CMSIS/DSP/Testing/FullBenchmark/NN/FullyConnected/fullBenchmark.csv
new file mode 100644
index 0000000..ce7740a
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/NN/FullyConnected/fullBenchmark.csv
@@ -0,0 +1,5 @@
+CATEGORY,ID,REPEAT,CYCLES,OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION
+"NN:FullyConnected",1,10,6235,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"NN:FullyConnected",1,20,12085,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"NN:FullyConnected",1,100,58885,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
+"NN:FullyConnected",1,200,117385,1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
diff --git a/CMSIS/DSP/Testing/FullBenchmark/NN/FullyConnected/regression.csv b/CMSIS/DSP/Testing/FullBenchmark/NN/FullyConnected/regression.csv
new file mode 100644
index 0000000..60d7fa1
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/NN/FullyConnected/regression.csv
@@ -0,0 +1,2 @@
+"ID","CATEGORY","OPTIMIZED","HARDFP","FASTMATH","NEON","UNROLL","ROUNDING","PLATFORM","CORE","COMPILER","VERSION","Regression","MAX"
+1,"NN:FullyConnected",1,1,1,1,1,0,"YaminFVP","ARMCM33_DSP_FP","AC6",6120001,"385.0 + REPEAT * 602.9999999999999",120985
diff --git a/CMSIS/DSP/Testing/FullBenchmark/README.md b/CMSIS/DSP/Testing/FullBenchmark/README.md
new file mode 100755
index 0000000..450ca61
--- /dev/null
+++ b/CMSIS/DSP/Testing/FullBenchmark/README.md
@@ -0,0 +1,5 @@
+README
+======
+
+The "benchmarks" in the folders are *ONLY* to test the current framework.
+They are not real benchmarks. Don't trust the values.
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/BasicMathsBenchmarksF32_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/BasicMathsBenchmarksF32_decl.h
new file mode 100644
index 0000000..b778faa
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/BasicMathsBenchmarksF32_decl.h
@@ -0,0 +1,25 @@
+void vec_mult_f32();
+void vec_add_f32();
+void vec_sub_f32();
+void vec_abs_f32();
+void vec_negate_f32();
+void vec_offset_f32();
+void vec_scale_f32();
+void vec_dot_f32();
+
+// Pattern IDs
+static const int INPUT1_F32_ID=0;
+static const int INPUT2_F32_ID=1;
+
+// Output IDs
+static const int OUT_SAMPLES_F32_ID=0;
+
+// Test IDs
+static const int VEC_MULT_F32_1=1;
+static const int VEC_ADD_F32_2=2;
+static const int VEC_SUB_F32_3=3;
+static const int VEC_ABS_F32_4=4;
+static const int VEC_NEGATE_F32_5=5;
+static const int VEC_OFFSET_F32_6=6;
+static const int VEC_SCALE_F32_7=7;
+static const int VEC_DOT_F32_8=8;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/BasicMathsBenchmarksQ31_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/BasicMathsBenchmarksQ31_decl.h
new file mode 100644
index 0000000..ad82c60
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/BasicMathsBenchmarksQ31_decl.h
@@ -0,0 +1,25 @@
+void vec_mult_q31();
+void vec_add_q31();
+void vec_sub_q31();
+void vec_abs_q31();
+void vec_negate_q31();
+void vec_offset_q31();
+void vec_scale_q31();
+void vec_dot_q31();
+
+// Pattern IDs
+static const int INPUT1_Q31_ID=0;
+static const int INPUT2_Q31_ID=1;
+
+// Output IDs
+static const int OUT_SAMPLES_Q31_ID=0;
+
+// Test IDs
+static const int VEC_MULT_Q31_1=1;
+static const int VEC_ADD_Q31_2=2;
+static const int VEC_SUB_Q31_3=3;
+static const int VEC_ABS_Q31_4=4;
+static const int VEC_NEGATE_Q31_5=5;
+static const int VEC_OFFSET_Q31_6=6;
+static const int VEC_SCALE_Q31_7=7;
+static const int VEC_DOT_Q31_8=8;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/BasicTestsF32_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/BasicTestsF32_decl.h
new file mode 100644
index 0000000..b7825ce
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/BasicTestsF32_decl.h
@@ -0,0 +1,52 @@
+void test_add_f32();
+void test_sub_f32();
+void test_mult_f32();
+void test_negate_f32();
+void test_offset_f32();
+void test_scale_f32();
+void test_dot_prod_f32();
+void test_abs_f32();
+
+// Pattern IDs
+static const int INPUT1_F32_ID=0;
+static const int INPUT2_F32_ID=1;
+static const int REF_ADD_F32_ID=2;
+static const int REF_SUB_F32_ID=3;
+static const int REF_MULT_F32_ID=4;
+static const int REF_NEGATE_F32_ID=5;
+static const int REF_OFFSET_F32_ID=6;
+static const int REF_SCALE_F32_ID=7;
+static const int REF_DOT_3_F32_ID=8;
+static const int REF_DOT_4N_F32_ID=9;
+static const int REF_DOT_4N1_F32_ID=10;
+static const int REF_ABS_F32_ID=11;
+
+// Output IDs
+static const int OUT_SAMPLES_F32_ID=0;
+static const int OUT_STATE_F32_ID=1;
+
+// Test IDs
+static const int TEST_ADD_F32_1=1;
+static const int TEST_ADD_F32_2=2;
+static const int TEST_ADD_F32_3=3;
+static const int TEST_SUB_F32_4=4;
+static const int TEST_SUB_F32_5=5;
+static const int TEST_SUB_F32_6=6;
+static const int TEST_MULT_F32_7=7;
+static const int TEST_MULT_F32_8=8;
+static const int TEST_MULT_F32_9=9;
+static const int TEST_NEGATE_F32_10=10;
+static const int TEST_NEGATE_F32_11=11;
+static const int TEST_NEGATE_F32_12=12;
+static const int TEST_OFFSET_F32_13=13;
+static const int TEST_OFFSET_F32_14=14;
+static const int TEST_OFFSET_F32_15=15;
+static const int TEST_SCALE_F32_16=16;
+static const int TEST_SCALE_F32_17=17;
+static const int TEST_SCALE_F32_18=18;
+static const int TEST_DOT_PROD_F32_19=19;
+static const int TEST_DOT_PROD_F32_20=20;
+static const int TEST_DOT_PROD_F32_21=21;
+static const int TEST_ABS_F32_22=22;
+static const int TEST_ABS_F32_23=23;
+static const int TEST_ABS_F32_24=24;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/BasicTests_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/BasicTests_decl.h
new file mode 100644
index 0000000..b7825ce
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/BasicTests_decl.h
@@ -0,0 +1,52 @@
+void test_add_f32();
+void test_sub_f32();
+void test_mult_f32();
+void test_negate_f32();
+void test_offset_f32();
+void test_scale_f32();
+void test_dot_prod_f32();
+void test_abs_f32();
+
+// Pattern IDs
+static const int INPUT1_F32_ID=0;
+static const int INPUT2_F32_ID=1;
+static const int REF_ADD_F32_ID=2;
+static const int REF_SUB_F32_ID=3;
+static const int REF_MULT_F32_ID=4;
+static const int REF_NEGATE_F32_ID=5;
+static const int REF_OFFSET_F32_ID=6;
+static const int REF_SCALE_F32_ID=7;
+static const int REF_DOT_3_F32_ID=8;
+static const int REF_DOT_4N_F32_ID=9;
+static const int REF_DOT_4N1_F32_ID=10;
+static const int REF_ABS_F32_ID=11;
+
+// Output IDs
+static const int OUT_SAMPLES_F32_ID=0;
+static const int OUT_STATE_F32_ID=1;
+
+// Test IDs
+static const int TEST_ADD_F32_1=1;
+static const int TEST_ADD_F32_2=2;
+static const int TEST_ADD_F32_3=3;
+static const int TEST_SUB_F32_4=4;
+static const int TEST_SUB_F32_5=5;
+static const int TEST_SUB_F32_6=6;
+static const int TEST_MULT_F32_7=7;
+static const int TEST_MULT_F32_8=8;
+static const int TEST_MULT_F32_9=9;
+static const int TEST_NEGATE_F32_10=10;
+static const int TEST_NEGATE_F32_11=11;
+static const int TEST_NEGATE_F32_12=12;
+static const int TEST_OFFSET_F32_13=13;
+static const int TEST_OFFSET_F32_14=14;
+static const int TEST_OFFSET_F32_15=15;
+static const int TEST_SCALE_F32_16=16;
+static const int TEST_SCALE_F32_17=17;
+static const int TEST_SCALE_F32_18=18;
+static const int TEST_DOT_PROD_F32_19=19;
+static const int TEST_DOT_PROD_F32_20=20;
+static const int TEST_DOT_PROD_F32_21=21;
+static const int TEST_ABS_F32_22=22;
+static const int TEST_ABS_F32_23=23;
+static const int TEST_ABS_F32_24=24;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/ComplexTests_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/ComplexTests_decl.h
new file mode 100644
index 0000000..06bfb1e
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/ComplexTests_decl.h
@@ -0,0 +1,13 @@
+void testA();
+void testB();
+
+// Pattern IDs
+static const int INPUT1_F32_ID=0;
+static const int INPUT2_F32_ID=1;
+
+// Output IDs
+static const int OUT_SAMPLES_F32_ID=0;
+
+// Test IDs
+static const int TESTA_1=1;
+static const int TESTB_2=2;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/FullyConnectedBench_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/FullyConnectedBench_decl.h
new file mode 100644
index 0000000..3ce636b
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/FullyConnectedBench_decl.h
@@ -0,0 +1,14 @@
+void test_fully_connected_tflite_s8();
+
+// Pattern IDs
+static const int INPUT1_S8_ID=0;
+static const int BIAS_S8_ID=1;
+static const int WEIGHT_S8_ID=2;
+static const int REF1_S8_ID=3;
+
+// Output IDs
+static const int OUTPUT1_S8_ID=0;
+static const int TEMP1_S16_ID=1;
+
+// Test IDs
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_1=1;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/FullyConnected_decl.h b/CMSIS/DSP/Testing/GeneratedInclude/FullyConnected_decl.h
new file mode 100644
index 0000000..365a9c2
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/FullyConnected_decl.h
@@ -0,0 +1,112 @@
+void test_fully_connected_tflite_s8();
+
+// Pattern IDs
+static const int INPUT1_S8_ID=0;
+static const int BIAS1_S8_ID=1;
+static const int WEIGHT1_S8_ID=2;
+static const int REF1_S8_ID=3;
+static const int INPUT19_S8_ID=4;
+static const int BIAS19_S8_ID=5;
+static const int WEIGHT19_S8_ID=6;
+static const int REF19_S8_ID=7;
+static const int INPUT2_S8_ID=8;
+static const int BIAS2_S8_ID=9;
+static const int WEIGHT2_S8_ID=10;
+static const int REF2_S8_ID=11;
+static const int INPUT3_S8_ID=12;
+static const int BIAS3_S8_ID=13;
+static const int WEIGHT3_S8_ID=14;
+static const int REF3_S8_ID=15;
+static const int INPUT4_S8_ID=16;
+static const int BIAS4_S8_ID=17;
+static const int WEIGHT4_S8_ID=18;
+static const int REF4_S8_ID=19;
+static const int INPUT5_S8_ID=20;
+static const int BIAS5_S8_ID=21;
+static const int WEIGHT5_S8_ID=22;
+static const int REF5_S8_ID=23;
+static const int INPUT6_S8_ID=24;
+static const int BIAS6_S8_ID=25;
+static const int WEIGHT6_S8_ID=26;
+static const int REF6_S8_ID=27;
+static const int INPUT7_S8_ID=28;
+static const int BIAS7_S8_ID=29;
+static const int WEIGHT7_S8_ID=30;
+static const int REF7_S8_ID=31;
+static const int INPUT8_S8_ID=32;
+static const int BIAS8_S8_ID=33;
+static const int WEIGHT8_S8_ID=34;
+static const int REF8_S8_ID=35;
+static const int INPUT9_S8_ID=36;
+static const int BIAS9_S8_ID=37;
+static const int WEIGHT9_S8_ID=38;
+static const int REF9_S8_ID=39;
+static const int INPUT10_S8_ID=40;
+static const int BIAS10_S8_ID=41;
+static const int WEIGHT10_S8_ID=42;
+static const int REF10_S8_ID=43;
+static const int INPUT11_S8_ID=44;
+static const int BIAS11_S8_ID=45;
+static const int WEIGHT11_S8_ID=46;
+static const int REF11_S8_ID=47;
+static const int INPUT12_S8_ID=48;
+static const int BIAS12_S8_ID=49;
+static const int WEIGHT12_S8_ID=50;
+static const int REF12_S8_ID=51;
+static const int INPUT13_S8_ID=52;
+static const int BIAS13_S8_ID=53;
+static const int WEIGHT13_S8_ID=54;
+static const int REF13_S8_ID=55;
+static const int INPUT14_S8_ID=56;
+static const int BIAS14_S8_ID=57;
+static const int WEIGHT14_S8_ID=58;
+static const int REF14_S8_ID=59;
+
+// Output IDs
+static const int OUTPUT1_S8_ID=0;
+static const int TEMP1_S16_ID=1;
+static const int OUTPUT19_S8_ID=2;
+static const int TEMP19_S16_ID=3;
+static const int OUTPUT2_S8_ID=4;
+static const int TEMP2_S16_ID=5;
+static const int OUTPUT3_S8_ID=6;
+static const int TEMP3_S16_ID=7;
+static const int OUTPUT4_S8_ID=8;
+static const int TEMP4_S16_ID=9;
+static const int OUTPUT5_S8_ID=10;
+static const int TEMP5_S16_ID=11;
+static const int OUTPUT6_S8_ID=12;
+static const int TEMP6_S16_ID=13;
+static const int OUTPUT7_S8_ID=14;
+static const int TEMP7_S16_ID=15;
+static const int OUTPUT8_S8_ID=16;
+static const int TEMP8_S16_ID=17;
+static const int OUTPUT9_S8_ID=18;
+static const int TEMP9_S16_ID=19;
+static const int OUTPUT10_S8_ID=20;
+static const int TEMP10_S16_ID=21;
+static const int OUTPUT11_S8_ID=22;
+static const int TEMP11_S16_ID=23;
+static const int OUTPUT12_S8_ID=24;
+static const int TEMP12_S16_ID=25;
+static const int OUTPUT13_S8_ID=26;
+static const int TEMP13_S16_ID=27;
+static const int OUTPUT14_S8_ID=28;
+static const int TEMP14_S16_ID=29;
+
+// Test IDs
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_1=1;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_2=2;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_3=3;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_4=4;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_5=5;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_6=6;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_7=7;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_8=8;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_9=9;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_10=10;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_11=11;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_12=12;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_13=13;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_14=14;
+static const int TEST_FULLY_CONNECTED_TFLITE_S8_15=15;
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/Patterns.h b/CMSIS/DSP/Testing/GeneratedInclude/Patterns.h
new file mode 100644
index 0000000..62182ed
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/Patterns.h
@@ -0,0 +1,1465 @@
+#ifndef _PATTERNS_H_
+#define _PATTERNS_H_
+__ALIGNED(8) const char patterns[]={
+// Patterns/NN/FullyConnected/TestCase_1_10_4_input_1.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+239,
+17,
+235,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_bias_1.txt
+4,
+8,
+12,
+16,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_weights_1.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+17,
+19,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+17,
+19,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+17,
+19,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+17,
+19,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_output_1.txt
+57,
+58,
+59,
+60,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_8_9_input_2.txt
+254,
+0,
+255,
+250,
+243,
+21,
+255,
+246,
+// Patterns/NN/FullyConnected/TestCase_1_8_9_bias_2.txt
+253,
+1,
+254,
+2,
+1,
+8,
+3,
+2,
+252,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_8_9_weights_2.txt
+0,
+253,
+2,
+3,
+1,
+6,
+7,
+255,
+0,
+1,
+252,
+3,
+1,
+6,
+66,
+0,
+0,
+21,
+2,
+33,
+1,
+7,
+0,
+8,
+0,
+20,
+2,
+3,
+1,
+248,
+7,
+251,
+0,
+1,
+2,
+3,
+1,
+255,
+252,
+8,
+10,
+253,
+2,
+3,
+1,
+6,
+7,
+250,
+8,
+253,
+2,
+34,
+1,
+6,
+7,
+8,
+248,
+253,
+2,
+0,
+1,
+248,
+7,
+8,
+103,
+102,
+255,
+255,
+255,
+127,
+255,
+255,
+// Patterns/NN/FullyConnected/TestCase_1_8_9_output_2.txt
+103,
+102,
+175,
+128,
+132,
+127,
+128,
+128,
+127,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_input_3.txt
+245,
+1,
+2,
+3,
+4,
+5,
+6,
+7,
+246,
+245,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_bias_3.txt
+1,
+2,
+3,
+253,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_weights_3.txt
+0,
+1,
+2,
+3,
+4,
+5,
+6,
+7,
+8,
+9,
+0,
+1,
+128,
+3,
+4,
+5,
+248,
+7,
+8,
+253,
+127,
+1,
+2,
+3,
+75,
+5,
+6,
+7,
+8,
+0,
+0,
+1,
+254,
+3,
+4,
+5,
+248,
+7,
+8,
+245,
+// Patterns/NN/FullyConnected/TestCase_1_10_4_output_3.txt
+25,
+255,
+255,
+127,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_9_1_input_4.txt
+245,
+0,
+0,
+250,
+5,
+1,
+255,
+246,
+255,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_9_1_bias_4.txt
+253,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_9_1_weights_4.txt
+0,
+253,
+2,
+3,
+1,
+6,
+7,
+8,
+9,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_9_1_output_4.txt
+168,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_1_8_8_input_5.txt
+254,
+0,
+255,
+250,
+243,
+21,
+255,
+246,
+// Patterns/NN/FullyConnected/TestCase_1_8_8_bias_5.txt
+253,
+1,
+254,
+2,
+1,
+8,
+3,
+2,
+// Patterns/NN/FullyConnected/TestCase_1_8_8_weights_5.txt
+0,
+253,
+2,
+3,
+1,
+6,
+7,
+255,
+0,
+1,
+252,
+3,
+1,
+6,
+66,
+0,
+0,
+21,
+2,
+33,
+1,
+7,
+0,
+8,
+0,
+20,
+2,
+3,
+1,
+248,
+7,
+251,
+0,
+1,
+2,
+3,
+1,
+255,
+252,
+8,
+10,
+253,
+2,
+3,
+1,
+6,
+7,
+250,
+8,
+253,
+2,
+34,
+1,
+6,
+7,
+8,
+248,
+253,
+2,
+0,
+1,
+248,
+7,
+8,
+// Patterns/NN/FullyConnected/TestCase_1_8_8_output_5.txt
+103,
+102,
+175,
+128,
+132,
+127,
+128,
+128,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_input_6.txt
+3,
+5,
+7,
+9,
+11,
+13,
+3,
+5,
+7,
+253,
+11,
+13,
+3,
+237,
+7,
+9,
+5,
+247,
+3,
+5,
+7,
+9,
+65,
+13,
+3,
+5,
+7,
+9,
+11,
+13,
+3,
+5,
+7,
+9,
+11,
+253,
+3,
+1,
+7,
+9,
+3,
+255,
+3,
+249,
+7,
+9,
+5,
+67,
+3,
+249,
+7,
+9,
+65,
+13,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_bias_6.txt
+4,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_weights_6.txt
+1,
+3,
+5,
+7,
+255,
+11,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_output_6.txt
+82,
+58,
+248,
+82,
+82,
+34,
+36,
+127,
+70,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_input_7.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+1,
+3,
+5,
+7,
+253,
+11,
+13,
+1,
+3,
+237,
+7,
+9,
+5,
+247,
+1,
+3,
+5,
+7,
+9,
+65,
+13,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+1,
+3,
+5,
+7,
+9,
+11,
+253,
+1,
+3,
+1,
+7,
+9,
+3,
+255,
+1,
+3,
+249,
+7,
+9,
+5,
+67,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_bias_7.txt
+4,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_weights_7.txt
+1,
+3,
+5,
+7,
+255,
+11,
+13,
+239,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_output_7.txt
+107,
+49,
+22,
+127,
+48,
+58,
+128,
+8,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_input_8.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+237,
+235,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+239,
+17,
+235,
+1,
+3,
+5,
+7,
+9,
+5,
+13,
+239,
+17,
+235,
+1,
+3,
+5,
+7,
+9,
+5,
+13,
+239,
+17,
+235,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_bias_8.txt
+4,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_weights_8.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+17,
+19,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_output_8.txt
+23,
+57,
+39,
+39,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_input_9.txt
+3,
+5,
+7,
+9,
+11,
+13,
+3,
+5,
+7,
+253,
+11,
+13,
+3,
+237,
+7,
+9,
+5,
+247,
+3,
+5,
+7,
+9,
+65,
+13,
+3,
+5,
+7,
+9,
+11,
+13,
+3,
+5,
+7,
+9,
+11,
+253,
+3,
+1,
+7,
+9,
+3,
+255,
+3,
+249,
+7,
+9,
+5,
+67,
+3,
+249,
+7,
+9,
+65,
+13,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_bias_9.txt
+4,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_weights_9.txt
+1,
+3,
+5,
+7,
+255,
+11,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_6_1_output_9.txt
+82,
+58,
+248,
+82,
+82,
+34,
+36,
+127,
+70,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_input_10.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+237,
+235,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+239,
+17,
+235,
+1,
+3,
+5,
+7,
+9,
+5,
+13,
+239,
+17,
+235,
+1,
+3,
+5,
+7,
+9,
+5,
+13,
+239,
+17,
+235,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_bias_10.txt
+4,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_weights_10.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+15,
+17,
+19,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_10_1_output_10.txt
+23,
+57,
+39,
+39,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_input_11.txt
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+1,
+3,
+5,
+7,
+253,
+11,
+13,
+1,
+3,
+237,
+7,
+9,
+5,
+247,
+1,
+3,
+5,
+7,
+9,
+65,
+13,
+1,
+3,
+5,
+7,
+9,
+11,
+13,
+1,
+3,
+5,
+7,
+9,
+11,
+253,
+1,
+3,
+1,
+7,
+9,
+3,
+255,
+1,
+3,
+249,
+7,
+9,
+5,
+67,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_bias_11.txt
+4,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_weights_11.txt
+1,
+3,
+5,
+7,
+255,
+11,
+13,
+239,
+// Patterns/NN/FullyConnected/TestCase_8_8_1_output_11.txt
+107,
+49,
+22,
+127,
+48,
+58,
+128,
+8,
+// Patterns/NN/FullyConnected/TestCase_9_8_4_input_12.txt
+180,
+1,
+1,
+1,
+1,
+1,
+1,
+14,
+1,
+255,
+1,
+0,
+251,
+244,
+2,
+0,
+9,
+255,
+11,
+0,
+251,
+244,
+2,
+0,
+1,
+249,
+254,
+3,
+1,
+244,
+249,
+8,
+255,
+195,
+1,
+0,
+251,
+255,
+2,
+0,
+2,
+255,
+1,
+0,
+1,
+254,
+23,
+0,
+1,
+249,
+254,
+3,
+1,
+22,
+249,
+8,
+3,
+237,
+19,
+37,
+241,
+244,
+2,
+99,
+1,
+255,
+19,
+37,
+251,
+244,
+2,
+9,
+// Patterns/NN/FullyConnected/TestCase_9_8_4_bias_12.txt
+254,
+1,
+255,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_8_4_weights_12.txt
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+3,
+4,
+2,
+0,
+253,
+2,
+255,
+1,
+0,
+251,
+244,
+2,
+0,
+98,
+255,
+1,
+7,
+5,
+254,
+2,
+0,
+// Patterns/NN/FullyConnected/TestCase_9_8_4_output_12.txt
+128,
+151,
+128,
+128,
+241,
+215,
+127,
+103,
+11,
+243,
+127,
+127,
+240,
+212,
+127,
+127,
+188,
+175,
+100,
+201,
+24,
+4,
+70,
+127,
+18,
+24,
+128,
+71,
+115,
+128,
+127,
+127,
+49,
+79,
+127,
+127,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_5_input_13.txt
+180,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+255,
+1,
+0,
+251,
+244,
+2,
+0,
+9,
+255,
+1,
+0,
+251,
+244,
+2,
+0,
+1,
+249,
+254,
+3,
+1,
+244,
+249,
+8,
+255,
+255,
+1,
+0,
+251,
+255,
+2,
+0,
+1,
+249,
+254,
+3,
+1,
+22,
+249,
+8,
+3,
+237,
+19,
+37,
+241,
+244,
+2,
+99,
+1,
+255,
+19,
+37,
+251,
+244,
+2,
+9,
+// Patterns/NN/FullyConnected/TestCase_8_8_5_bias_13.txt
+254,
+1,
+255,
+3,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_5_weights_13.txt
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+3,
+4,
+2,
+0,
+253,
+2,
+255,
+1,
+0,
+251,
+244,
+2,
+0,
+98,
+255,
+1,
+7,
+5,
+254,
+2,
+0,
+2,
+255,
+1,
+0,
+1,
+254,
+2,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_8_5_output_13.txt
+128,
+128,
+128,
+128,
+128,
+227,
+175,
+127,
+127,
+55,
+3,
+191,
+127,
+127,
+87,
+225,
+169,
+127,
+127,
+37,
+241,
+215,
+81,
+128,
+3,
+37,
+49,
+128,
+127,
+157,
+127,
+128,
+127,
+127,
+115,
+99,
+127,
+127,
+127,
+91,
+// Patterns/NN/FullyConnected/TestCase_4_7_3_input_14.txt
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_7_3_bias_14.txt
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_7_3_weights_14.txt
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_4_7_3_output_14.txt
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_7_4_input_15.txt
+254,
+0,
+255,
+250,
+243,
+1,
+255,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+248,
+253,
+2,
+0,
+1,
+248,
+7,
+254,
+0,
+255,
+250,
+243,
+1,
+255,
+248,
+253,
+2,
+0,
+1,
+248,
+7,
+254,
+0,
+255,
+250,
+254,
+1,
+255,
+254,
+18,
+36,
+250,
+243,
+1,
+8,
+236,
+18,
+36,
+240,
+243,
+1,
+98,
+// Patterns/NN/FullyConnected/TestCase_8_7_4_bias_15.txt
+254,
+1,
+255,
+3,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_7_4_weights_15.txt
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+2,
+3,
+1,
+255,
+252,
+254,
+0,
+255,
+250,
+243,
+1,
+255,
+254,
+0,
+6,
+4,
+253,
+1,
+255,
+0,
+0,
+0,
+0,
+// Patterns/NN/FullyConnected/TestCase_8_7_4_output_15.txt
+238,
+213,
+127,
+7,
+4,
+9,
+239,
+14,
+251,
+238,
+216,
+15,
+238,
+213,
+127,
+7,
+251,
+238,
+216,
+15,
+249,
+235,
+41,
+241,
+46,
+77,
+127,
+127,
+108,
+128,
+127,
+127,
+};
+#endif
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/TestDesc.h b/CMSIS/DSP/Testing/GeneratedInclude/TestDesc.h
new file mode 100644
index 0000000..ef4bda5
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/TestDesc.h
@@ -0,0 +1,31 @@
+#include "Test.h"
+#include "Pattern.h"
+#include "FullyConnected.h"
+class NNTests : public Client::Group
+{
+ public:
+ NNTests(Testing::testID_t id):Client::Group(id)
+ ,FullyConnectedVar(1)
+
+ {
+ this->addContainer(&FullyConnectedVar);
+
+ }
+ private:
+ FullyConnected FullyConnectedVar;
+;
+};
+class Root : public Client::Group
+{
+ public:
+ Root(Testing::testID_t id):Client::Group(id)
+ ,NNTestsVar(3)
+
+ {
+ this->addContainer(NULL);this->addContainer(NULL);this->addContainer(&NNTestsVar);
+this->addContainer(NULL);
+ }
+ private:
+ NNTests NNTestsVar;
+;
+};
diff --git a/CMSIS/DSP/Testing/GeneratedInclude/TestDrive.h b/CMSIS/DSP/Testing/GeneratedInclude/TestDrive.h
new file mode 100644
index 0000000..0ace594
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedInclude/TestDrive.h
@@ -0,0 +1,213 @@
+#ifndef _DRIVER_H_
+#define _DRIVER_H_
+__ALIGNED(8) const char testDesc[]={
+3,0,0,0,
+1,0,0,0,
+'n','n',
+3,0,0,0,
+3,0,0,0,
+'n','y','N','N','\0',
+2,0,0,0,
+1,0,0,0,
+'n','y','F','u','l','l','y','C','o','n','n','e','c','t','e','d','\0',
+0,0,0,0,
+60,0,0,0,
+0,0,0,0,
+10,0,0,0,
+16,0,0,0,
+4,0,0,0,
+24,0,0,0,
+40,0,0,0,
+64,0,0,0,
+4,0,0,0,
+72,0,0,0,
+8,0,0,0,
+80,0,0,0,
+9,0,0,0,
+96,0,0,0,
+72,0,0,0,
+168,0,0,0,
+9,0,0,0,
+184,0,0,0,
+10,0,0,0,
+200,0,0,0,
+4,0,0,0,
+208,0,0,0,
+40,0,0,0,
+248,0,0,0,
+4,0,0,0,
+0,1,0,0,
+9,0,0,0,
+16,1,0,0,
+1,0,0,0,
+24,1,0,0,
+9,0,0,0,
+40,1,0,0,
+1,0,0,0,
+48,1,0,0,
+8,0,0,0,
+56,1,0,0,
+8,0,0,0,
+64,1,0,0,
+64,0,0,0,
+128,1,0,0,
+8,0,0,0,
+136,1,0,0,
+54,0,0,0,
+192,1,0,0,
+1,0,0,0,
+200,1,0,0,
+6,0,0,0,
+208,1,0,0,
+9,0,0,0,
+224,1,0,0,
+64,0,0,0,
+32,2,0,0,
+1,0,0,0,
+40,2,0,0,
+8,0,0,0,
+48,2,0,0,
+8,0,0,0,
+56,2,0,0,
+40,0,0,0,
+96,2,0,0,
+1,0,0,0,
+104,2,0,0,
+10,0,0,0,
+120,2,0,0,
+4,0,0,0,
+128,2,0,0,
+54,0,0,0,
+184,2,0,0,
+1,0,0,0,
+192,2,0,0,
+6,0,0,0,
+200,2,0,0,
+9,0,0,0,
+216,2,0,0,
+40,0,0,0,
+0,3,0,0,
+1,0,0,0,
+8,3,0,0,
+10,0,0,0,
+24,3,0,0,
+4,0,0,0,
+32,3,0,0,
+64,0,0,0,
+96,3,0,0,
+1,0,0,0,
+104,3,0,0,
+8,0,0,0,
+112,3,0,0,
+8,0,0,0,
+120,3,0,0,
+72,0,0,0,
+192,3,0,0,
+4,0,0,0,
+200,3,0,0,
+32,0,0,0,
+232,3,0,0,
+36,0,0,0,
+16,4,0,0,
+64,0,0,0,
+80,4,0,0,
+5,0,0,0,
+88,4,0,0,
+40,0,0,0,
+128,4,0,0,
+40,0,0,0,
+168,4,0,0,
+28,0,0,0,
+200,4,0,0,
+3,0,0,0,
+208,4,0,0,
+21,0,0,0,
+232,4,0,0,
+12,0,0,0,
+248,4,0,0,
+56,0,0,0,
+48,5,0,0,
+4,0,0,0,
+56,5,0,0,
+28,0,0,0,
+88,5,0,0,
+32,0,0,0,
+30,0,0,0,
+'O','u','t','p','u','t','1','\0',
+'T','e','m','p','1','\0',
+'O','u','t','p','u','t','1','9','\0',
+'T','e','m','p','1','9','\0',
+'O','u','t','p','u','t','2','\0',
+'T','e','m','p','2','\0',
+'O','u','t','p','u','t','3','\0',
+'T','e','m','p','3','\0',
+'O','u','t','p','u','t','4','\0',
+'T','e','m','p','4','\0',
+'O','u','t','p','u','t','5','\0',
+'T','e','m','p','5','\0',
+'O','u','t','p','u','t','6','\0',
+'T','e','m','p','6','\0',
+'O','u','t','p','u','t','7','\0',
+'T','e','m','p','7','\0',
+'O','u','t','p','u','t','8','\0',
+'T','e','m','p','8','\0',
+'O','u','t','p','u','t','9','\0',
+'T','e','m','p','9','\0',
+'O','u','t','p','u','t','1','0','\0',
+'T','e','m','p','1','0','\0',
+'O','u','t','p','u','t','1','1','\0',
+'T','e','m','p','1','1','\0',
+'O','u','t','p','u','t','1','2','\0',
+'T','e','m','p','1','2','\0',
+'O','u','t','p','u','t','1','3','\0',
+'T','e','m','p','1','3','\0',
+'O','u','t','p','u','t','1','4','\0',
+'T','e','m','p','1','4','\0',
+0,0,0,0,
+1,0,0,0,
+1,0,0,0,
+'n','n',
+1,0,0,0,
+2,0,0,0,
+'n','n',
+1,0,0,0,
+3,0,0,0,
+'n','n',
+1,0,0,0,
+4,0,0,0,
+'n','n',
+1,0,0,0,
+5,0,0,0,
+'n','n',
+1,0,0,0,
+6,0,0,0,
+'n','n',
+1,0,0,0,
+7,0,0,0,
+'n','n',
+1,0,0,0,
+8,0,0,0,
+'n','n',
+1,0,0,0,
+9,0,0,0,
+'n','n',
+1,0,0,0,
+10,0,0,0,
+'n','n',
+1,0,0,0,
+11,0,0,0,
+'n','n',
+1,0,0,0,
+12,0,0,0,
+'n','n',
+1,0,0,0,
+13,0,0,0,
+'n','n',
+1,0,0,0,
+14,0,0,0,
+'n','n',
+1,0,0,0,
+15,0,0,0,
+'n','n',
+};
+#endif
diff --git a/CMSIS/DSP/Testing/GeneratedSource/TestDesc.cpp b/CMSIS/DSP/Testing/GeneratedSource/TestDesc.cpp
new file mode 100644
index 0000000..0bb120f
--- /dev/null
+++ b/CMSIS/DSP/Testing/GeneratedSource/TestDesc.cpp
@@ -0,0 +1,22 @@
+#include "Test.h"
+
+#include "FullyConnected.h"
+ FullyConnected::FullyConnected(Testing::testID_t id):Client::Suite(id)
+ {
+ this->addTest(1,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(2,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(3,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(4,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(5,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(6,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(7,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(8,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(9,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(10,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(11,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(12,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(13,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(14,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+this->addTest(15,(Client::test)&FullyConnected::test_fully_connected_tflite_s8);
+
+ }
diff --git a/CMSIS/DSP/Testing/Include/BasicMathsBenchmarksF32.h b/CMSIS/DSP/Testing/Include/BasicMathsBenchmarksF32.h
new file mode 100644
index 0000000..fe48c77
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/BasicMathsBenchmarksF32.h
@@ -0,0 +1,17 @@
+#include "Test.h"
+#include "Pattern.h"
+class BasicMathsBenchmarksF32:public Client::Suite
+ {
+ public:
+ BasicMathsBenchmarksF32(Testing::testID_t id);
+ void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+ void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "BasicMathsBenchmarksF32_decl.h"
+ Client::Pattern<float32_t> input1;
+ Client::Pattern<float32_t> input2;
+ Client::LocalPattern<float32_t> output;
+
+ int nb;
+
+ };
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Include/BasicMathsBenchmarksQ31.h b/CMSIS/DSP/Testing/Include/BasicMathsBenchmarksQ31.h
new file mode 100755
index 0000000..b3daddc
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/BasicMathsBenchmarksQ31.h
@@ -0,0 +1,17 @@
+#include "Test.h"
+#include "Pattern.h"
+class BasicMathsBenchmarksQ31:public Client::Suite
+ {
+ public:
+ BasicMathsBenchmarksQ31(Testing::testID_t id);
+ void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+ void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "BasicMathsBenchmarksQ31_decl.h"
+ Client::Pattern<q31_t> input1;
+ Client::Pattern<q31_t> input2;
+ Client::LocalPattern<q31_t> output;
+
+ int nb;
+
+ };
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Include/BasicTestsF32.h b/CMSIS/DSP/Testing/Include/BasicTestsF32.h
new file mode 100644
index 0000000..c76275e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/BasicTestsF32.h
@@ -0,0 +1,17 @@
+#include "Test.h"
+#include "Pattern.h"
+class BasicTestsF32:public Client::Suite
+ {
+ public:
+ BasicTestsF32(Testing::testID_t id);
+ void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+ void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "BasicTests_decl.h"
+
+ Client::Pattern<float32_t> input1;
+ Client::Pattern<float32_t> input2;
+ Client::LocalPattern<float32_t> output;
+ // Reference patterns are not loaded when we are in dump mode
+ Client::RefPattern<float32_t> ref;
+ };
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Include/FullyConnected.h b/CMSIS/DSP/Testing/Include/FullyConnected.h
new file mode 100644
index 0000000..85d59ef
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/FullyConnected.h
@@ -0,0 +1,36 @@
+#include "Test.h"
+#include "Pattern.h"
+class FullyConnected:public Client::Suite
+ {
+ public:
+ FullyConnected(Testing::testID_t id);
+ void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+ void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "FullyConnected_decl.h"
+
+ int32_t output_mult = 1073741824;
+ int16_t output_shift = -1;
+ int32_t filter_offset = 1;
+ int32_t input_offset = 1;
+ int32_t output_offset = -1;
+ int32_t act_min =-128;
+ int32_t act_max= 127;
+ int32_t nb_batches=1;
+ int32_t rowDim;
+ int32_t colDim;
+
+ Client::Pattern<q7_t> input;
+ Client::Pattern<q7_t> bias;
+ Client::Pattern<q7_t> weight;
+ Client::LocalPattern<q7_t> output;
+ Client::LocalPattern<q15_t> temp;
+ // Reference patterns are not loaded when we are in dump mode
+ Client::RefPattern<q7_t> ref;
+
+
+
+
+
+
+ };
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Include/FullyConnectedBench.h b/CMSIS/DSP/Testing/Include/FullyConnectedBench.h
new file mode 100644
index 0000000..13066e9
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/FullyConnectedBench.h
@@ -0,0 +1,20 @@
+#include "Test.h"
+#include "Pattern.h"
+class FullyConnectedBench:public Client::Suite
+ {
+ public:
+ FullyConnectedBench(Testing::testID_t id);
+ void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+ void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "FullyConnectedBench_decl.h"
+
+ int repeatNb;
+ Client::Pattern<q7_t> input;
+ Client::Pattern<q7_t> bias;
+ Client::Pattern<q7_t> weight;
+ Client::LocalPattern<q7_t> output;
+ Client::LocalPattern<q15_t> temp;
+ // Reference patterns are not loaded when we are in dump mode
+ Client::RefPattern<q7_t> ref;
+ };
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_1.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_1.txt
new file mode 100644
index 0000000..370b68a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_1.txt
@@ -0,0 +1,3 @@
+0x3f50f0a2
+0x3e9dfdde
+0x3f1b759e
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_10.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_10.txt
new file mode 100644
index 0000000..675c0a0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_10.txt
@@ -0,0 +1,3 @@
+0xbf93509c
+0xbf1cde02
+0xbf4d4504
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_11.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_11.txt
new file mode 100644
index 0000000..1f1cbe6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_11.txt
@@ -0,0 +1,8 @@
+0xbf93509c
+0xbf1cde02
+0xbf4d4504
+0xc0125f3b
+0xbf180356
+0x3fdf54f1
+0xbec49138
+0xbfceaf77
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_12.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_12.txt
new file mode 100644
index 0000000..49e09b1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_12.txt
@@ -0,0 +1,9 @@
+0xbf93509c
+0xbf1cde02
+0xbf4d4504
+0xc0125f3b
+0xbf180356
+0x3fdf54f1
+0xbec49138
+0xbfceaf77
+0xbedf6939
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_13.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_13.txt
new file mode 100644
index 0000000..0683e2e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_13.txt
@@ -0,0 +1,3 @@
+0x3fd3509c
+0x3f8e6f01
+0x3fa6a282
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_14.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_14.txt
new file mode 100644
index 0000000..26d28c1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_14.txt
@@ -0,0 +1,8 @@
+0x3fd3509c
+0x3f8e6f01
+0x3fa6a282
+0x40325f3b
+0x3f8c01ab
+0xbf9f54f1
+0x3f62489c
+0x400757bc
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_15.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_15.txt
new file mode 100644
index 0000000..0bc37c4
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_15.txt
@@ -0,0 +1,9 @@
+0x3fd3509c
+0x3f8e6f01
+0x3fa6a282
+0x40325f3b
+0x3f8c01ab
+0xbf9f54f1
+0x3f62489c
+0x400757bc
+0x3f6fb49c
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_16.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_16.txt
new file mode 100644
index 0000000..5d5b126
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_16.txt
@@ -0,0 +1,3 @@
+0x3f13509c
+0x3e9cde02
+0x3ecd4504
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_17.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_17.txt
new file mode 100644
index 0000000..1e09cdc
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_17.txt
@@ -0,0 +1,8 @@
+0x3f13509c
+0x3e9cde02
+0x3ecd4504
+0x3f925f3b
+0x3e980356
+0xbf5f54f1
+0x3e449138
+0x3f4eaf77
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_18.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_18.txt
new file mode 100644
index 0000000..4e405fa
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_18.txt
@@ -0,0 +1,9 @@
+0x3f13509c
+0x3e9cde02
+0x3ecd4504
+0x3f925f3b
+0x3e980356
+0xbf5f54f1
+0x3e449138
+0x3f4eaf77
+0x3e5f6939
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_19.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_19.txt
new file mode 100644
index 0000000..3794c48
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_19.txt
@@ -0,0 +1,3 @@
+0x00000000
+0x00000000
+0x00000000
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_2.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_2.txt
new file mode 100644
index 0000000..f937772
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_2.txt
@@ -0,0 +1,8 @@
+0x3f50f0a2
+0x3e9dfdde
+0x3f1b759e
+0x3fea6ff6
+0x3ed90c26
+0xbf7bca6c
+0x3fcd7bc2
+0x3fb3463e
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_20.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_20.txt
new file mode 100644
index 0000000..bf3c261
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_20.txt
@@ -0,0 +1,8 @@
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_21.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_21.txt
new file mode 100644
index 0000000..1dd7be4
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_21.txt
@@ -0,0 +1,9 @@
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
+0x00000000
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_22.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_22.txt
new file mode 100644
index 0000000..e493d96
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_22.txt
@@ -0,0 +1,3 @@
+0x3f93509c
+0x3f1cde02
+0x3f4d4504
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_23.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_23.txt
new file mode 100644
index 0000000..55d9678
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_23.txt
@@ -0,0 +1,8 @@
+0x3f93509c
+0x3f1cde02
+0x3f4d4504
+0x40125f3b
+0x3f180356
+0x3fdf54f1
+0x3ec49138
+0x3fceaf77
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_24.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_24.txt
new file mode 100644
index 0000000..27c5707
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_24.txt
@@ -0,0 +1,9 @@
+0x3f93509c
+0x3f1cde02
+0x3f4d4504
+0x40125f3b
+0x3f180356
+0x3fdf54f1
+0x3ec49138
+0x3fceaf77
+0x3edf6939
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_3.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_3.txt
new file mode 100644
index 0000000..d5a31c6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_3.txt
@@ -0,0 +1,9 @@
+0x3f50f0a2
+0x3e9dfdde
+0x3f1b759e
+0x3fea6ff6
+0x3ed90c26
+0xbf7bca6c
+0x3fcd7bc2
+0x3fb3463e
+0x3f472a19
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_4.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_4.txt
new file mode 100644
index 0000000..1d417e8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_4.txt
@@ -0,0 +1,3 @@
+0x3fbe28e7
+0x3f6abd15
+0x3f7f146a
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_5.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_5.txt
new file mode 100644
index 0000000..4015fee
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_5.txt
@@ -0,0 +1,8 @@
+0x3fbe28e7
+0x3f6abd15
+0x3f7f146a
+0x402f867b
+0x3f438099
+0xc0206256
+0xbf56664c
+0x3fea18b0
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_6.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_6.txt
new file mode 100644
index 0000000..16eef83
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_6.txt
@@ -0,0 +1,9 @@
+0x3fbe28e7
+0x3f6abd15
+0x3f7f146a
+0x402f867b
+0x3f438099
+0xc0206256
+0xbf56664c
+0x3fea18b0
+0x3dc1f900
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_7.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_7.txt
new file mode 100644
index 0000000..8ccbef8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_7.txt
@@ -0,0 +1,3 @@
+0xbec53d86
+0xbe3edddf
+0xbe1fc20a
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_8.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_8.txt
new file mode 100644
index 0000000..f7013a7
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_8.txt
@@ -0,0 +1,8 @@
+0xbec53d86
+0xbe3edddf
+0xbe1fc20a
+0xbf8559d7
+0xbdce9786
+0xbfaa0151
+0x3ef01749
+0xbeb10ba9
diff --git a/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_9.txt b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_9.txt
new file mode 100644
index 0000000..0ad6b6b
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/DSP/BasicMaths/BasicMathsF32/Output_9.txt
@@ -0,0 +1,9 @@
+0xbec53d86
+0xbe3edddf
+0xbe1fc20a
+0xbf8559d7
+0xbdce9786
+0xbfaa0151
+0x3ef01749
+0xbeb10ba9
+0x3e18a694
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output10_11.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output10_11.txt
new file mode 100644
index 0000000..c075170
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output10_11.txt
@@ -0,0 +1,8 @@
+0x0000006b
+0x00000031
+0x00000016
+0x0000007f
+0x00000030
+0x0000003a
+0xffffff80
+0x00000008
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output11_12.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output11_12.txt
new file mode 100644
index 0000000..58ad50e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output11_12.txt
@@ -0,0 +1,36 @@
+0xffffff80
+0xffffff97
+0xffffff80
+0xffffff80
+0xfffffff1
+0xffffffd7
+0x0000007f
+0x00000067
+0x0000000b
+0xfffffff3
+0x0000007f
+0x0000007f
+0xfffffff0
+0xffffffd4
+0x0000007f
+0x0000007f
+0xffffffbc
+0xffffffaf
+0x00000064
+0xffffffc9
+0x00000018
+0x00000004
+0x00000046
+0x0000007f
+0x00000012
+0x00000018
+0xffffff80
+0x00000047
+0x00000073
+0xffffff80
+0x0000007f
+0x0000007f
+0x00000031
+0x0000004f
+0x0000007f
+0x0000007f
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output12_13.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output12_13.txt
new file mode 100644
index 0000000..f43af7e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output12_13.txt
@@ -0,0 +1,40 @@
+0xffffff80
+0xffffff80
+0xffffff80
+0xffffff80
+0xffffff80
+0xffffffe3
+0xffffffaf
+0x0000007f
+0x0000007f
+0x00000037
+0x00000003
+0xffffffbf
+0x0000007f
+0x0000007f
+0x00000057
+0xffffffe1
+0xffffffa9
+0x0000007f
+0x0000007f
+0x00000025
+0xfffffff1
+0xffffffd7
+0x00000051
+0xffffff80
+0x00000003
+0x00000025
+0x00000031
+0xffffff80
+0x0000007f
+0xffffff9d
+0x0000007f
+0xffffff80
+0x0000007f
+0x0000007f
+0x00000073
+0x00000063
+0x0000007f
+0x0000007f
+0x0000007f
+0x0000005b
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output13_14.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output13_14.txt
new file mode 100644
index 0000000..2cda64c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output13_14.txt
@@ -0,0 +1,12 @@
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
+0x00000006
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output14_15.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output14_15.txt
new file mode 100644
index 0000000..84f6621
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output14_15.txt
@@ -0,0 +1,32 @@
+0xffffffee
+0xffffffd5
+0x0000007f
+0x00000007
+0x00000004
+0x00000009
+0xffffffef
+0x0000000e
+0xfffffffb
+0xffffffee
+0xffffffd8
+0x0000000f
+0xffffffee
+0xffffffd5
+0x0000007f
+0x00000007
+0xfffffffb
+0xffffffee
+0xffffffd8
+0x0000000f
+0xfffffff9
+0xffffffeb
+0x00000029
+0xfffffff1
+0x0000002e
+0x0000004d
+0x0000007f
+0x0000007f
+0x0000006c
+0xffffff80
+0x0000007f
+0x0000007f
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output19_2.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output19_2.txt
new file mode 100644
index 0000000..0d14a90
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output19_2.txt
@@ -0,0 +1,9 @@
+0x00000067
+0x00000066
+0xffffffaf
+0xffffff80
+0xffffff84
+0x0000007f
+0xffffff80
+0xffffff80
+0x0000007f
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output1_1.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output1_1.txt
new file mode 100644
index 0000000..733954a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output1_1.txt
@@ -0,0 +1,4 @@
+0x00000039
+0x0000003a
+0x0000003b
+0x0000003c
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output2_3.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output2_3.txt
new file mode 100644
index 0000000..0668ca0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output2_3.txt
@@ -0,0 +1,4 @@
+0x00000019
+0xffffffff
+0xffffffff
+0x0000007f
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output3_4.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output3_4.txt
new file mode 100644
index 0000000..ee889e3
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output3_4.txt
@@ -0,0 +1 @@
+0xffffffa8
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output4_5.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output4_5.txt
new file mode 100644
index 0000000..8477543
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output4_5.txt
@@ -0,0 +1,8 @@
+0x00000067
+0x00000066
+0xffffffaf
+0xffffff80
+0xffffff84
+0x0000007f
+0xffffff80
+0xffffff80
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output5_6.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output5_6.txt
new file mode 100644
index 0000000..32a01f6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output5_6.txt
@@ -0,0 +1,9 @@
+0x00000052
+0x0000003a
+0xfffffff8
+0x00000052
+0x00000052
+0x00000022
+0x00000024
+0x0000007f
+0x00000046
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output6_7.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output6_7.txt
new file mode 100644
index 0000000..c075170
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output6_7.txt
@@ -0,0 +1,8 @@
+0x0000006b
+0x00000031
+0x00000016
+0x0000007f
+0x00000030
+0x0000003a
+0xffffff80
+0x00000008
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output7_8.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output7_8.txt
new file mode 100644
index 0000000..16dcbb5
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output7_8.txt
@@ -0,0 +1,4 @@
+0x00000017
+0x00000039
+0x00000027
+0x00000027
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output8_9.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output8_9.txt
new file mode 100644
index 0000000..32a01f6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output8_9.txt
@@ -0,0 +1,9 @@
+0x00000052
+0x0000003a
+0xfffffff8
+0x00000052
+0x00000052
+0x00000022
+0x00000024
+0x0000007f
+0x00000046
diff --git a/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output9_10.txt b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output9_10.txt
new file mode 100644
index 0000000..16dcbb5
--- /dev/null
+++ b/CMSIS/DSP/Testing/Output/NN/FullyConnected/Output9_10.txt
@@ -0,0 +1,4 @@
+0x00000017
+0x00000039
+0x00000027
+0x00000027
diff --git a/CMSIS/DSP/Testing/Parameters/DSP/BasicMaths/BasicMathsF32/Params1.txt b/CMSIS/DSP/Testing/Parameters/DSP/BasicMaths/BasicMathsF32/Params1.txt
new file mode 100644
index 0000000..422f937
--- /dev/null
+++ b/CMSIS/DSP/Testing/Parameters/DSP/BasicMaths/BasicMathsF32/Params1.txt
@@ -0,0 +1,82 @@
+81
+1
+1
+1
+1
+1
+3
+1
+1
+5
+1
+3
+1
+1
+3
+3
+1
+3
+5
+1
+5
+1
+1
+5
+3
+1
+5
+5
+3
+1
+1
+3
+1
+3
+3
+1
+5
+3
+3
+1
+3
+3
+3
+3
+3
+5
+3
+5
+1
+3
+5
+3
+3
+5
+5
+5
+1
+1
+5
+1
+3
+5
+1
+5
+5
+3
+1
+5
+3
+3
+5
+3
+5
+5
+5
+1
+5
+5
+3
+5
+5
+5
diff --git a/CMSIS/DSP/Testing/PatternGeneration/BasicMaths.py b/CMSIS/DSP/Testing/PatternGeneration/BasicMaths.py
new file mode 100644
index 0000000..a178c1b
--- /dev/null
+++ b/CMSIS/DSP/Testing/PatternGeneration/BasicMaths.py
@@ -0,0 +1,310 @@
+import os.path
+import numpy as np
+import struct
+import itertools
+
+
+def createMissingDir(destPath):
+ theDir=os.path.normpath(destPath)
+ if not os.path.exists(theDir):
+ os.makedirs(theDir)
+
+def float_to_hex(f):
+ """ Convert and x86 float to an ARM unsigned long int.
+
+ Args:
+ f (float): value to be converted
+ Raises:
+ Nothing
+ Returns:
+ str : representation of the hex value
+ """
+ return hex(struct.unpack('<I', struct.pack('<f', f))[0])
+
+def to_q31(v):
+ r = int(round(v * 2**31))
+ if (r > 0x07FFFFFFF):
+ r = 0x07FFFFFFF
+ if (r < -0x080000000):
+ r = -0x080000000
+ return hex(struct.unpack('<I', struct.pack('<i', r))[0])
+
+def to_q15(v):
+ r = int(round(v * 2**15))
+ if (r > 0x07FFF):
+ r = 0x07FFF
+ if (r < -0x08000):
+ r = -0x08000
+ return hex(struct.unpack('<H', struct.pack('<h', r))[0])
+
+def to_q7(v):
+ r = int(round(v * 2**7))
+ if (r > 0x07F):
+ r = 0x07F
+ if (r < -0x080):
+ r = -0x080
+ return hex(struct.unpack('<B', struct.pack('<b', r))[0])
+
+class Config:
+ def __init__(self,patternDir,paramDir,ext):
+ self._patternDir = "%s%s" % (patternDir,ext.upper())
+ self._paramDir = "%s%s" % (paramDir,ext.upper())
+ self._ext = ext
+
+ createMissingDir(self._patternDir)
+ createMissingDir(self._paramDir)
+
+
+ def inputP(self,i):
+ """ Path to a reference pattern from the ID
+
+ Args:
+ i (int): ID to the reference pattern
+ Raises:
+ Nothing
+ Returns:
+ str : path to the file where to generate the pattern data
+ """
+ return(os.path.join(self._patternDir,"Input%d_%s.txt" % (i,self._ext)))
+
+ def refP(self,i):
+ """ Path to a reference pattern from the ID
+
+ Args:
+ i (int): ID to the reference pattern
+ Raises:
+ Nothing
+ Returns:
+ str : path to the file where to generate the pattern data
+ """
+ return(os.path.join(self._patternDir,"Reference%d_%s.txt" % (i,self._ext)))
+
+ def paramP(self,i):
+ """ Path to a parameters from the ID
+
+ Args:
+ i (int): ID to the params
+ Raises:
+ Nothing
+ Returns:
+ str : path to the file where to generate the pattern data
+ """
+ return(os.path.join(self._paramDir,"Params%d.txt" % i))
+
+ def _writeVectorF32(self,i,data):
+ """ Write pattern data
+
+ The format is recognized by the text framework script.
+ First line is the sample width (B,H or W for 8,16 or 32 bits)
+ Second line is number of samples
+ Other lines are hexadecimal representation of the samples in format
+ which can be read on big endian ARM.
+
+ Args:
+ j (int): ID of pattern file
+ data (array): Vector containing the data
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ with open(i,"w") as f:
+ # Write sample dimension nb sample header
+ #np.savetxt(i, data, newline="\n", header="W\n%d" % len(data),comments ="" )
+ f.write("W\n%d\n" % len(data))
+ for v in data:
+ f.write("// %f\n" % v)
+ f.write("%s\n" % float_to_hex(v))
+
+ def _writeVectorQ31(self,i,data):
+ """ Write pattern data
+
+ The format is recognized by the text framework script.
+ First line is the sample width (B,H or W for 8,16 or 32 bits)
+ Second line is number of samples
+ Other lines are hexadecimal representation of the samples in format
+ which can be read on big endian ARM.
+
+ Args:
+ j (int): ID of pattern file
+ data (array): Vector containing the data
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ with open(i,"w") as f:
+ # Write sample dimension nb sample header
+ #np.savetxt(i, data, newline="\n", header="W\n%d" % len(data),comments ="" )
+ f.write("W\n%d\n" % len(data))
+ for v in data:
+ f.write("// %f\n" % v)
+ f.write("%s\n" % to_q31(v))
+
+ def _writeVectorQ15(self,i,data):
+ """ Write pattern data
+
+ The format is recognized by the text framework script.
+ First line is the sample width (B,H or W for 8,16 or 32 bits)
+ Second line is number of samples
+ Other lines are hexadecimal representation of the samples in format
+ which can be read on big endian ARM.
+
+ Args:
+ j (int): ID of pattern file
+ data (array): Vector containing the data
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ with open(i,"w") as f:
+ # Write sample dimension nb sample header
+ #np.savetxt(i, data, newline="\n", header="W\n%d" % len(data),comments ="" )
+ f.write("H\n%d\n" % len(data))
+ for v in data:
+ f.write("// %f\n" % v)
+ f.write("%s\n" % to_q15(v))
+
+ def _writeVectorQ7(self,i,data):
+ """ Write pattern data
+
+ The format is recognized by the text framework script.
+ First line is the sample width (B,H or W for 8,16 or 32 bits)
+ Second line is number of samples
+ Other lines are hexadecimal representation of the samples in format
+ which can be read on big endian ARM.
+
+ Args:
+ j (int): ID of pattern file
+ data (array): Vector containing the data
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ with open(i,"w") as f:
+ # Write sample dimension nb sample header
+ #np.savetxt(i, data, newline="\n", header="W\n%d" % len(data),comments ="" )
+ f.write("B\n%d\n" % len(data))
+ for v in data:
+ f.write("// %f\n" % v)
+ f.write("%s\n" % to_q7(v))
+
+ def writeVector(self,j,data):
+ if (self._ext == "f32"):
+ self._writeVectorF32(self.refP(j),data)
+ if (self._ext == "q31"):
+ self._writeVectorQ31(self.refP(j),data)
+ if (self._ext == "q15"):
+ self._writeVectorQ15(self.refP(j),data)
+ if (self._ext == "q7"):
+ self._writeVectorQ7(self.refP(j),data)
+
+ def writeInput(self,j,data):
+ if (self._ext == "f32"):
+ self._writeVectorF32(self.inputP(j),data)
+ if (self._ext == "q31"):
+ self._writeVectorQ31(self.inputP(j),data)
+ if (self._ext == "q15"):
+ self._writeVectorQ15(self.inputP(j),data)
+ if (self._ext == "q7"):
+ self._writeVectorQ7(self.inputP(j),data)
+
+ def writeParam(self,j,data):
+ """ Write pattern data
+
+ The format is recognized by the text framework script.
+ First line is the sample width (B,H or W for 8,16 or 32 bits)
+ Second line is number of samples
+ Other lines are hexadecimal representation of the samples in format
+ which can be read on big endian ARM.
+
+ Args:
+ j (int): ID of parameter file
+ data (array): Vector containing the data
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ i=self.paramP(j)
+ with open(i,"w") as f:
+ # Write sample dimension nb sample header
+ #np.savetxt(i, data, newline="\n", header="W\n%d" % len(data),comments ="" )
+ f.write("%d\n" % len(data))
+ for v in data:
+ f.write("%d\n" % v)
+
+
+
+
+
+def writeTests(config):
+ NBSAMPLES=256
+
+ data1=np.random.randn(NBSAMPLES)
+ data2=np.random.randn(NBSAMPLES)
+ data3=np.random.randn(1)
+
+ data1 = data1/max(data1)
+ data2 = data1/max(data2)
+
+ config.writeInput(1, data1)
+ config.writeInput(2, data2)
+
+ ref = data1 + data2
+ config.writeVector(1, ref)
+
+ ref = data1 - data2
+ config.writeVector(2, ref)
+
+ ref = data1 * data2
+ config.writeVector(3, ref)
+
+ ref = -data1
+ config.writeVector(4, ref)
+
+ ref = data1 + 0.5
+ config.writeVector(5, ref)
+
+ ref = data1 * 0.5
+ config.writeVector(6, ref)
+
+ nb = 3
+ ref = np.array([np.dot(data1[0:nb] ,data2[0:nb])])
+ config.writeVector(7, ref)
+
+ nb = 8
+ ref = np.array([np.dot(data1[0:nb] ,data2[0:nb])])
+ config.writeVector(8, ref)
+
+ nb = 9
+ ref = np.array([np.dot(data1[0:nb] ,data2[0:nb])])
+ config.writeVector(9, ref)
+
+ ref = abs(data1)
+ config.writeVector(10, ref)
+
+
+PATTERNDIR = os.path.join("Patterns","DSP","BasicMaths","BasicMaths")
+PARAMDIR = os.path.join("Parameters","DSP","BasicMaths","BasicMaths")
+
+configf32=Config(PATTERNDIR,PARAMDIR,"f32")
+configq31=Config(PATTERNDIR,PARAMDIR,"q31")
+configq15=Config(PATTERNDIR,PARAMDIR,"q15")
+configq7=Config(PATTERNDIR,PARAMDIR,"q7")
+
+
+
+writeTests(configf32)
+writeTests(configq31)
+writeTests(configq15)
+writeTests(configq7)
+
+# Params just as example
+someLists=[[1,3,5],[1,3,5],[1,3,5]]
+
+r=np.array([element for element in itertools.product(*someLists)])
+configf32.writeParam(1, r.reshape(81))
+
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Input1_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Input1_f32.txt
new file mode 100644
index 0000000..59aac4c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Input1_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// -0.348477
+0xbeb26b86
+// -0.248689
+0xbe7ea83c
+// -0.363829
+0xbeba47c0
+// -0.052204
+0xbd55d3c0
+// -0.100150
+0xbdcd1b90
+// -0.267378
+0xbe88e5c8
+// -0.204659
+0xbe51920d
+// 0.100857
+0x3dce8dea
+// -0.847288
+0xbf58e7e4
+// 0.498336
+0x3eff25f3
+// 0.325358
+0x3ea69554
+// -0.386737
+0xbec60265
+// 0.608763
+0x3f1bd7e2
+// 0.018824
+0x3c9a34ad
+// 0.369402
+0x3ebd2245
+// -0.291258
+0xbe951fbe
+// 0.414647
+0x3ed44ca8
+// -0.378878
+0xbec1fc55
+// -0.805492
+0xbf4e34b8
+// -0.180801
+0xbe3923fe
+// -0.106116
+0xbdd95347
+// -0.233471
+0xbe6f1319
+// -0.533009
+0xbf087349
+// 0.184623
+0x3e3d0ddf
+// 0.039105
+0x3d202cb6
+// 0.066879
+0x3d88f7a0
+// -0.210726
+0xbe57c8aa
+// 0.163270
+0x3e27302b
+// -0.473700
+0xbef288c0
+// -0.103153
+0xbdd341ca
+// -0.578145
+0xbf14014c
+// 0.075199
+0x3d9a01b2
+// -0.115634
+0xbdecd1bc
+// -0.239987
+0xbe75bf2c
+// 0.138901
+0x3e0e3c07
+// 0.140069
+0x3e0f6e43
+// 0.189585
+0x3e42229f
+// 0.113041
+0x3de78212
+// 0.369250
+0x3ebd0e4d
+// -0.114005
+0xbde97b53
+// 0.969073
+0x3f781529
+// 0.850961
+0x3f59d89a
+// 0.305493
+0x3e9c698d
+// 0.224725
+0x3e661e6f
+// 0.662241
+0x3f2988a0
+// 0.054692
+0x3d6004ea
+// 0.403598
+0x3ecea459
+// -0.711021
+0xbf360573
+// -0.161592
+0xbe25787e
+// 0.435038
+0x3edebd42
+// -0.336043
+0xbeac0dc5
+// -0.192108
+0xbe44b7f1
+// 0.155452
+0x3e1f2ecb
+// -0.206741
+0xbe53b3ec
+// 0.069222
+0x3d8dc40d
+// 0.017371
+0x3c8e4db0
+// -0.305563
+0xbe9c72b6
+// 0.031573
+0x3d015276
+// 0.025699
+0x3cd286b0
+// -0.065209
+0xbd858c35
+// 0.129983
+0x3e051a34
+// -0.276646
+0xbe8da498
+// 0.364221
+0x3eba7b2d
+// 0.130192
+0x3e0550f4
+// -0.626355
+0xbf2058ce
+// 0.028263
+0x3ce7878a
+// 0.386780
+0x3ec607fe
+// 0.200673
+0x3e4d7d1a
+// -0.241236
+0xbe770690
+// 0.116365
+0x3dee50c8
+// -0.251196
+0xbe809cc7
+// -0.249870
+0xbe7fddf3
+// 0.143543
+0x3e12fcce
+// 0.069695
+0x3d8ebc07
+// 0.297336
+0x3e983c6b
+// 0.423817
+0x3ed8fe8c
+// 0.391323
+0x3ec85b87
+// -0.278931
+0xbe8ed01a
+// -0.069013
+0xbd8d567c
+// -0.451299
+0xbee710a0
+// 0.197164
+0x3e49e556
+// 0.482288
+0x3ef6ee73
+// 0.242107
+0x3e77eb02
+// -0.072697
+0xbd94e1ec
+// 0.798648
+0x3f4c7432
+// 0.543113
+0x3f0b097c
+// 0.107982
+0x3ddd25c9
+// 1.000000
+0x3f800000
+// -0.109692
+0xbde0a634
+// 0.291096
+0x3e950a8b
+// -0.430860
+0xbedc99a4
+// -0.086814
+0xbdb1cbb9
+// 0.120664
+0x3df71e9e
+// -0.627791
+0xbf20b6e8
+// 0.862323
+0x3f5cc138
+// 0.934455
+0x3f6f3879
+// 0.353039
+0x3eb4c185
+// 0.549296
+0x3f0c9ea7
+// 0.037497
+0x3d1996f9
+// 0.111889
+0x3de52609
+// 0.529228
+0x3f077b81
+// -0.396404
+0xbecaf572
+// 0.100882
+0x3dce9afe
+// -0.045201
+0xbd392436
+// -0.271022
+0xbe8ac35d
+// -0.343520
+0xbeafe1d9
+// -0.030739
+0xbcfbd0ca
+// 0.321874
+0x3ea4cc9e
+// -0.018118
+0xbc946bb6
+// 0.347555
+0x3eb1f2c3
+// -0.106094
+0xbdd947f0
+// -0.727333
+0xbf3a3279
+// -0.222617
+0xbe63f5ce
+// 0.460933
+0x3eebff75
+// 0.218002
+0x3e5f3be2
+// 0.677905
+0x3f2d8b35
+// -0.011222
+0xbc37dcf2
+// -0.542176
+0xbf0acc14
+// -0.062086
+0xbd7e4e49
+// -0.074153
+0xbd97dd84
+// 0.067282
+0x3d89cb1b
+// -0.042517
+0xbd2e25e5
+// 0.025044
+0x3ccd29b6
+// 0.155281
+0x3e1f0219
+// 0.095688
+0x3dc3f7e4
+// -0.077013
+0xbd9db933
+// -0.092422
+0xbdbd47f1
+// -0.062304
+0xbd7f3232
+// -0.132095
+0xbe0743fc
+// 0.294033
+0x3e968b7f
+// 0.257349
+0x3e83c346
+// 0.116157
+0x3dede37f
+// 0.221549
+0x3e62ddc4
+// 0.020398
+0x3ca71965
+// 0.163771
+0x3e27b37a
+// 0.152217
+0x3e1bdeaa
+// -0.074167
+0xbd97e4b8
+// 0.204934
+0x3e51da4b
+// -0.579764
+0xbf146b69
+// 0.111895
+0x3de52941
+// 0.091055
+0x3dba7b05
+// -0.267588
+0xbe890155
+// -0.663823
+0xbf29f04f
+// -0.070175
+0xbd8fb7f4
+// 0.045881
+0x3d3bee0c
+// 0.287299
+0x3e9318e3
+// 0.542468
+0x3f0adf34
+// 0.153295
+0x3e1cf951
+// -0.497390
+0xbefea9dd
+// 0.607424
+0x3f1b8020
+// -0.099659
+0xbdcc1a0d
+// -0.407864
+0xbed0d37d
+// -0.035238
+0xbd1055e5
+// -0.070195
+0xbd8fc26c
+// -0.049354
+0xbd4a274b
+// -0.789228
+0xbf4a0ad8
+// 0.081459
+0x3da6d3f3
+// 0.031726
+0x3d01f31a
+// -0.176532
+0xbe34c4db
+// 0.289525
+0x3e943ca1
+// 0.503401
+0x3f00dee1
+// 0.417143
+0x3ed593ce
+// -0.314195
+0xbea0de28
+// 0.542166
+0x3f0acb64
+// -0.646517
+0xbf25821b
+// 0.169927
+0x3e2e0163
+// 0.086652
+0x3db17673
+// -0.147000
+0xbe16872b
+// -0.079428
+0xbda2ab25
+// 0.094560
+0x3dc1a8c0
+// -0.201896
+0xbe4ebdd3
+// -0.218997
+0xbe6040b7
+// 0.098191
+0x3dc91865
+// -0.215926
+0xbe5d1ba1
+// 0.073796
+0x3d972288
+// 0.139655
+0x3e0f01ac
+// -0.165786
+0xbe29c3ae
+// 0.155796
+0x3e1f88f4
+// 0.581589
+0x3f14e309
+// -0.017689
+0xbc90e912
+// 0.326157
+0x3ea6fe18
+// 0.132980
+0x3e082bf5
+// 0.314337
+0x3ea0f0d5
+// -0.615182
+0xbf1d7c95
+// -0.028011
+0xbce57720
+// -0.096921
+0xbdc67e8d
+// -0.149262
+0xbe18d836
+// -0.155583
+0xbe1f512b
+// 0.516202
+0x3f0425ca
+// 0.378607
+0x3ec1d8b6
+// 0.154422
+0x3e1e20c1
+// 0.127551
+0x3e029cad
+// 0.436041
+0x3edf40c5
+// -0.067543
+0xbd8a5407
+// -0.567503
+0xbf1147e7
+// -0.285991
+0xbe926d63
+// -0.664673
+0xbf2a280a
+// -0.446375
+0xbee48b41
+// -0.875069
+0xbf600480
+// -0.021947
+0xbcb3cb1b
+// 0.138433
+0x3e0dc141
+// 0.518680
+0x3f04c82f
+// 0.245309
+0x3e7b325b
+// 0.359801
+0x3eb837df
+// -0.015161
+0xbc786429
+// -0.120053
+0xbdf5de3f
+// -0.444322
+0xbee37e34
+// 0.263440
+0x3e86e19d
+// 0.005080
+0x3ba673bb
+// -0.270893
+0xbe8ab288
+// -0.030998
+0xbcfdef96
+// 0.237708
+0x3e7369d5
+// 0.596678
+0x3f18bfeb
+// -0.644389
+0xbf24f6a7
+// -0.054459
+0xbd5f100b
+// 0.373987
+0x3ebf7b49
+// 0.067694
+0x3d8aa2f6
+// -0.215129
+0xbe5c4adc
+// 0.263595
+0x3e86f5fb
+// -0.701604
+0xbf339c4e
+// 0.219575
+0x3e60d83c
+// -0.143088
+0xbe1285a1
+// 0.167805
+0x3e2bd515
+// 0.653009
+0x3f272b97
+// 0.148074
+0x3e17a0b7
+// 0.561109
+0x3f0fa4cf
+// -0.188642
+0xbe412b60
+// -0.295106
+0xbe97181b
+// 0.105445
+0x3dd7f3a6
+// -0.494503
+0xbefd2f7d
+// -0.353917
+0xbeb534a9
+// 0.173736
+0x3e31e7d6
+// -0.323622
+0xbea5b1be
+// 0.169056
+0x3e2d1d1c
+// 0.156148
+0x3e1fe559
+// 0.031120
+0x3cfef024
+// 0.398940
+0x3ecc41ec
+// -0.107956
+0xbddd183e
+// 0.369337
+0x3ebd19bd
+// -0.225294
+0xbe66b369
+// -0.152173
+0xbe1bd327
+// -0.032652
+0xbd05be51
+// -0.341697
+0xbeaef2f5
+// 0.515467
+0x3f03f59e
+// -0.114661
+0xbdead396
+// -0.244936
+0xbe7ad083
+// -0.559131
+0xbf0f2331
+// -0.154736
+0xbe1e7317
+// -0.124121
+0xbdfe3303
+// 0.022925
+0x3cbbcc3c
+// 0.077096
+0x3d9de466
+// -0.174105
+0xbe32487a
+// 0.183695
+0x3e3c1a7c
+// 0.139556
+0x3e0ee7b8
+// -0.135129
+0xbe0a5f63
+// -0.346630
+0xbeb1798a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Input2_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Input2_f32.txt
new file mode 100644
index 0000000..fb295f1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Input2_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// -0.134747
+0xbe09fb33
+// -0.096162
+0xbdc4f076
+// -0.140684
+0xbe100f5b
+// -0.020186
+0xbca55d06
+// -0.038726
+0xbd1e9ec3
+// -0.103389
+0xbdd3bd5d
+// -0.079136
+0xbda2124e
+// 0.038999
+0x3d1fbd2c
+// -0.327626
+0xbea7be89
+// 0.192694
+0x3e4551af
+// 0.125808
+0x3e00d3cc
+// -0.149542
+0xbe192174
+// 0.235394
+0x3e710b04
+// 0.007279
+0x3bee82a1
+// 0.142839
+0x3e12444d
+// -0.112622
+0xbde6a679
+// 0.160334
+0x3e242e93
+// -0.146503
+0xbe1604da
+// -0.311464
+0xbe9f7832
+// -0.069911
+0xbd8f2dba
+// -0.041032
+0xbd281194
+// -0.090278
+0xbdb8e376
+// -0.206101
+0xbe530c45
+// 0.071389
+0x3d923487
+// 0.015121
+0x3c77be0b
+// 0.025860
+0x3cd3d8f6
+// -0.081483
+0xbda6e068
+// 0.063132
+0x3d814b8a
+// -0.183168
+0xbe3b9061
+// -0.039887
+0xbd236031
+// -0.223554
+0xbe64eb6e
+// 0.029077
+0x3cee33c7
+// -0.044713
+0xbd3724f4
+// -0.092797
+0xbdbe0c67
+// 0.053710
+0x3d5bfe88
+// 0.054161
+0x3d5dd830
+// 0.073308
+0x3d962277
+// 0.043710
+0x3d330975
+// 0.142780
+0x3e1234dc
+// -0.044083
+0xbd349032
+// 0.374717
+0x3ebfdadb
+// 0.329046
+0x3ea878b0
+// 0.118127
+0x3df1ec52
+// 0.086896
+0x3db1f66d
+// 0.256072
+0x3e831be7
+// 0.021148
+0x3cad3ed3
+// 0.156061
+0x3e1fce86
+// -0.274934
+0xbe8cc42c
+// -0.062484
+0xbd7fef09
+// 0.168218
+0x3e2c416e
+// -0.129939
+0xbe050ed3
+// -0.074283
+0xbd9821e5
+// 0.060109
+0x3d76354e
+// -0.079942
+0xbda3b874
+// 0.026766
+0x3cdb44f8
+// 0.006717
+0x3bdc19d9
+// -0.118154
+0xbdf1fa7e
+// 0.012208
+0x3c4805d0
+// 0.009937
+0x3c22cf7e
+// -0.025215
+0xbcce8ef3
+// 0.050261
+0x3d4dde9e
+// -0.106972
+0xbddb1450
+// 0.140835
+0x3e103720
+// 0.050342
+0x3d4e334d
+// -0.242196
+0xbe78023e
+// 0.010929
+0x3c330db0
+// 0.149558
+0x3e1925c8
+// 0.077595
+0x3d9eea31
+// -0.093280
+0xbdbf0997
+// 0.044995
+0x3d384d2f
+// -0.097131
+0xbdc6eccd
+// -0.096619
+0xbdc5dffa
+// 0.055504
+0x3d635887
+// 0.026949
+0x3cdcc483
+// 0.114972
+0x3deb76b1
+// 0.163880
+0x3e27d00e
+// 0.151315
+0x3e1af257
+// -0.107856
+0xbddce390
+// -0.026685
+0xbcda9b80
+// -0.174506
+0xbe32b1b9
+// 0.076238
+0x3d9c22e4
+// 0.186489
+0x3e3ef6f0
+// 0.093617
+0x3dbfba41
+// -0.028110
+0xbce646db
+// 0.308817
+0x3e9e1d54
+// 0.210009
+0x3e570c7f
+// 0.041754
+0x3d2b0650
+// 0.386675
+0x3ec5fa50
+// -0.042415
+0xbd2dbb8f
+// 0.112560
+0x3de685b0
+// -0.166603
+0xbe2a99ee
+// -0.033569
+0xbd097f9e
+// 0.046658
+0x3d3f1c30
+// -0.242751
+0xbe7893cb
+// 0.333439
+0x3eaab88a
+// 0.361331
+0x3eb9005d
+// 0.136511
+0x3e0bc9a9
+// 0.212399
+0x3e597f2b
+// 0.014499
+0x3c6d8eb6
+// 0.043265
+0x3d313653
+// 0.204640
+0x3e518d06
+// -0.153280
+0xbe1cf554
+// 0.039008
+0x3d1fc74a
+// -0.017478
+0xbc8f2de4
+// -0.104797
+0xbdd6a009
+// -0.132831
+0xbe0804c5
+// -0.011886
+0xbc42bde4
+// 0.124461
+0x3dfee532
+// -0.007006
+0xbbe59005
+// 0.134391
+0x3e099dcf
+// -0.041024
+0xbd2808cf
+// -0.281242
+0xbe8ffee7
+// -0.086081
+0xbdb04b0d
+// 0.178232
+0x3e368256
+// 0.084296
+0x3daca35b
+// 0.262129
+0x3e8635d0
+// -0.004339
+0xbb8e30cd
+// -0.209646
+0xbe56ad83
+// -0.024007
+0xbcc4aae6
+// -0.028673
+0xbceae3e9
+// 0.026016
+0x3cd5200e
+// -0.016440
+0xbc86ad70
+// 0.009684
+0x3c1ea9b4
+// 0.060044
+0x3d75f02e
+// 0.037000
+0x3d178d60
+// -0.029779
+0xbcf3f379
+// -0.035737
+0xbd126170
+// -0.024091
+0xbcc55b27
+// -0.051078
+0xbd513727
+// 0.113695
+0x3de8d919
+// 0.099511
+0x3dcbcc36
+// 0.044915
+0x3d37f8ab
+// 0.085668
+0x3daf727b
+// 0.007887
+0x3c0139ee
+// 0.063326
+0x3d81b116
+// 0.058858
+0x3d711581
+// -0.028678
+0xbceaef0c
+// 0.079243
+0x3da24a2d
+// -0.224180
+0xbe658f8e
+// 0.043267
+0x3d3138d1
+// 0.035209
+0x3d103701
+// -0.103470
+0xbdd3e7f9
+// -0.256684
+0xbe836c17
+// -0.027135
+0xbcde4a2b
+// 0.017741
+0x3c9155f0
+// 0.111092
+0x3de383f5
+// 0.209759
+0x3e56cb18
+// 0.059275
+0x3d72cab0
+// -0.192328
+0xbe44f1b9
+// 0.234876
+0x3e708349
+// -0.038536
+0xbd1dd79d
+// -0.157711
+0xbe217eef
+// -0.013626
+0xbc5f3e75
+// -0.027143
+0xbcde5a5c
+// -0.019084
+0xbc9c55e6
+// -0.305175
+0xbe9c3fe6
+// 0.031498
+0x3d010439
+// 0.012268
+0x3c48fe45
+// -0.068261
+0xbd8bcc3d
+// 0.111952
+0x3de54733
+// 0.194653
+0x3e47530a
+// 0.161299
+0x3e252b92
+// -0.121491
+0xbdf8d080
+// 0.209642
+0x3e56ac74
+// -0.249992
+0xbe7ffde8
+// 0.065707
+0x3d869135
+// 0.033506
+0x3d093dac
+// -0.056841
+0xbd68d266
+// -0.030713
+0xbcfb9982
+// 0.036564
+0x3d15c437
+// -0.078068
+0xbd9fe239
+// -0.084681
+0xbdad6d12
+// 0.037968
+0x3d1b8466
+// -0.083493
+0xbdaafe75
+// 0.028535
+0x3ce9c2b2
+// 0.054001
+0x3d5d303c
+// -0.064105
+0xbd834993
+// 0.060242
+0x3d76c0c2
+// 0.224886
+0x3e664894
+// -0.006840
+0xbbe02217
+// 0.126117
+0x3e0124d1
+// 0.051420
+0x3d529df1
+// 0.121547
+0x3df8ed62
+// -0.237876
+0xbe7395b7
+// -0.010831
+0xbc317509
+// -0.037477
+0xbd198178
+// -0.057716
+0xbd6c67a8
+// -0.060160
+0xbd766a7a
+// 0.199602
+0x3e4c6495
+// 0.146398
+0x3e15e94e
+// 0.059711
+0x3d7493a4
+// 0.049321
+0x3d4a048e
+// 0.168606
+0x3e2ca722
+// -0.026117
+0xbcd5f3d5
+// -0.219440
+0xbe60b4c4
+// -0.110586
+0xbde27ab3
+// -0.257013
+0xbe839730
+// -0.172602
+0xbe30bea0
+// -0.338367
+0xbead3e81
+// -0.008487
+0xbc0b0b18
+// 0.053528
+0x3d5b40a4
+// 0.200561
+0x3e4d5fc3
+// 0.094855
+0x3dc2435e
+// 0.139126
+0x3e0e771e
+// -0.005862
+0xbbc017f3
+// -0.046421
+0xbd3e246e
+// -0.171808
+0xbe2fee8e
+// 0.101866
+0x3dd09f01
+// 0.001964
+0x3b00b9d0
+// -0.104748
+0xbdd68600
+// -0.011986
+0xbc4461aa
+// 0.091916
+0x3dbc3e73
+// 0.230721
+0x3e6c4216
+// -0.249169
+0xbe7f2636
+// -0.021058
+0xbcac8174
+// 0.144612
+0x3e141519
+// 0.026175
+0x3cd66dec
+// -0.083185
+0xbdaa5d01
+// 0.101926
+0x3dd0be81
+// -0.271293
+0xbe8ae6e7
+// 0.084904
+0x3dade23f
+// -0.055329
+0xbd62a033
+// 0.064886
+0x3d84e2fd
+// 0.252502
+0x3e814800
+// 0.057257
+0x3d6a85de
+// 0.216967
+0x3e5e2c8e
+// -0.072943
+0xbd956341
+// -0.114110
+0xbde9b293
+// 0.040773
+0x3d2701a6
+// -0.191212
+0xbe43cd1b
+// -0.136851
+0xbe0c22b4
+// 0.067179
+0x3d89955c
+// -0.125137
+0xbe0023ca
+// 0.065370
+0x3d85e0ab
+// 0.060379
+0x3d774fab
+// 0.012033
+0x3c452812
+// 0.154260
+0x3e1df672
+// -0.041744
+0xbd2afbd7
+// 0.142814
+0x3e123db5
+// -0.087116
+0xbdb269a3
+// -0.058841
+0xbd7103b3
+// -0.012626
+0xbc4edc73
+// -0.132126
+0xbe074c06
+// 0.199318
+0x3e4c1a13
+// -0.044337
+0xbd359a6e
+// -0.094711
+0xbdc1f7b3
+// -0.216202
+0xbe5d6413
+// -0.059833
+0xbd7512fd
+// -0.047994
+0xbd4495ce
+// 0.008864
+0x3c113bca
+// 0.029811
+0x3cf4364a
+// -0.067322
+0xbd89e018
+// 0.071030
+0x3d91784e
+// 0.053963
+0x3d5d0817
+// -0.052251
+0xbd560567
+// -0.134033
+0xbe09400f
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference10_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference10_f32.txt
new file mode 100644
index 0000000..fc62962
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference10_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.348477
+0x3eb26b86
+// 0.248689
+0x3e7ea83c
+// 0.363829
+0x3eba47c0
+// 0.052204
+0x3d55d3c0
+// 0.100150
+0x3dcd1b90
+// 0.267378
+0x3e88e5c8
+// 0.204659
+0x3e51920d
+// 0.100857
+0x3dce8dea
+// 0.847288
+0x3f58e7e4
+// 0.498336
+0x3eff25f3
+// 0.325358
+0x3ea69554
+// 0.386737
+0x3ec60265
+// 0.608763
+0x3f1bd7e2
+// 0.018824
+0x3c9a34ad
+// 0.369402
+0x3ebd2245
+// 0.291258
+0x3e951fbe
+// 0.414647
+0x3ed44ca8
+// 0.378878
+0x3ec1fc55
+// 0.805492
+0x3f4e34b8
+// 0.180801
+0x3e3923fe
+// 0.106116
+0x3dd95347
+// 0.233471
+0x3e6f1319
+// 0.533009
+0x3f087349
+// 0.184623
+0x3e3d0ddf
+// 0.039105
+0x3d202cb6
+// 0.066879
+0x3d88f7a0
+// 0.210726
+0x3e57c8aa
+// 0.163270
+0x3e27302b
+// 0.473700
+0x3ef288c0
+// 0.103153
+0x3dd341ca
+// 0.578145
+0x3f14014c
+// 0.075199
+0x3d9a01b2
+// 0.115634
+0x3decd1bc
+// 0.239987
+0x3e75bf2c
+// 0.138901
+0x3e0e3c07
+// 0.140069
+0x3e0f6e43
+// 0.189585
+0x3e42229f
+// 0.113041
+0x3de78212
+// 0.369250
+0x3ebd0e4d
+// 0.114005
+0x3de97b53
+// 0.969073
+0x3f781529
+// 0.850961
+0x3f59d89a
+// 0.305493
+0x3e9c698d
+// 0.224725
+0x3e661e6f
+// 0.662241
+0x3f2988a0
+// 0.054692
+0x3d6004ea
+// 0.403598
+0x3ecea459
+// 0.711021
+0x3f360573
+// 0.161592
+0x3e25787e
+// 0.435038
+0x3edebd42
+// 0.336043
+0x3eac0dc5
+// 0.192108
+0x3e44b7f1
+// 0.155452
+0x3e1f2ecb
+// 0.206741
+0x3e53b3ec
+// 0.069222
+0x3d8dc40d
+// 0.017371
+0x3c8e4db0
+// 0.305563
+0x3e9c72b6
+// 0.031573
+0x3d015276
+// 0.025699
+0x3cd286b0
+// 0.065209
+0x3d858c35
+// 0.129983
+0x3e051a34
+// 0.276646
+0x3e8da498
+// 0.364221
+0x3eba7b2d
+// 0.130192
+0x3e0550f4
+// 0.626355
+0x3f2058ce
+// 0.028263
+0x3ce7878a
+// 0.386780
+0x3ec607fe
+// 0.200673
+0x3e4d7d1a
+// 0.241236
+0x3e770690
+// 0.116365
+0x3dee50c8
+// 0.251196
+0x3e809cc7
+// 0.249870
+0x3e7fddf3
+// 0.143543
+0x3e12fcce
+// 0.069695
+0x3d8ebc07
+// 0.297336
+0x3e983c6b
+// 0.423817
+0x3ed8fe8c
+// 0.391323
+0x3ec85b87
+// 0.278931
+0x3e8ed01a
+// 0.069013
+0x3d8d567c
+// 0.451299
+0x3ee710a0
+// 0.197164
+0x3e49e556
+// 0.482288
+0x3ef6ee73
+// 0.242107
+0x3e77eb02
+// 0.072697
+0x3d94e1ec
+// 0.798648
+0x3f4c7432
+// 0.543113
+0x3f0b097c
+// 0.107982
+0x3ddd25c9
+// 1.000000
+0x3f800000
+// 0.109692
+0x3de0a634
+// 0.291096
+0x3e950a8b
+// 0.430860
+0x3edc99a4
+// 0.086814
+0x3db1cbb9
+// 0.120664
+0x3df71e9e
+// 0.627791
+0x3f20b6e8
+// 0.862323
+0x3f5cc138
+// 0.934455
+0x3f6f3879
+// 0.353039
+0x3eb4c185
+// 0.549296
+0x3f0c9ea7
+// 0.037497
+0x3d1996f9
+// 0.111889
+0x3de52609
+// 0.529228
+0x3f077b81
+// 0.396404
+0x3ecaf572
+// 0.100882
+0x3dce9afe
+// 0.045201
+0x3d392436
+// 0.271022
+0x3e8ac35d
+// 0.343520
+0x3eafe1d9
+// 0.030739
+0x3cfbd0ca
+// 0.321874
+0x3ea4cc9e
+// 0.018118
+0x3c946bb6
+// 0.347555
+0x3eb1f2c3
+// 0.106094
+0x3dd947f0
+// 0.727333
+0x3f3a3279
+// 0.222617
+0x3e63f5ce
+// 0.460933
+0x3eebff75
+// 0.218002
+0x3e5f3be2
+// 0.677905
+0x3f2d8b35
+// 0.011222
+0x3c37dcf2
+// 0.542176
+0x3f0acc14
+// 0.062086
+0x3d7e4e49
+// 0.074153
+0x3d97dd84
+// 0.067282
+0x3d89cb1b
+// 0.042517
+0x3d2e25e5
+// 0.025044
+0x3ccd29b6
+// 0.155281
+0x3e1f0219
+// 0.095688
+0x3dc3f7e4
+// 0.077013
+0x3d9db933
+// 0.092422
+0x3dbd47f1
+// 0.062304
+0x3d7f3232
+// 0.132095
+0x3e0743fc
+// 0.294033
+0x3e968b7f
+// 0.257349
+0x3e83c346
+// 0.116157
+0x3dede37f
+// 0.221549
+0x3e62ddc4
+// 0.020398
+0x3ca71965
+// 0.163771
+0x3e27b37a
+// 0.152217
+0x3e1bdeaa
+// 0.074167
+0x3d97e4b8
+// 0.204934
+0x3e51da4b
+// 0.579764
+0x3f146b69
+// 0.111895
+0x3de52941
+// 0.091055
+0x3dba7b05
+// 0.267588
+0x3e890155
+// 0.663823
+0x3f29f04f
+// 0.070175
+0x3d8fb7f4
+// 0.045881
+0x3d3bee0c
+// 0.287299
+0x3e9318e3
+// 0.542468
+0x3f0adf34
+// 0.153295
+0x3e1cf951
+// 0.497390
+0x3efea9dd
+// 0.607424
+0x3f1b8020
+// 0.099659
+0x3dcc1a0d
+// 0.407864
+0x3ed0d37d
+// 0.035238
+0x3d1055e5
+// 0.070195
+0x3d8fc26c
+// 0.049354
+0x3d4a274b
+// 0.789228
+0x3f4a0ad8
+// 0.081459
+0x3da6d3f3
+// 0.031726
+0x3d01f31a
+// 0.176532
+0x3e34c4db
+// 0.289525
+0x3e943ca1
+// 0.503401
+0x3f00dee1
+// 0.417143
+0x3ed593ce
+// 0.314195
+0x3ea0de28
+// 0.542166
+0x3f0acb64
+// 0.646517
+0x3f25821b
+// 0.169927
+0x3e2e0163
+// 0.086652
+0x3db17673
+// 0.147000
+0x3e16872b
+// 0.079428
+0x3da2ab25
+// 0.094560
+0x3dc1a8c0
+// 0.201896
+0x3e4ebdd3
+// 0.218997
+0x3e6040b7
+// 0.098191
+0x3dc91865
+// 0.215926
+0x3e5d1ba1
+// 0.073796
+0x3d972288
+// 0.139655
+0x3e0f01ac
+// 0.165786
+0x3e29c3ae
+// 0.155796
+0x3e1f88f4
+// 0.581589
+0x3f14e309
+// 0.017689
+0x3c90e912
+// 0.326157
+0x3ea6fe18
+// 0.132980
+0x3e082bf5
+// 0.314337
+0x3ea0f0d5
+// 0.615182
+0x3f1d7c95
+// 0.028011
+0x3ce57720
+// 0.096921
+0x3dc67e8d
+// 0.149262
+0x3e18d836
+// 0.155583
+0x3e1f512b
+// 0.516202
+0x3f0425ca
+// 0.378607
+0x3ec1d8b6
+// 0.154422
+0x3e1e20c1
+// 0.127551
+0x3e029cad
+// 0.436041
+0x3edf40c5
+// 0.067543
+0x3d8a5407
+// 0.567503
+0x3f1147e7
+// 0.285991
+0x3e926d63
+// 0.664673
+0x3f2a280a
+// 0.446375
+0x3ee48b41
+// 0.875069
+0x3f600480
+// 0.021947
+0x3cb3cb1b
+// 0.138433
+0x3e0dc141
+// 0.518680
+0x3f04c82f
+// 0.245309
+0x3e7b325b
+// 0.359801
+0x3eb837df
+// 0.015161
+0x3c786429
+// 0.120053
+0x3df5de3f
+// 0.444322
+0x3ee37e34
+// 0.263440
+0x3e86e19d
+// 0.005080
+0x3ba673bb
+// 0.270893
+0x3e8ab288
+// 0.030998
+0x3cfdef96
+// 0.237708
+0x3e7369d5
+// 0.596678
+0x3f18bfeb
+// 0.644389
+0x3f24f6a7
+// 0.054459
+0x3d5f100b
+// 0.373987
+0x3ebf7b49
+// 0.067694
+0x3d8aa2f6
+// 0.215129
+0x3e5c4adc
+// 0.263595
+0x3e86f5fb
+// 0.701604
+0x3f339c4e
+// 0.219575
+0x3e60d83c
+// 0.143088
+0x3e1285a1
+// 0.167805
+0x3e2bd515
+// 0.653009
+0x3f272b97
+// 0.148074
+0x3e17a0b7
+// 0.561109
+0x3f0fa4cf
+// 0.188642
+0x3e412b60
+// 0.295106
+0x3e97181b
+// 0.105445
+0x3dd7f3a6
+// 0.494503
+0x3efd2f7d
+// 0.353917
+0x3eb534a9
+// 0.173736
+0x3e31e7d6
+// 0.323622
+0x3ea5b1be
+// 0.169056
+0x3e2d1d1c
+// 0.156148
+0x3e1fe559
+// 0.031120
+0x3cfef024
+// 0.398940
+0x3ecc41ec
+// 0.107956
+0x3ddd183e
+// 0.369337
+0x3ebd19bd
+// 0.225294
+0x3e66b369
+// 0.152173
+0x3e1bd327
+// 0.032652
+0x3d05be51
+// 0.341697
+0x3eaef2f5
+// 0.515467
+0x3f03f59e
+// 0.114661
+0x3dead396
+// 0.244936
+0x3e7ad083
+// 0.559131
+0x3f0f2331
+// 0.154736
+0x3e1e7317
+// 0.124121
+0x3dfe3303
+// 0.022925
+0x3cbbcc3c
+// 0.077096
+0x3d9de466
+// 0.174105
+0x3e32487a
+// 0.183695
+0x3e3c1a7c
+// 0.139556
+0x3e0ee7b8
+// 0.135129
+0x3e0a5f63
+// 0.346630
+0x3eb1798a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference1_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference1_f32.txt
new file mode 100644
index 0000000..a2baf8f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference1_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// -0.483224
+0xbef76920
+// -0.344850
+0xbeb0903b
+// -0.504512
+0xbf0127b7
+// -0.072390
+0xbd944122
+// -0.138876
+0xbe0e3579
+// -0.370767
+0xbebdd520
+// -0.283795
+0xbe914d9a
+// 0.139855
+0x3e0f3640
+// -1.174914
+0xbf966394
+// 0.691031
+0x3f30e765
+// 0.451166
+0x3ee6ff3a
+// -0.536279
+0xbf094990
+// 0.844156
+0x3f581aa3
+// 0.026103
+0x3cd5d555
+// 0.512241
+0x3f032236
+// -0.403880
+0xbecec95c
+// 0.574981
+0x3f1331f9
+// -0.525381
+0xbf067f61
+// -1.116956
+0xbf8ef869
+// -0.250713
+0xbe805d6e
+// -0.147148
+0xbe16ae08
+// -0.323749
+0xbea5c26a
+// -0.739111
+0xbf3d365b
+// 0.256012
+0x3e831412
+// 0.054226
+0x3d5e1c38
+// 0.092739
+0x3dbdedde
+// -0.292209
+0xbe959c6f
+// 0.226402
+0x3e67d5f0
+// -0.656868
+0xbf282878
+// -0.143039
+0xbe1278f1
+// -0.801699
+0xbf4d3c28
+// 0.104276
+0x3dd58ea4
+// -0.160347
+0xbe24321b
+// -0.332784
+0xbeaa62b0
+// 0.192610
+0x3e453ba9
+// 0.194230
+0x3e46e44f
+// 0.262893
+0x3e8699ed
+// 0.156751
+0x3e208367
+// 0.512030
+0x3f03145e
+// -0.158088
+0xbe21e1b6
+// 1.343789
+0x3fac014b
+// 1.180007
+0x3f970a79
+// 0.423619
+0x3ed8e4a1
+// 0.311621
+0x3e9f8cd3
+// 0.918313
+0x3f6b1693
+// 0.075840
+0x3d9b522a
+// 0.559659
+0x3f0f45ce
+// -0.985955
+0xbf7c6789
+// -0.224076
+0xbe657440
+// 0.603256
+0x3f1a6efd
+// -0.465982
+0xbeee952e
+// -0.266391
+0xbe886472
+// 0.215561
+0x3e5cbc1e
+// -0.286683
+0xbe92c813
+// 0.095988
+0x3dc4954b
+// 0.024088
+0x3cc55426
+// -0.423716
+0xbed8f156
+// 0.043781
+0x3d3353ea
+// 0.035636
+0x3d11f738
+// -0.090423
+0xbdb92ff2
+// 0.180244
+0x3e3891db
+// -0.383619
+0xbec469ac
+// 0.505056
+0x3f014b5f
+// 0.180534
+0x3e38ddc7
+// -0.868551
+0xbf5e595d
+// 0.039191
+0x3d208731
+// 0.536338
+0x3f094d71
+// 0.278268
+0x3e8e7919
+// -0.334516
+0xbeab45ae
+// 0.161360
+0x3e253bb0
+// -0.348327
+0xbeb257fb
+// -0.346489
+0xbeb166f8
+// 0.199047
+0x3e4bd2f0
+// 0.096644
+0x3dc5ed27
+// 0.412308
+0x3ed31a17
+// 0.587697
+0x3f16734a
+// 0.542638
+0x3f0aea59
+// -0.386787
+0xbec608fe
+// -0.095698
+0xbdc3fd5c
+// -0.625805
+0xbf2034be
+// 0.273402
+0x3e8bfb64
+// 0.668777
+0x3f2b34f5
+// 0.335724
+0x3eabe411
+// -0.100806
+0xbdce73a3
+// 1.107466
+0x3f8dc16e
+// 0.753122
+0x3f40cc9c
+// 0.149736
+0x3e195479
+// 1.386675
+0x3fb17e94
+// -0.152107
+0xbe1bc1fe
+// 0.403656
+0x3eceabf7
+// -0.597463
+0xbf18f34e
+// -0.120383
+0xbdf68b88
+// 0.167322
+0x3e2b565b
+// -0.870542
+0xbf5edbdb
+// 1.195762
+0x3f990ebe
+// 1.295786
+0x3fa5dc54
+// 0.489550
+0x3efaa65a
+// 0.761695
+0x3f42fe72
+// 0.051997
+0x3d54faa7
+// 0.155154
+0x3e1ee099
+// 0.733868
+0x3f3bdec3
+// -0.549683
+0xbf0cb80e
+// 0.139890
+0x3e0f3f52
+// -0.062678
+0xbd805d94
+// -0.375819
+0xbec06b5f
+// -0.476351
+0xbef3e43b
+// -0.042625
+0xbd2e97de
+// 0.446334
+0x3ee485eb
+// -0.025123
+0xbccdcfb7
+// 0.481946
+0x3ef6c1ab
+// -0.147118
+0xbe16a62c
+// -1.008574
+0xbf8118f6
+// -0.308698
+0xbe9e0daa
+// 0.639165
+0x3f23a050
+// 0.302298
+0x3e9ac6c8
+// 0.940035
+0x3f70a61d
+// -0.015561
+0xbc7ef558
+// -0.751823
+0xbf407775
+// -0.086094
+0xbdb051de
+// -0.102826
+0xbdd2967e
+// 0.093298
+0x3dbf131f
+// -0.058957
+0xbd717c9d
+// 0.034728
+0x3d0e3f48
+// 0.215325
+0x3e5c7e25
+// 0.132688
+0x3e07df4a
+// -0.106793
+0xbddab612
+// -0.128160
+0xbe033c55
+// -0.086395
+0xbdb0efe3
+// -0.183173
+0xbe3b91c5
+// 0.407728
+0x3ed0c1c6
+// 0.356860
+0x3eb6b654
+// 0.161071
+0x3e24efea
+// 0.307217
+0x3e9d4b81
+// 0.028285
+0x3ce7b65c
+// 0.227097
+0x3e688c05
+// 0.211075
+0x3e58240a
+// -0.102845
+0xbdd2a07b
+// 0.284177
+0x3e917fb1
+// -0.803944
+0xbf4dcf4c
+// 0.155162
+0x3e1ee2d5
+// 0.126264
+0x3e014b43
+// -0.371058
+0xbebdfb54
+// -0.920507
+0xbf6ba65a
+// -0.097310
+0xbdc74a7f
+// 0.063622
+0x3d824c82
+// 0.398391
+0x3ecbf9e0
+// 0.752227
+0x3f4091f9
+// 0.212570
+0x3e59abfd
+// -0.689718
+0xbf30915d
+// 0.842300
+0x3f57a0f3
+// -0.138195
+0xbe0d82ee
+// -0.565574
+0xbf10c97a
+// -0.048864
+0xbd482582
+// -0.097338
+0xbdc75903
+// -0.068438
+0xbd8c291f
+// -1.094403
+0xbf8c1565
+// 0.112957
+0x3de7560f
+// 0.043994
+0x3d3432ab
+// -0.244793
+0xbe7aaafa
+// 0.401477
+0x3ecd8e6e
+// 0.698054
+0x3f32b3a4
+// 0.578442
+0x3f1414cb
+// -0.435686
+0xbedf1248
+// 0.751808
+0x3f407681
+// -0.896509
+0xbf658195
+// 0.235634
+0x3e7149fd
+// 0.120158
+0x3df61549
+// -0.203841
+0xbe50bbc4
+// -0.110141
+0xbde19185
+// 0.131124
+0x3e06456e
+// -0.279964
+0xbe8f5777
+// -0.303678
+0xbe9b7ba0
+// 0.136159
+0x3e0b6d4c
+// -0.299419
+0xbe994d6e
+// 0.102332
+0x3dd19334
+// 0.193656
+0x3e464dbb
+// -0.229891
+0xbe6b6877
+// 0.216038
+0x3e5d3924
+// 0.806476
+0x3f4e752e
+// -0.024529
+0xbcc8f198
+// 0.452274
+0x3ee79080
+// 0.184400
+0x3e3cd371
+// 0.435884
+0x3edf2c2d
+// -0.853058
+0xbf5a6203
+// -0.038842
+0xbd1f18d2
+// -0.134398
+0xbe099fa4
+// -0.206978
+0xbe53f220
+// -0.215743
+0xbe5cebca
+// 0.715804
+0x3f373eef
+// 0.525004
+0x3f0666af
+// 0.214133
+0x3e5b45aa
+// 0.176872
+0x3e351dd1
+// 0.604647
+0x3f1aca2b
+// -0.093660
+0xbdbfd0fc
+// -0.786943
+0xbf497518
+// -0.396576
+0xbecb0c10
+// -0.921686
+0xbf6bf3a1
+// -0.618977
+0xbf1e7548
+// -1.213436
+0xbf9b51e0
+// -0.030434
+0xbcf950a7
+// 0.191961
+0x3e44916a
+// 0.719240
+0x3f382020
+// 0.340164
+0x3eae2a05
+// 0.498928
+0x3eff736e
+// -0.021023
+0xbcac3811
+// -0.166474
+0xbe2a783b
+// -0.616131
+0xbf1dbabe
+// 0.365306
+0x3ebb095e
+// 0.007044
+0x3be6d0a3
+// -0.375641
+0xbec05408
+// -0.042984
+0xbd301036
+// 0.329624
+0x3ea8c487
+// 0.827399
+0x3f53d071
+// -0.893558
+0xbf64c035
+// -0.075516
+0xbd9aa862
+// 0.518599
+0x3f04c2eb
+// 0.093869
+0x3dc03e71
+// -0.298315
+0xbe98bcae
+// 0.365521
+0x3ebb259c
+// -0.972897
+0xbf790fc1
+// 0.304479
+0x3e9be4ae
+// -0.198416
+0xbe4b2dae
+// 0.232691
+0x3e6e4693
+// 0.905511
+0x3f67cf97
+// 0.205331
+0x3e52422e
+// 0.778075
+0x3f472ff3
+// -0.261585
+0xbe85ee80
+// -0.409216
+0xbed184c0
+// 0.146218
+0x3e15ba3c
+// -0.685715
+0xbf2f8b05
+// -0.490769
+0xbefb4603
+// 0.240915
+0x3e76b284
+// -0.448758
+0xbee5c3a3
+// 0.234426
+0x3e700d72
+// 0.216527
+0x3e5db944
+// 0.043154
+0x3d30c216
+// 0.553201
+0x3f0d9e92
+// -0.149700
+0xbe194b15
+// 0.512151
+0x3f031c4c
+// -0.312409
+0xbe9ff41d
+// -0.211014
+0xbe581414
+// -0.045278
+0xbd39756e
+// -0.473823
+0xbef298f8
+// 0.714785
+0x3f36fc23
+// -0.158998
+0xbe22d066
+// -0.339647
+0xbeade62e
+// -0.775333
+0xbf467c35
+// -0.214568
+0xbe5bb7d7
+// -0.172115
+0xbe303ef5
+// 0.031789
+0x3d023510
+// 0.106907
+0x3ddaf1f9
+// -0.241427
+0xbe773886
+// 0.254725
+0x3e826b52
+// 0.193519
+0x3e4629be
+// -0.187381
+0xbe3fe0bd
+// -0.480664
+0xbef61991
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference2_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference2_f32.txt
new file mode 100644
index 0000000..56c419d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference2_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// -0.213729
+0xbe5adbda
+// -0.152527
+0xbe1c3001
+// -0.223145
+0xbe648026
+// -0.032018
+0xbd03253d
+// -0.061425
+0xbd7b985d
+// -0.163990
+0xbe27ece3
+// -0.125522
+0xbe0088e6
+// 0.061858
+0x3d7d5ea8
+// -0.519663
+0xbf0508a0
+// 0.305642
+0x3e9c7d1c
+// 0.199550
+0x3e4c56dd
+// -0.237195
+0xbe72e357
+// 0.373369
+0x3ebf2a41
+// 0.011545
+0x3c3d2809
+// 0.226563
+0x3e68003c
+// -0.178636
+0xbe36ec3f
+// 0.254313
+0x3e82355f
+// -0.232375
+0xbe6df3d0
+// -0.494028
+0xbefcf13f
+// -0.110890
+0xbde31a43
+// -0.065083
+0xbd854a7c
+// -0.143194
+0xbe12a15e
+// -0.326908
+0xbea76070
+// 0.113234
+0x3de7e737
+// 0.023984
+0x3cc47a66
+// 0.041018
+0x3d2802c6
+// -0.129244
+0xbe045876
+// 0.100137
+0x3dcd14cc
+// -0.290532
+0xbe94c090
+// -0.063266
+0xbd8191b2
+// -0.354590
+0xbeb58ce2
+// 0.046121
+0x3d3ce980
+// -0.070921
+0xbd913f42
+// -0.147190
+0xbe16b8f9
+// 0.085191
+0x3dae78c9
+// 0.085908
+0x3daff06e
+// 0.116277
+0x3dee22c8
+// 0.069331
+0x3d8dfd58
+// 0.226470
+0x3e67e7be
+// -0.069922
+0xbd8f333a
+// 0.594356
+0x3f1827bc
+// 0.521916
+0x3f059c42
+// 0.187366
+0x3e3fdcf0
+// 0.137830
+0x3e0d2338
+// 0.406169
+0x3ecff558
+// 0.033544
+0x3d096581
+// 0.247536
+0x3e7d7a2d
+// -0.436086
+0xbedf46bb
+// -0.099109
+0xbdcaf978
+// 0.266819
+0x3e889c8b
+// -0.206103
+0xbe530cb6
+// -0.117825
+0xbdf14dfc
+// 0.095343
+0x3dc342ee
+// -0.126799
+0xbe01d7b2
+// 0.042455
+0x3d2de59f
+// 0.010654
+0x3c2e8e73
+// -0.187409
+0xbe3fe82d
+// 0.019364
+0x3c9ea205
+// 0.015762
+0x3c811ef1
+// -0.039994
+0xbd23d0f1
+// 0.079722
+0x3da34519
+// -0.169674
+0xbe2dbf09
+// 0.223386
+0x3e64bf3a
+// 0.079850
+0x3da38841
+// -0.384159
+0xbec4b07c
+// 0.017334
+0x3c8e00b2
+// 0.237222
+0x3e72ea33
+// 0.123077
+0x3dfc1003
+// -0.147956
+0xbe1781c5
+// 0.071370
+0x3d922a30
+// -0.154065
+0xbe1dc328
+// -0.153251
+0xbe1cedf6
+// 0.088038
+0x3db44d59
+// 0.042745
+0x3d2f15cc
+// 0.182363
+0x3e3abd7d
+// 0.259937
+0x3e851685
+// 0.240008
+0x3e75c4b8
+// -0.171076
+0xbe2f2e6c
+// -0.042327
+0xbd2d5f38
+// -0.276793
+0xbe8db7c3
+// 0.120925
+0x3df7a7c8
+// 0.295799
+0x3e9772fb
+// 0.148490
+0x3e180de1
+// -0.044587
+0xbd36a06a
+// 0.489831
+0x3efacb10
+// 0.333105
+0x3eaa8cb9
+// 0.066228
+0x3d87a2a1
+// 0.613325
+0x3f1d02d8
+// -0.067277
+0xbd89c86d
+// 0.178536
+0x3e36d23e
+// -0.264257
+0xbe874cad
+// -0.053245
+0xbd5a17d4
+// 0.074006
+0x3d979085
+// -0.385040
+0xbec523eb
+// 0.528884
+0x3f0764f3
+// 0.573125
+0x3f12b84b
+// 0.216527
+0x3e5db962
+// 0.336897
+0x3eac7db9
+// 0.022998
+0x3cbc6697
+// 0.068624
+0x3d8c8adf
+// 0.324589
+0x3ea6307f
+// -0.243124
+0xbe78f590
+// 0.061873
+0x3d7d6eb3
+// -0.027723
+0xbce31a87
+// -0.166224
+0xbe2a36b6
+// -0.210689
+0xbe57beec
+// -0.018853
+0xbc9a71d8
+// 0.197413
+0x3e4a26a4
+// -0.011112
+0xbc360f6a
+// 0.213164
+0x3e5a47b8
+// -0.065070
+0xbd854388
+// -0.446091
+0xbee4660c
+// -0.136537
+0xbe0bd048
+// 0.282702
+0x3e90be4a
+// 0.133706
+0x3e08ea35
+// 0.415776
+0x3ed4e09a
+// -0.006883
+0xbbe18916
+// -0.332530
+0xbeaa4166
+// -0.038079
+0xbd1bf8d6
+// -0.045480
+0xbd3a4914
+// 0.041266
+0x3d29062f
+// -0.026076
+0xbcd59e59
+// 0.015360
+0x3c7ba9b8
+// 0.095238
+0x3dc30c1b
+// 0.058688
+0x3d706269
+// -0.047234
+0xbd4178aa
+// -0.056685
+0xbd682e73
+// -0.038212
+0xbd1c849e
+// -0.081017
+0xbda5ec64
+// 0.180338
+0x3e38aa73
+// 0.157839
+0x3e21a072
+// 0.071242
+0x3d91e729
+// 0.135882
+0x3e0b2486
+// 0.012511
+0x3c4cf8dc
+// 0.100445
+0x3dcdb5dd
+// 0.093358
+0x3dbf3293
+// -0.045488
+0xbd3a51e9
+// 0.125691
+0x3e00b535
+// -0.355584
+0xbeb60f0b
+// 0.068628
+0x3d8c8cd8
+// 0.055846
+0x3d64bf09
+// -0.164118
+0xbe280eae
+// -0.407139
+0xbed07488
+// -0.043040
+0xbd304ad3
+// 0.028140
+0x3ce68628
+// 0.176208
+0x3e346fcb
+// 0.332709
+0x3eaa58db
+// 0.094019
+0x3dc08d4b
+// -0.305061
+0xbe9c3101
+// 0.372548
+0x3ebebe9c
+// -0.061123
+0xbd7a5c7d
+// -0.250153
+0xbe801405
+// -0.021612
+0xbcb10c90
+// -0.043052
+0xbd3057aa
+// -0.030270
+0xbcf7f8b0
+// -0.484053
+0xbef7d5ca
+// 0.049961
+0x3d4ca3ad
+// 0.019458
+0x3c9f6711
+// -0.108272
+0xbdddbd79
+// 0.177573
+0x3e35d5a9
+// 0.308748
+0x3e9e143d
+// 0.255844
+0x3e82fe05
+// -0.192703
+0xbe455410
+// 0.332524
+0x3eaa408e
+// -0.396525
+0xbecb0543
+// 0.104221
+0x3dd57191
+// 0.053146
+0x3d59af3b
+// -0.090159
+0xbdb8a523
+// -0.048715
+0xbd478988
+// 0.057996
+0x3d6d8d49
+// -0.123828
+0xbdfd996c
+// -0.134316
+0xbe098a2e
+// 0.060223
+0x3d76ac63
+// -0.132433
+0xbe079c67
+// 0.045261
+0x3d3963b6
+// 0.085654
+0x3daf6b3b
+// -0.101680
+0xbdd03dc8
+// 0.095553
+0x3dc3b186
+// 0.356703
+0x3eb6a1c8
+// -0.010849
+0xbc31c118
+// 0.200040
+0x3e4cd75f
+// 0.081560
+0x3da708f0
+// 0.192791
+0x3e456af8
+// -0.377306
+0xbec12e4e
+// -0.017180
+0xbc8cbc9b
+// -0.059444
+0xbd737ba2
+// -0.091546
+0xbdbb7c97
+// -0.095423
+0xbdc36d19
+// 0.316599
+0x3ea2194a
+// 0.232209
+0x3e6dc81e
+// 0.094711
+0x3dc1f7b0
+// 0.078230
+0x3da03713
+// 0.267435
+0x3e88ed34
+// -0.041426
+0xbd29ae23
+// -0.348064
+0xbeb2356b
+// -0.175405
+0xbe339d6c
+// -0.407661
+0xbed0b8e4
+// -0.273773
+0xbe8c2bf1
+// -0.536701
+0xbf096540
+// -0.013461
+0xbc5c8b1e
+// 0.084904
+0x3dade230
+// 0.318119
+0x3ea2e07d
+// 0.150454
+0x3e1a10ac
+// 0.220675
+0x3e61f89f
+// -0.009298
+0xbc185830
+// -0.073631
+0xbd96cc08
+// -0.272514
+0xbe8b86ed
+// 0.161574
+0x3e2573ba
+// 0.003116
+0x3b4c2da7
+// -0.166146
+0xbe2a2210
+// -0.019012
+0xbc9bbec1
+// 0.145792
+0x3e154a9c
+// 0.365958
+0x3ebb5ecc
+// -0.395219
+0xbeca5a33
+// -0.033401
+0xbd08cf51
+// 0.229376
+0x3e6ae178
+// 0.041518
+0x3d2a0ef7
+// -0.131944
+0xbe071c5b
+// 0.161670
+0x3e258cb6
+// -0.430311
+0xbedc51b5
+// 0.134671
+0x3e09e71c
+// -0.087759
+0xbdb3bb29
+// 0.102919
+0x3dd2c72d
+// 0.400506
+0x3ecd0f2e
+// 0.090817
+0x3db9fe7f
+// 0.344142
+0x3eb03357
+// -0.115699
+0xbdecf37e
+// -0.180996
+0xbe3956ed
+// 0.064672
+0x3d8472d3
+// -0.303291
+0xbe9b48f0
+// -0.217066
+0xbe5e469e
+// 0.106557
+0x3dda3a50
+// -0.198485
+0xbe4b3fb1
+// 0.103686
+0x3dd4598d
+// 0.095770
+0x3dc422dd
+// 0.019087
+0x3c9c5c1b
+// 0.244680
+0x3e7a8d65
+// -0.066212
+0xbd879a53
+// 0.226523
+0x3e67f5c6
+// -0.138178
+0xbe0d7e97
+// -0.093331
+0xbdbf2474
+// -0.020026
+0xbca40e68
+// -0.209571
+0xbe5699e4
+// 0.316148
+0x3ea1de32
+// -0.070325
+0xbd90065f
+// -0.150225
+0xbe19d4aa
+// -0.342929
+0xbeaf9458
+// -0.094903
+0xbdc25cb0
+// -0.076126
+0xbd9be81c
+// 0.014060
+0x3c665cae
+// 0.047285
+0x3d41ada8
+// -0.106783
+0xbddab0dc
+// 0.112665
+0x3de6bcaa
+// 0.085593
+0x3daf4b64
+// -0.082878
+0xbda9bc12
+// -0.212597
+0xbe59b304
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference3_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference3_f32.txt
new file mode 100644
index 0000000..09f7b4b
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference3_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.046956
+0x3d40553c
+// 0.023914
+0x3cc3e800
+// 0.051185
+0x3d51a712
+// 0.001054
+0x3a8a1f2e
+// 0.003878
+0x3b7e2c6b
+// 0.027644
+0x3ce2754f
+// 0.016196
+0x3c84ad68
+// 0.003933
+0x3b80e2c7
+// 0.277593
+0x3e8e20b6
+// 0.096027
+0x3dc4a99d
+// 0.040933
+0x3d27a8f7
+// 0.057833
+0x3d6ce29d
+// 0.143299
+0x3e12bcf0
+// 0.000137
+0x390faba8
+// 0.052765
+0x3d582003
+// 0.032802
+0x3d065b7d
+// 0.066482
+0x3d8827bb
+// 0.055507
+0x3d635b0e
+// 0.250882
+0x3e80738f
+// 0.012640
+0x3c4f1859
+// 0.004354
+0x3b8ead93
+// 0.021077
+0x3cacaa26
+// 0.109854
+0x3de0fb1f
+// 0.013180
+0x3c57f168
+// 0.000591
+0x3a1b020b
+// 0.001729
+0x3ae2b05b
+// 0.017171
+0x3c8ca946
+// 0.010308
+0x3c28e136
+// 0.086767
+0x3db1b2ad
+// 0.004114
+0x3b86d245
+// 0.129247
+0x3e045945
+// 0.002187
+0x3b0f4cba
+// 0.005170
+0x3ba96c1c
+// 0.022270
+0x3cb66fca
+// 0.007460
+0x3bf4758a
+// 0.007586
+0x3bf8969f
+// 0.013898
+0x3c63b4d8
+// 0.004941
+0x3ba1e881
+// 0.052721
+0x3d57f264
+// 0.005026
+0x3ba4ae3a
+// 0.363128
+0x3eb9ebe0
+// 0.280005
+0x3e8f5cd8
+// 0.036087
+0x3d13cfc1
+// 0.019528
+0x3c9ff88e
+// 0.169582
+0x3e2da6c9
+// 0.001157
+0x3a979a4c
+// 0.062986
+0x3d80fec8
+// 0.195484
+0x3e482cec
+// 0.010097
+0x3c256d87
+// 0.073181
+0x3d95e017
+// 0.043665
+0x3d32da3c
+// 0.014270
+0x3c69ce85
+// 0.009344
+0x3c19181c
+// 0.016527
+0x3c876418
+// 0.001853
+0x3af2d9d1
+// 0.000117
+0x38f4b243
+// 0.036103
+0x3d13e112
+// 0.000385
+0x39ca16b8
+// 0.000255
+0x3985e3de
+// 0.001644
+0x3ad782cb
+// 0.006533
+0x3bd61375
+// 0.029594
+0x3cf26e17
+// 0.051295
+0x3d521ae3
+// 0.006554
+0x3bd6c3b6
+// 0.151701
+0x3e1b576f
+// 0.000309
+0x39a1f026
+// 0.057846
+0x3d6cf000
+// 0.015571
+0x3c7f1e64
+// 0.022502
+0x3cb85726
+// 0.005236
+0x3bab91ea
+// 0.024399
+0x3cc7e074
+// 0.024142
+0x3cc5c5a8
+// 0.007967
+0x3c028900
+// 0.001878
+0x3af62e4d
+// 0.034185
+0x3d0c060b
+// 0.069455
+0x3d8e3e69
+// 0.059213
+0x3d728974
+// 0.030084
+0x3cf67392
+// 0.001842
+0x3af16300
+// 0.078754
+0x3da149f9
+// 0.015031
+0x3c764689
+// 0.089941
+0x3db8332a
+// 0.022665
+0x3cb9acb6
+// 0.002043
+0x3b05ec2f
+// 0.246636
+0x3e7c8e46
+// 0.114059
+0x3de99781
+// 0.004509
+0x3b93bdb1
+// 0.386675
+0x3ec5fa50
+// 0.004653
+0x3b9874e8
+// 0.032766
+0x3d06354e
+// 0.071782
+0x3d9302ac
+// 0.002914
+0x3b3efd4f
+// 0.005630
+0x3bb87b0d
+// 0.152397
+0x3e1c0df9
+// 0.287532
+0x3e933771
+// 0.337648
+0x3eace026
+// 0.048194
+0x3d4566ed
+// 0.116670
+0x3deef0ab
+// 0.000544
+0x3a0e8664
+// 0.004841
+0x3b9e9fec
+// 0.108301
+0x3dddccee
+// 0.060761
+0x3d78e021
+// 0.003935
+0x3b80f31a
+// 0.000790
+0x3a4f18d5
+// 0.028402
+0x3ce8ac1e
+// 0.045630
+0x3d3ae684
+// 0.000365
+0x39bf8f03
+// 0.040061
+0x3d241690
+// 0.000127
+0x390517da
+// 0.046708
+0x3d3f5139
+// 0.004352
+0x3b8e9eb0
+// 0.204556
+0x3e51772f
+// 0.019163
+0x3c9cfbd2
+// 0.082153
+0x3da83fc4
+// 0.018377
+0x3c968aaf
+// 0.177699
+0x3e35f6b1
+// 0.000049
+0x384c3f36
+// 0.113665
+0x3de8c957
+// 0.001491
+0x3ac35db4
+// 0.002126
+0x3b0b57ae
+// 0.001750
+0x3ae56e7d
+// 0.000699
+0x3a373ba3
+// 0.000243
+0x397e4f7e
+// 0.009324
+0x3c18c230
+// 0.003540
+0x3b6806e1
+// 0.002293
+0x3b164ccd
+// 0.003303
+0x3b587625
+// 0.001501
+0x3ac4bc7e
+// 0.006747
+0x3bdd1749
+// 0.033430
+0x3d08ee16
+// 0.025609
+0x3cd1c9e8
+// 0.005217
+0x3baaf4b3
+// 0.018980
+0x3c9b7b0d
+// 0.000161
+0x3928b337
+// 0.010371
+0x3c29eae4
+// 0.008959
+0x3c12c9b6
+// 0.002127
+0x3b0b64e6
+// 0.016240
+0x3c8508f1
+// 0.129972
+0x3e05174f
+// 0.004841
+0x3b9ea462
+// 0.003206
+0x3b521a88
+// 0.027687
+0x3ce2d07e
+// 0.170393
+0x3e2e7b72
+// 0.001904
+0x3af99653
+// 0.000814
+0x3a5561d6
+// 0.031917
+0x3d02bae3
+// 0.113788
+0x3de90982
+// 0.009087
+0x3c14dff8
+// 0.095662
+0x3dc3ea83
+// 0.142669
+0x3e1217dd
+// 0.003840
+0x3b7bafc2
+// 0.064324
+0x3d83bc8c
+// 0.000480
+0x39fbbc13
+// 0.001905
+0x3af9baaf
+// 0.000942
+0x3a76e78d
+// 0.240853
+0x3e76a213
+// 0.002566
+0x3b28271c
+// 0.000389
+0x39cc0dfd
+// 0.012050
+0x3c456e36
+// 0.032413
+0x3d04c376
+// 0.097988
+0x3dc8ae1d
+// 0.067285
+0x3d89cc9d
+// 0.038172
+0x3d1c5a3b
+// 0.113661
+0x3de8c70b
+// 0.161624
+0x3e2580c1
+// 0.011165
+0x3c36eed8
+// 0.002903
+0x3b3e4647
+// 0.008356
+0x3c08e635
+// 0.002439
+0x3b1fdf58
+// 0.003458
+0x3b62974d
+// 0.015762
+0x3c811e97
+// 0.018545
+0x3c97eb47
+// 0.003728
+0x3b74538b
+// 0.018028
+0x3c93b01f
+// 0.002106
+0x3b0a015f
+// 0.007542
+0x3bf71ec7
+// 0.010628
+0x3c2e1fd8
+// 0.009386
+0x3c19c5ba
+// 0.130791
+0x3e05ee30
+// 0.000121
+0x38fdbe78
+// 0.041134
+0x3d287c1b
+// 0.006838
+0x3be01024
+// 0.038207
+0x3d1c7e8a
+// 0.146337
+0x3e15d95b
+// 0.000303
+0x399f1045
+// 0.003632
+0x3b6e0c0a
+// 0.008615
+0x3c0d2535
+// 0.009360
+0x3c195a43
+// 0.103035
+0x3dd30412
+// 0.055427
+0x3d630797
+// 0.009221
+0x3c17126a
+// 0.006291
+0x3bce23e7
+// 0.073519
+0x3d969145
+// 0.001764
+0x3ae73755
+// 0.124533
+0x3dff0aff
+// 0.031626
+0x3d018ac0
+// 0.170830
+0x3e2eedf4
+// 0.077045
+0x3d9dc9eb
+// 0.296095
+0x3e9799bd
+// 0.000186
+0x39434e25
+// 0.007410
+0x3bf2d03c
+// 0.104027
+0x3dd50bf3
+// 0.023269
+0x3cbe9e43
+// 0.050058
+0x3d4d096b
+// 0.000089
+0x38ba625c
+// 0.005573
+0x3bb69df0
+// 0.076338
+0x3d9c5744
+// 0.026836
+0x3cdbd62d
+// 0.000010
+0x3727655d
+// 0.028375
+0x3ce873ae
+// 0.000372
+0x39c2cc4f
+// 0.021849
+0x3cb2fd19
+// 0.137666
+0x3e0cf85c
+// 0.160562
+0x3e246a50
+// 0.001147
+0x3a964f93
+// 0.054083
+0x3d5d861c
+// 0.001772
+0x3ae83f82
+// 0.017896
+0x3c9299be
+// 0.026867
+0x3cdc1896
+// 0.190340
+0x3e42e885
+// 0.018643
+0x3c98b8d7
+// 0.007917
+0x3c01b5a9
+// 0.010888
+0x3c326475
+// 0.164886
+0x3e28d7f7
+// 0.008478
+0x3c0ae831
+// 0.121742
+0x3df953d8
+// 0.013760
+0x3c617247
+// 0.033675
+0x3d09ee56
+// 0.004299
+0x3b8ce155
+// 0.094555
+0x3dc1a606
+// 0.048434
+0x3d4662b9
+// 0.011671
+0x3c3f39ba
+// 0.040497
+0x3d25e012
+// 0.011051
+0x3c35101a
+// 0.009428
+0x3c1a780c
+// 0.000374
+0x39c456b3
+// 0.061541
+0x3d7c1220
+// 0.004507
+0x3b93ab9a
+// 0.052746
+0x3d580c85
+// 0.019627
+0x3ca0c7f1
+// 0.008954
+0x3c12b408
+// 0.000412
+0x39d824a2
+// 0.045147
+0x3d38ec28
+// 0.102742
+0x3dd26a55
+// 0.005084
+0x3ba69541
+// 0.023198
+0x3cbe09e1
+// 0.120885
+0x3df792ab
+// 0.009258
+0x3c17afe6
+// 0.005957
+0x3bc333cf
+// 0.000203
+0x39551514
+// 0.002298
+0x3b169f2e
+// 0.011721
+0x3c4009b3
+// 0.013048
+0x3c55c6cc
+// 0.007531
+0x3bf6c51b
+// 0.007061
+0x3be75d50
+// 0.046460
+0x3d3e4ce7
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference4_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference4_f32.txt
new file mode 100644
index 0000000..5aa83d5
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference4_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.348477
+0x3eb26b86
+// 0.248689
+0x3e7ea83c
+// 0.363829
+0x3eba47c0
+// 0.052204
+0x3d55d3c0
+// 0.100150
+0x3dcd1b90
+// 0.267378
+0x3e88e5c8
+// 0.204659
+0x3e51920d
+// -0.100857
+0xbdce8dea
+// 0.847288
+0x3f58e7e4
+// -0.498336
+0xbeff25f3
+// -0.325358
+0xbea69554
+// 0.386737
+0x3ec60265
+// -0.608763
+0xbf1bd7e2
+// -0.018824
+0xbc9a34ad
+// -0.369402
+0xbebd2245
+// 0.291258
+0x3e951fbe
+// -0.414647
+0xbed44ca8
+// 0.378878
+0x3ec1fc55
+// 0.805492
+0x3f4e34b8
+// 0.180801
+0x3e3923fe
+// 0.106116
+0x3dd95347
+// 0.233471
+0x3e6f1319
+// 0.533009
+0x3f087349
+// -0.184623
+0xbe3d0ddf
+// -0.039105
+0xbd202cb6
+// -0.066879
+0xbd88f7a0
+// 0.210726
+0x3e57c8aa
+// -0.163270
+0xbe27302b
+// 0.473700
+0x3ef288c0
+// 0.103153
+0x3dd341ca
+// 0.578145
+0x3f14014c
+// -0.075199
+0xbd9a01b2
+// 0.115634
+0x3decd1bc
+// 0.239987
+0x3e75bf2c
+// -0.138901
+0xbe0e3c07
+// -0.140069
+0xbe0f6e43
+// -0.189585
+0xbe42229f
+// -0.113041
+0xbde78212
+// -0.369250
+0xbebd0e4d
+// 0.114005
+0x3de97b53
+// -0.969073
+0xbf781529
+// -0.850961
+0xbf59d89a
+// -0.305493
+0xbe9c698d
+// -0.224725
+0xbe661e6f
+// -0.662241
+0xbf2988a0
+// -0.054692
+0xbd6004ea
+// -0.403598
+0xbecea459
+// 0.711021
+0x3f360573
+// 0.161592
+0x3e25787e
+// -0.435038
+0xbedebd42
+// 0.336043
+0x3eac0dc5
+// 0.192108
+0x3e44b7f1
+// -0.155452
+0xbe1f2ecb
+// 0.206741
+0x3e53b3ec
+// -0.069222
+0xbd8dc40d
+// -0.017371
+0xbc8e4db0
+// 0.305563
+0x3e9c72b6
+// -0.031573
+0xbd015276
+// -0.025699
+0xbcd286b0
+// 0.065209
+0x3d858c35
+// -0.129983
+0xbe051a34
+// 0.276646
+0x3e8da498
+// -0.364221
+0xbeba7b2d
+// -0.130192
+0xbe0550f4
+// 0.626355
+0x3f2058ce
+// -0.028263
+0xbce7878a
+// -0.386780
+0xbec607fe
+// -0.200673
+0xbe4d7d1a
+// 0.241236
+0x3e770690
+// -0.116365
+0xbdee50c8
+// 0.251196
+0x3e809cc7
+// 0.249870
+0x3e7fddf3
+// -0.143543
+0xbe12fcce
+// -0.069695
+0xbd8ebc07
+// -0.297336
+0xbe983c6b
+// -0.423817
+0xbed8fe8c
+// -0.391323
+0xbec85b87
+// 0.278931
+0x3e8ed01a
+// 0.069013
+0x3d8d567c
+// 0.451299
+0x3ee710a0
+// -0.197164
+0xbe49e556
+// -0.482288
+0xbef6ee73
+// -0.242107
+0xbe77eb02
+// 0.072697
+0x3d94e1ec
+// -0.798648
+0xbf4c7432
+// -0.543113
+0xbf0b097c
+// -0.107982
+0xbddd25c9
+// -1.000000
+0xbf800000
+// 0.109692
+0x3de0a634
+// -0.291096
+0xbe950a8b
+// 0.430860
+0x3edc99a4
+// 0.086814
+0x3db1cbb9
+// -0.120664
+0xbdf71e9e
+// 0.627791
+0x3f20b6e8
+// -0.862323
+0xbf5cc138
+// -0.934455
+0xbf6f3879
+// -0.353039
+0xbeb4c185
+// -0.549296
+0xbf0c9ea7
+// -0.037497
+0xbd1996f9
+// -0.111889
+0xbde52609
+// -0.529228
+0xbf077b81
+// 0.396404
+0x3ecaf572
+// -0.100882
+0xbdce9afe
+// 0.045201
+0x3d392436
+// 0.271022
+0x3e8ac35d
+// 0.343520
+0x3eafe1d9
+// 0.030739
+0x3cfbd0ca
+// -0.321874
+0xbea4cc9e
+// 0.018118
+0x3c946bb6
+// -0.347555
+0xbeb1f2c3
+// 0.106094
+0x3dd947f0
+// 0.727333
+0x3f3a3279
+// 0.222617
+0x3e63f5ce
+// -0.460933
+0xbeebff75
+// -0.218002
+0xbe5f3be2
+// -0.677905
+0xbf2d8b35
+// 0.011222
+0x3c37dcf2
+// 0.542176
+0x3f0acc14
+// 0.062086
+0x3d7e4e49
+// 0.074153
+0x3d97dd84
+// -0.067282
+0xbd89cb1b
+// 0.042517
+0x3d2e25e5
+// -0.025044
+0xbccd29b6
+// -0.155281
+0xbe1f0219
+// -0.095688
+0xbdc3f7e4
+// 0.077013
+0x3d9db933
+// 0.092422
+0x3dbd47f1
+// 0.062304
+0x3d7f3232
+// 0.132095
+0x3e0743fc
+// -0.294033
+0xbe968b7f
+// -0.257349
+0xbe83c346
+// -0.116157
+0xbdede37f
+// -0.221549
+0xbe62ddc4
+// -0.020398
+0xbca71965
+// -0.163771
+0xbe27b37a
+// -0.152217
+0xbe1bdeaa
+// 0.074167
+0x3d97e4b8
+// -0.204934
+0xbe51da4b
+// 0.579764
+0x3f146b69
+// -0.111895
+0xbde52941
+// -0.091055
+0xbdba7b05
+// 0.267588
+0x3e890155
+// 0.663823
+0x3f29f04f
+// 0.070175
+0x3d8fb7f4
+// -0.045881
+0xbd3bee0c
+// -0.287299
+0xbe9318e3
+// -0.542468
+0xbf0adf34
+// -0.153295
+0xbe1cf951
+// 0.497390
+0x3efea9dd
+// -0.607424
+0xbf1b8020
+// 0.099659
+0x3dcc1a0d
+// 0.407864
+0x3ed0d37d
+// 0.035238
+0x3d1055e5
+// 0.070195
+0x3d8fc26c
+// 0.049354
+0x3d4a274b
+// 0.789228
+0x3f4a0ad8
+// -0.081459
+0xbda6d3f3
+// -0.031726
+0xbd01f31a
+// 0.176532
+0x3e34c4db
+// -0.289525
+0xbe943ca1
+// -0.503401
+0xbf00dee1
+// -0.417143
+0xbed593ce
+// 0.314195
+0x3ea0de28
+// -0.542166
+0xbf0acb64
+// 0.646517
+0x3f25821b
+// -0.169927
+0xbe2e0163
+// -0.086652
+0xbdb17673
+// 0.147000
+0x3e16872b
+// 0.079428
+0x3da2ab25
+// -0.094560
+0xbdc1a8c0
+// 0.201896
+0x3e4ebdd3
+// 0.218997
+0x3e6040b7
+// -0.098191
+0xbdc91865
+// 0.215926
+0x3e5d1ba1
+// -0.073796
+0xbd972288
+// -0.139655
+0xbe0f01ac
+// 0.165786
+0x3e29c3ae
+// -0.155796
+0xbe1f88f4
+// -0.581589
+0xbf14e309
+// 0.017689
+0x3c90e912
+// -0.326157
+0xbea6fe18
+// -0.132980
+0xbe082bf5
+// -0.314337
+0xbea0f0d5
+// 0.615182
+0x3f1d7c95
+// 0.028011
+0x3ce57720
+// 0.096921
+0x3dc67e8d
+// 0.149262
+0x3e18d836
+// 0.155583
+0x3e1f512b
+// -0.516202
+0xbf0425ca
+// -0.378607
+0xbec1d8b6
+// -0.154422
+0xbe1e20c1
+// -0.127551
+0xbe029cad
+// -0.436041
+0xbedf40c5
+// 0.067543
+0x3d8a5407
+// 0.567503
+0x3f1147e7
+// 0.285991
+0x3e926d63
+// 0.664673
+0x3f2a280a
+// 0.446375
+0x3ee48b41
+// 0.875069
+0x3f600480
+// 0.021947
+0x3cb3cb1b
+// -0.138433
+0xbe0dc141
+// -0.518680
+0xbf04c82f
+// -0.245309
+0xbe7b325b
+// -0.359801
+0xbeb837df
+// 0.015161
+0x3c786429
+// 0.120053
+0x3df5de3f
+// 0.444322
+0x3ee37e34
+// -0.263440
+0xbe86e19d
+// -0.005080
+0xbba673bb
+// 0.270893
+0x3e8ab288
+// 0.030998
+0x3cfdef96
+// -0.237708
+0xbe7369d5
+// -0.596678
+0xbf18bfeb
+// 0.644389
+0x3f24f6a7
+// 0.054459
+0x3d5f100b
+// -0.373987
+0xbebf7b49
+// -0.067694
+0xbd8aa2f6
+// 0.215129
+0x3e5c4adc
+// -0.263595
+0xbe86f5fb
+// 0.701604
+0x3f339c4e
+// -0.219575
+0xbe60d83c
+// 0.143088
+0x3e1285a1
+// -0.167805
+0xbe2bd515
+// -0.653009
+0xbf272b97
+// -0.148074
+0xbe17a0b7
+// -0.561109
+0xbf0fa4cf
+// 0.188642
+0x3e412b60
+// 0.295106
+0x3e97181b
+// -0.105445
+0xbdd7f3a6
+// 0.494503
+0x3efd2f7d
+// 0.353917
+0x3eb534a9
+// -0.173736
+0xbe31e7d6
+// 0.323622
+0x3ea5b1be
+// -0.169056
+0xbe2d1d1c
+// -0.156148
+0xbe1fe559
+// -0.031120
+0xbcfef024
+// -0.398940
+0xbecc41ec
+// 0.107956
+0x3ddd183e
+// -0.369337
+0xbebd19bd
+// 0.225294
+0x3e66b369
+// 0.152173
+0x3e1bd327
+// 0.032652
+0x3d05be51
+// 0.341697
+0x3eaef2f5
+// -0.515467
+0xbf03f59e
+// 0.114661
+0x3dead396
+// 0.244936
+0x3e7ad083
+// 0.559131
+0x3f0f2331
+// 0.154736
+0x3e1e7317
+// 0.124121
+0x3dfe3303
+// -0.022925
+0xbcbbcc3c
+// -0.077096
+0xbd9de466
+// 0.174105
+0x3e32487a
+// -0.183695
+0xbe3c1a7c
+// -0.139556
+0xbe0ee7b8
+// 0.135129
+0x3e0a5f63
+// 0.346630
+0x3eb1798a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference5_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference5_f32.txt
new file mode 100644
index 0000000..65cc3fb
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference5_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.151523
+0x3e1b28f3
+// 0.251311
+0x3e80abe2
+// 0.136171
+0x3e0b707f
+// 0.447796
+0x3ee54588
+// 0.399850
+0x3eccb91c
+// 0.232622
+0x3e6e346f
+// 0.295341
+0x3e9736fa
+// 0.600857
+0x3f19d1bd
+// -0.347288
+0xbeb1cfc8
+// 0.998336
+0x3f7f92f9
+// 0.825358
+0x3f534aaa
+// 0.113263
+0x3de7f66b
+// 1.108763
+0x3f8debf1
+// 0.518824
+0x3f04d1a5
+// 0.869402
+0x3f5e9122
+// 0.208742
+0x3e55c085
+// 0.914647
+0x3f6a2654
+// 0.121122
+0x3df80eac
+// -0.305492
+0xbe9c6971
+// 0.319199
+0x3ea36e01
+// 0.393884
+0x3ec9ab2e
+// 0.266529
+0x3e887673
+// -0.033009
+0xbd073495
+// 0.684623
+0x3f2f4378
+// 0.539105
+0x3f0a02cb
+// 0.566879
+0x3f111ef4
+// 0.289274
+0x3e941bab
+// 0.663270
+0x3f29cc0b
+// 0.026300
+0x3cd773ff
+// 0.396847
+0x3ecb2f8d
+// -0.078145
+0xbda00a63
+// 0.575199
+0x3f134036
+// 0.384366
+0x3ec4cb91
+// 0.260013
+0x3e85206a
+// 0.638901
+0x3f238f02
+// 0.640069
+0x3f23db91
+// 0.689585
+0x3f3088a8
+// 0.613041
+0x3f1cf042
+// 0.869250
+0x3f5e8727
+// 0.385995
+0x3ec5a12b
+// 1.469073
+0x3fbc0a95
+// 1.350961
+0x3facec4d
+// 0.805493
+0x3f4e34c6
+// 0.724725
+0x3f39879c
+// 1.162241
+0x3f94c450
+// 0.554692
+0x3f0e004f
+// 0.903598
+0x3f67522d
+// -0.211021
+0xbe5815cc
+// 0.338408
+0x3ead43c1
+// 0.935038
+0x3f6f5ea1
+// 0.163957
+0x3e27e477
+// 0.307892
+0x3e9da408
+// 0.655452
+0x3f27cbb3
+// 0.293259
+0x3e96260a
+// 0.569222
+0x3f11b882
+// 0.517371
+0x3f04726d
+// 0.194437
+0x3e471a94
+// 0.531573
+0x3f081527
+// 0.525699
+0x3f069435
+// 0.434791
+0x3ede9cf3
+// 0.629983
+0x3f21468d
+// 0.223354
+0x3e64b6cf
+// 0.864221
+0x3f5d3d97
+// 0.630192
+0x3f21543d
+// -0.126355
+0xbe016337
+// 0.528263
+0x3f073c3c
+// 0.886780
+0x3f6303ff
+// 0.700673
+0x3f335f47
+// 0.258764
+0x3e847cb8
+// 0.616365
+0x3f1dca19
+// 0.248804
+0x3e7ec671
+// 0.250130
+0x3e801107
+// 0.643543
+0x3f24bf34
+// 0.569695
+0x3f11d781
+// 0.797336
+0x3f4c1e35
+// 0.923817
+0x3f6c7f46
+// 0.891323
+0x3f642dc4
+// 0.221069
+0x3e625fcc
+// 0.430987
+0x3edcaa61
+// 0.048701
+0x3d477b03
+// 0.697164
+0x3f327955
+// 0.982288
+0x3f7b7739
+// 0.742107
+0x3f3dfac0
+// 0.427303
+0x3edac785
+// 1.298648
+0x3fa63a19
+// 1.043113
+0x3f8584be
+// 0.607982
+0x3f1ba4b9
+// 1.500000
+0x3fc00000
+// 0.390308
+0x3ec7d673
+// 0.791096
+0x3f4a8546
+// 0.069140
+0x3d8d996f
+// 0.413186
+0x3ed38d12
+// 0.620664
+0x3f1ee3d4
+// -0.127791
+0xbe02dba0
+// 1.362323
+0x3fae609c
+// 1.434455
+0x3fb79c3c
+// 0.853039
+0x3f5a60c3
+// 1.049296
+0x3f864f53
+// 0.537497
+0x3f099970
+// 0.611889
+0x3f1ca4c1
+// 1.029228
+0x3f83bdc1
+// 0.103596
+0x3dd42a38
+// 0.600882
+0x3f19d360
+// 0.454799
+0x3ee8db79
+// 0.228978
+0x3e6a7946
+// 0.156480
+0x3e203c4e
+// 0.469261
+0x3ef042f3
+// 0.821874
+0x3f52664f
+// 0.481882
+0x3ef6b945
+// 0.847555
+0x3f58f962
+// 0.393906
+0x3ec9ae04
+// -0.227333
+0xbe68c9e6
+// 0.277383
+0x3e8e0519
+// 0.960933
+0x3f75ffba
+// 0.718002
+0x3f37cef9
+// 1.177905
+0x3f96c59a
+// 0.488778
+0x3efa4118
+// -0.042176
+0xbd2cc13b
+// 0.437914
+0x3ee03637
+// 0.425847
+0x3eda089f
+// 0.567282
+0x3f113963
+// 0.457483
+0x3eea3b43
+// 0.525044
+0x3f06694e
+// 0.655281
+0x3f27c086
+// 0.595688
+0x3f187efd
+// 0.422987
+0x3ed891b3
+// 0.407578
+0x3ed0ae04
+// 0.437696
+0x3ee019ba
+// 0.367905
+0x3ebc5e02
+// 0.794033
+0x3f4b45c0
+// 0.757349
+0x3f41e1a3
+// 0.616157
+0x3f1dbc70
+// 0.721549
+0x3f38b771
+// 0.520398
+0x3f0538cb
+// 0.663771
+0x3f29ecde
+// 0.652217
+0x3f26f7aa
+// 0.425833
+0x3eda06d2
+// 0.704934
+0x3f347693
+// -0.079764
+0xbda35b46
+// 0.611895
+0x3f1ca528
+// 0.591055
+0x3f174f61
+// 0.232412
+0x3e6dfd56
+// -0.163823
+0xbe27c13c
+// 0.429825
+0x3edc1203
+// 0.545881
+0x3f0bbee1
+// 0.787299
+0x3f498c71
+// 1.042468
+0x3f856f9a
+// 0.653295
+0x3f273e54
+// 0.002610
+0x3b2b114c
+// 1.107424
+0x3f8dc010
+// 0.400341
+0x3eccf97d
+// 0.092136
+0x3dbcb20e
+// 0.464762
+0x3eedf543
+// 0.429805
+0x3edc0f65
+// 0.450646
+0x3ee6bb17
+// -0.289228
+0xbe9415af
+// 0.581459
+0x3f14da7e
+// 0.531726
+0x3f081f32
+// 0.323468
+0x3ea59d93
+// 0.789525
+0x3f4a1e51
+// 1.003401
+0x3f806f71
+// 0.917143
+0x3f6ac9e7
+// 0.185805
+0x3e3e43b0
+// 1.042166
+0x3f8565b2
+// -0.146517
+0xbe16086e
+// 0.669927
+0x3f2b8059
+// 0.586652
+0x3f162ece
+// 0.353000
+0x3eb4bc6b
+// 0.420572
+0x3ed75537
+// 0.594560
+0x3f183518
+// 0.298104
+0x3e98a117
+// 0.281003
+0x3e8fdfa4
+// 0.598191
+0x3f19230d
+// 0.284074
+0x3e91722f
+// 0.573796
+0x3f12e451
+// 0.639655
+0x3f23c06b
+// 0.334214
+0x3eab1e29
+// 0.655796
+0x3f27e23d
+// 1.081589
+0x3f8a7184
+// 0.482311
+0x3ef6f16f
+// 0.826157
+0x3f537f0c
+// 0.632980
+0x3f220afd
+// 0.814337
+0x3f50786a
+// -0.115182
+0xbdebe4a7
+// 0.471989
+0x3ef1a88e
+// 0.403079
+0x3ece605d
+// 0.350738
+0x3eb393e5
+// 0.344417
+0x3eb0576a
+// 1.016202
+0x3f8212e5
+// 0.878607
+0x3f60ec5b
+// 0.654422
+0x3f278830
+// 0.627551
+0x3f20a72b
+// 0.936041
+0x3f6fa062
+// 0.432457
+0x3edd6afe
+// -0.067503
+0xbd8a3f36
+// 0.214009
+0x3e5b253a
+// -0.164673
+0xbe28a026
+// 0.053625
+0x3d5ba5f9
+// -0.375069
+0xbec00901
+// 0.478053
+0x3ef4c34e
+// 0.638433
+0x3f237050
+// 1.018680
+0x3f826418
+// 0.745309
+0x3f3ecc97
+// 0.859801
+0x3f5c1bef
+// 0.484839
+0x3ef83cdf
+// 0.379947
+0x3ec28870
+// 0.055678
+0x3d640e5d
+// 0.763440
+0x3f4370cf
+// 0.505080
+0x3f014ce7
+// 0.229107
+0x3e6a9af0
+// 0.469002
+0x3ef02107
+// 0.737708
+0x3f3cda75
+// 1.096678
+0x3f8c5ff6
+// -0.144389
+0xbe13da9d
+// 0.445541
+0x3ee41dff
+// 0.873987
+0x3f5fbda4
+// 0.567694
+0x3f11545f
+// 0.284871
+0x3e91da92
+// 0.763595
+0x3f437afe
+// -0.201604
+0xbe4e7138
+// 0.719575
+0x3f38360f
+// 0.356912
+0x3eb6bd2f
+// 0.667805
+0x3f2af545
+// 1.153009
+0x3f9395cc
+// 0.648074
+0x3f25e82e
+// 1.061109
+0x3f87d268
+// 0.311358
+0x3e9f6a50
+// 0.204894
+0x3e51cfca
+// 0.605445
+0x3f1afe75
+// 0.005497
+0x3bb420af
+// 0.146083
+0x3e1596ae
+// 0.673736
+0x3f2c79f5
+// 0.176378
+0x3e349c84
+// 0.669056
+0x3f2b4747
+// 0.656148
+0x3f27f956
+// 0.531120
+0x3f07f781
+// 0.898940
+0x3f6620f6
+// 0.392044
+0x3ec8b9f0
+// 0.869337
+0x3f5e8cdf
+// 0.274706
+0x3e8ca64c
+// 0.347827
+0x3eb2166d
+// 0.467348
+0x3eef4836
+// 0.158303
+0x3e221a16
+// 1.015467
+0x3f81facf
+// 0.385339
+0x3ec54b1b
+// 0.255064
+0x3e8297be
+// -0.059131
+0xbd72330c
+// 0.345264
+0x3eb0c674
+// 0.375879
+0x3ec0733f
+// 0.522925
+0x3f05de62
+// 0.577096
+0x3f13bc8d
+// 0.325895
+0x3ea6dbc3
+// 0.683695
+0x3f2f069f
+// 0.639556
+0x3f23b9ee
+// 0.364871
+0x3ebad04f
+// 0.153370
+0x3e1d0ced
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference6_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference6_f32.txt
new file mode 100644
index 0000000..2c362e9
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference6_f32.txt
@@ -0,0 +1,514 @@
+W
+256
+// -0.174238
+0xbe326b86
+// -0.124344
+0xbdfea83c
+// -0.181914
+0xbe3a47c0
+// -0.026102
+0xbcd5d3c0
+// -0.050075
+0xbd4d1b90
+// -0.133689
+0xbe08e5c8
+// -0.102329
+0xbdd1920d
+// 0.050428
+0x3d4e8dea
+// -0.423644
+0xbed8e7e4
+// 0.249168
+0x3e7f25f3
+// 0.162679
+0x3e269554
+// -0.193369
+0xbe460265
+// 0.304381
+0x3e9bd7e2
+// 0.009412
+0x3c1a34ad
+// 0.184701
+0x3e3d2245
+// -0.145629
+0xbe151fbe
+// 0.207324
+0x3e544ca8
+// -0.189439
+0xbe41fc55
+// -0.402746
+0xbece34b8
+// -0.090401
+0xbdb923fe
+// -0.053058
+0xbd595347
+// -0.116736
+0xbdef1319
+// -0.266505
+0xbe887349
+// 0.092312
+0x3dbd0ddf
+// 0.019553
+0x3ca02cb6
+// 0.033439
+0x3d08f7a0
+// -0.105363
+0xbdd7c8aa
+// 0.081635
+0x3da7302b
+// -0.236850
+0xbe7288c0
+// -0.051576
+0xbd5341ca
+// -0.289072
+0xbe94014c
+// 0.037599
+0x3d1a01b2
+// -0.057817
+0xbd6cd1bc
+// -0.119994
+0xbdf5bf2c
+// 0.069450
+0x3d8e3c07
+// 0.070035
+0x3d8f6e43
+// 0.094793
+0x3dc2229f
+// 0.056521
+0x3d678212
+// 0.184625
+0x3e3d0e4d
+// -0.057002
+0xbd697b53
+// 0.484536
+0x3ef81529
+// 0.425481
+0x3ed9d89a
+// 0.152746
+0x3e1c698d
+// 0.112363
+0x3de61e6f
+// 0.331120
+0x3ea988a0
+// 0.027346
+0x3ce004ea
+// 0.201799
+0x3e4ea459
+// -0.355510
+0xbeb60573
+// -0.080796
+0xbda5787e
+// 0.217519
+0x3e5ebd42
+// -0.168021
+0xbe2c0dc5
+// -0.096054
+0xbdc4b7f1
+// 0.077726
+0x3d9f2ecb
+// -0.103371
+0xbdd3b3ec
+// 0.034611
+0x3d0dc40d
+// 0.008686
+0x3c0e4db0
+// -0.152781
+0xbe1c72b6
+// 0.015786
+0x3c815276
+// 0.012849
+0x3c5286b0
+// -0.032604
+0xbd058c35
+// 0.064991
+0x3d851a34
+// -0.138323
+0xbe0da498
+// 0.182111
+0x3e3a7b2d
+// 0.065096
+0x3d8550f4
+// -0.313178
+0xbea058ce
+// 0.014131
+0x3c67878a
+// 0.193390
+0x3e4607fe
+// 0.100336
+0x3dcd7d1a
+// -0.120618
+0xbdf70690
+// 0.058183
+0x3d6e50c8
+// -0.125598
+0xbe009cc7
+// -0.124935
+0xbdffddf3
+// 0.071771
+0x3d92fcce
+// 0.034847
+0x3d0ebc07
+// 0.148668
+0x3e183c6b
+// 0.211909
+0x3e58fe8c
+// 0.195662
+0x3e485b87
+// -0.139466
+0xbe0ed01a
+// -0.034506
+0xbd0d567c
+// -0.225649
+0xbe6710a0
+// 0.098582
+0x3dc9e556
+// 0.241144
+0x3e76ee73
+// 0.121054
+0x3df7eb02
+// -0.036348
+0xbd14e1ec
+// 0.399324
+0x3ecc7432
+// 0.271557
+0x3e8b097c
+// 0.053991
+0x3d5d25c9
+// 0.500000
+0x3f000000
+// -0.054846
+0xbd60a634
+// 0.145548
+0x3e150a8b
+// -0.215430
+0xbe5c99a4
+// -0.043407
+0xbd31cbb9
+// 0.060332
+0x3d771e9e
+// -0.313895
+0xbea0b6e8
+// 0.431162
+0x3edcc138
+// 0.467228
+0x3eef3879
+// 0.176519
+0x3e34c185
+// 0.274648
+0x3e8c9ea7
+// 0.018749
+0x3c9996f9
+// 0.055944
+0x3d652609
+// 0.264614
+0x3e877b81
+// -0.198202
+0xbe4af572
+// 0.050441
+0x3d4e9afe
+// -0.022600
+0xbcb92436
+// -0.135511
+0xbe0ac35d
+// -0.171760
+0xbe2fe1d9
+// -0.015370
+0xbc7bd0ca
+// 0.160937
+0x3e24cc9e
+// -0.009059
+0xbc146bb6
+// 0.173778
+0x3e31f2c3
+// -0.053047
+0xbd5947f0
+// -0.363666
+0xbeba3279
+// -0.111309
+0xbde3f5ce
+// 0.230467
+0x3e6bff75
+// 0.109001
+0x3ddf3be2
+// 0.338953
+0x3ead8b35
+// -0.005611
+0xbbb7dcf2
+// -0.271088
+0xbe8acc14
+// -0.031043
+0xbcfe4e49
+// -0.037076
+0xbd17dd84
+// 0.033641
+0x3d09cb1b
+// -0.021258
+0xbcae25e5
+// 0.012522
+0x3c4d29b6
+// 0.077641
+0x3d9f0219
+// 0.047844
+0x3d43f7e4
+// -0.038507
+0xbd1db933
+// -0.046211
+0xbd3d47f1
+// -0.031152
+0xbcff3232
+// -0.066048
+0xbd8743fc
+// 0.147017
+0x3e168b7f
+// 0.128675
+0x3e03c346
+// 0.058078
+0x3d6de37f
+// 0.110775
+0x3de2ddc4
+// 0.010199
+0x3c271965
+// 0.081885
+0x3da7b37a
+// 0.076108
+0x3d9bdeaa
+// -0.037083
+0xbd17e4b8
+// 0.102467
+0x3dd1da4b
+// -0.289882
+0xbe946b69
+// 0.055948
+0x3d652941
+// 0.045527
+0x3d3a7b05
+// -0.133794
+0xbe090155
+// -0.331912
+0xbea9f04f
+// -0.035088
+0xbd0fb7f4
+// 0.022941
+0x3cbbee0c
+// 0.143650
+0x3e1318e3
+// 0.271234
+0x3e8adf34
+// 0.076647
+0x3d9cf951
+// -0.248695
+0xbe7ea9dd
+// 0.303712
+0x3e9b8020
+// -0.049830
+0xbd4c1a0d
+// -0.203932
+0xbe50d37d
+// -0.017619
+0xbc9055e5
+// -0.035098
+0xbd0fc26c
+// -0.024677
+0xbcca274b
+// -0.394614
+0xbeca0ad8
+// 0.040729
+0x3d26d3f3
+// 0.015863
+0x3c81f31a
+// -0.088266
+0xbdb4c4db
+// 0.144763
+0x3e143ca1
+// 0.251700
+0x3e80dee1
+// 0.208572
+0x3e5593ce
+// -0.157097
+0xbe20de28
+// 0.271083
+0x3e8acb64
+// -0.323258
+0xbea5821b
+// 0.084964
+0x3dae0163
+// 0.043326
+0x3d317673
+// -0.073500
+0xbd96872b
+// -0.039714
+0xbd22ab25
+// 0.047280
+0x3d41a8c0
+// -0.100948
+0xbdcebdd3
+// -0.109498
+0xbde040b7
+// 0.049096
+0x3d491865
+// -0.107963
+0xbddd1ba1
+// 0.036898
+0x3d172288
+// 0.069827
+0x3d8f01ac
+// -0.082893
+0xbda9c3ae
+// 0.077898
+0x3d9f88f4
+// 0.290795
+0x3e94e309
+// -0.008845
+0xbc10e912
+// 0.163079
+0x3e26fe18
+// 0.066490
+0x3d882bf5
+// 0.157169
+0x3e20f0d5
+// -0.307591
+0xbe9d7c95
+// -0.014005
+0xbc657720
+// -0.048461
+0xbd467e8d
+// -0.074631
+0xbd98d836
+// -0.077792
+0xbd9f512b
+// 0.258101
+0x3e8425ca
+// 0.189303
+0x3e41d8b6
+// 0.077211
+0x3d9e20c1
+// 0.063775
+0x3d829cad
+// 0.218021
+0x3e5f40c5
+// -0.033772
+0xbd0a5407
+// -0.283752
+0xbe9147e7
+// -0.142995
+0xbe126d63
+// -0.332337
+0xbeaa280a
+// -0.223187
+0xbe648b41
+// -0.437534
+0xbee00480
+// -0.010974
+0xbc33cb1b
+// 0.069216
+0x3d8dc141
+// 0.259340
+0x3e84c82f
+// 0.122655
+0x3dfb325b
+// 0.179901
+0x3e3837df
+// -0.007580
+0xbbf86429
+// -0.060026
+0xbd75de3f
+// -0.222161
+0xbe637e34
+// 0.131720
+0x3e06e19d
+// 0.002540
+0x3b2673bb
+// -0.135447
+0xbe0ab288
+// -0.015499
+0xbc7def96
+// 0.118854
+0x3df369d5
+// 0.298339
+0x3e98bfeb
+// -0.322194
+0xbea4f6a7
+// -0.027229
+0xbcdf100b
+// 0.186994
+0x3e3f7b49
+// 0.033847
+0x3d0aa2f6
+// -0.107565
+0xbddc4adc
+// 0.131798
+0x3e06f5fb
+// -0.350802
+0xbeb39c4e
+// 0.109787
+0x3de0d83c
+// -0.071544
+0xbd9285a1
+// 0.083903
+0x3dabd515
+// 0.326504
+0x3ea72b97
+// 0.074037
+0x3d97a0b7
+// 0.280554
+0x3e8fa4cf
+// -0.094321
+0xbdc12b60
+// -0.147553
+0xbe17181b
+// 0.052723
+0x3d57f3a6
+// -0.247251
+0xbe7d2f7d
+// -0.176959
+0xbe3534a9
+// 0.086868
+0x3db1e7d6
+// -0.161811
+0xbe25b1be
+// 0.084528
+0x3dad1d1c
+// 0.078074
+0x3d9fe559
+// 0.015560
+0x3c7ef024
+// 0.199470
+0x3e4c41ec
+// -0.053978
+0xbd5d183e
+// 0.184669
+0x3e3d19bd
+// -0.112647
+0xbde6b369
+// -0.076086
+0xbd9bd327
+// -0.016326
+0xbc85be51
+// -0.170849
+0xbe2ef2f5
+// 0.257733
+0x3e83f59e
+// -0.057331
+0xbd6ad396
+// -0.122468
+0xbdfad083
+// -0.279565
+0xbe8f2331
+// -0.077368
+0xbd9e7317
+// -0.062060
+0xbd7e3303
+// 0.011462
+0x3c3bcc3c
+// 0.038548
+0x3d1de466
+// -0.087052
+0xbdb2487a
+// 0.091847
+0x3dbc1a7c
+// 0.069778
+0x3d8ee7b8
+// -0.067565
+0xbd8a5f63
+// -0.173315
+0xbe31798a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference7_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference7_f32.txt
new file mode 100644
index 0000000..bc67ed1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference7_f32.txt
@@ -0,0 +1,4 @@
+W
+1
+// 0.122055
+0x3df9f827
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference8_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference8_f32.txt
new file mode 100644
index 0000000..1058f68
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference8_f32.txt
@@ -0,0 +1,4 @@
+W
+1
+// 0.174761
+0x3e32f471
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference9_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference9_f32.txt
new file mode 100644
index 0000000..5bae407
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsF32/Reference9_f32.txt
@@ -0,0 +1,4 @@
+W
+1
+// 0.452354
+0x3ee79aee
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Input1_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Input1_q15.txt
new file mode 100644
index 0000000..2afb099
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Input1_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.310387
+0x27bb
+// -0.116701
+0xf110
+// 0.264053
+0x21cc
+// -0.343402
+0xd40b
+// -0.366045
+0xd125
+// -0.504540
+0xbf6b
+// 0.387632
+0x319e
+// -0.123981
+0xf021
+// 0.146292
+0x12ba
+// -0.519356
+0xbd86
+// -0.191673
+0xe777
+// 0.102968
+0xd2e
+// 0.231713
+0x1da9
+// -0.096773
+0xf39d
+// 0.006988
+0xe5
+// -0.390963
+0xcdf5
+// -0.131743
+0xef23
+// 0.104758
+0xd69
+// 0.202819
+0x19f6
+// -0.093355
+0xf40d
+// -0.215011
+0xe47b
+// -0.072582
+0xf6b6
+// -0.221321
+0xe3ac
+// 0.135066
+0x114a
+// -0.089144
+0xf497
+// -0.021097
+0xfd4d
+// -0.497287
+0xc059
+// 0.161082
+0x149e
+// 0.415432
+0x352d
+// 0.086870
+0xb1f
+// 0.519957
+0x428e
+// 0.095952
+0xc48
+// 0.024997
+0x333
+// -0.016867
+0xfdd7
+// 0.368561
+0x2f2d
+// 0.206902
+0x1a7c
+// 0.095760
+0xc42
+// -0.261607
+0xde84
+// 0.448476
+0x3968
+// -0.037978
+0xfb24
+// -0.051719
+0xf961
+// 0.080255
+0xa46
+// 0.086853
+0xb1e
+// -0.236806
+0xe1b0
+// 0.065931
+0x870
+// 0.353711
+0x2d46
+// -0.063549
+0xf7de
+// 0.029167
+0x3bc
+// 0.150256
+0x133c
+// 0.367567
+0x2f0c
+// 0.020283
+0x299
+// -0.564269
+0xb7c6
+// -0.138678
+0xee40
+// 0.121341
+0xf88
+// 0.067586
+0x8a7
+// -0.225787
+0xe319
+// -0.201308
+0xe63c
+// -0.084584
+0xf52c
+// -0.266474
+0xdde4
+// 0.009020
+0x128
+// 0.459475
+0x3ad0
+// 0.280571
+0x23ea
+// 0.240465
+0x1ec8
+// 0.233376
+0x1ddf
+// -0.216864
+0xe43e
+// -0.055021
+0xf8f5
+// 0.151803
+0x136e
+// 0.006168
+0xca
+// -0.043318
+0xfa75
+// -0.328772
+0xd5eb
+// 0.158344
+0x1445
+// -0.023603
+0xfcfb
+// 0.065800
+0x86c
+// 0.391312
+0x3217
+// -0.311980
+0xd811
+// 0.049028
+0x647
+// 0.051066
+0x689
+// 0.069294
+0x8df
+// 0.532430
+0x4427
+// -0.341894
+0xd43d
+// 0.145598
+0x12a3
+// -0.009655
+0xfec4
+// -0.268682
+0xdd9c
+// -0.205090
+0xe5c0
+// 0.104011
+0xd50
+// -0.180514
+0xe8e5
+// -0.333921
+0xd542
+// 0.047268
+0x60d
+// 0.080615
+0xa52
+// 0.072452
+0x946
+// 0.040981
+0x53f
+// 0.267386
+0x223a
+// -0.051812
+0xf95e
+// -0.593088
+0xb416
+// 0.000240
+0x8
+// 0.438100
+0x3814
+// -0.447162
+0xc6c3
+// -0.072355
+0xf6bd
+// 0.039643
+0x513
+// 0.086244
+0xb0a
+// -0.040205
+0xfadb
+// 0.077464
+0x9ea
+// 0.293263
+0x258a
+// 0.274435
+0x2321
+// 0.332121
+0x2a83
+// 0.111668
+0xe4b
+// 0.198588
+0x196b
+// 0.282252
+0x2421
+// -0.279946
+0xdc2b
+// -0.124304
+0xf017
+// -0.393489
+0xcda2
+// -0.025122
+0xfcc9
+// 0.300181
+0x266c
+// -0.171283
+0xea13
+// -0.158163
+0xebc1
+// 0.203709
+0x1a13
+// 0.186518
+0x17e0
+// 0.076645
+0x9d0
+// 0.046614
+0x5f7
+// 0.095504
+0xc39
+// -0.011389
+0xfe8b
+// -0.156633
+0xebf3
+// 0.282363
+0x2424
+// 0.143218
+0x1255
+// -0.291621
+0xdaac
+// 0.017989
+0x24d
+// -0.357195
+0xd247
+// -0.444095
+0xc728
+// -0.220993
+0xe3b7
+// 0.638140
+0x51af
+// 0.137680
+0x11a0
+// -0.239599
+0xe155
+// -0.031926
+0xfbea
+// 0.325691
+0x29b0
+// -0.083612
+0xf54c
+// 0.170827
+0x15de
+// -0.094855
+0xf3dc
+// 0.202108
+0x19df
+// 0.340420
+0x2b93
+// -0.264883
+0xde18
+// -0.258914
+0xdedc
+// 0.271798
+0x22ca
+// -0.378198
+0xcf97
+// 0.466427
+0x3bb4
+// 0.146974
+0x12d0
+// -0.275601
+0xdcb9
+// 0.147315
+0x12db
+// 0.232166
+0x1db8
+// -0.443911
+0xc72e
+// 0.140544
+0x11fd
+// 0.159052
+0x145c
+// 0.297624
+0x2619
+// 0.109212
+0xdfb
+// 0.069782
+0x8ef
+// -0.322621
+0xd6b4
+// 0.013237
+0x1b2
+// 0.122654
+0xfb3
+// 0.257702
+0x20fc
+// -0.221724
+0xe39f
+// -0.360638
+0xd1d7
+// 0.260703
+0x215f
+// 0.041334
+0x54a
+// 0.107417
+0xdc0
+// -0.087953
+0xf4be
+// -0.268806
+0xdd98
+// -0.218224
+0xe411
+// -0.121626
+0xf06f
+// 0.332438
+0x2a8d
+// -0.185339
+0xe847
+// -0.466374
+0xc44e
+// 0.115403
+0xec6
+// -0.067910
+0xf74f
+// 0.415039
+0x3520
+// 0.436841
+0x37ea
+// 0.119224
+0xf43
+// 1.000000
+0x7fff
+// -0.182696
+0xe89d
+// 0.458870
+0x3abc
+// 0.152741
+0x138d
+// 0.350174
+0x2cd3
+// 0.047206
+0x60b
+// 0.105326
+0xd7b
+// 0.375441
+0x300e
+// 0.447703
+0x394e
+// -0.333922
+0xd542
+// -0.039161
+0xfafd
+// -0.050799
+0xf97f
+// 0.005188
+0xaa
+// -0.459957
+0xc520
+// -0.022893
+0xfd12
+// 0.047413
+0x612
+// -0.299037
+0xd9b9
+// 0.553342
+0x46d4
+// 0.145188
+0x1296
+// -0.269838
+0xdd76
+// -0.344543
+0xd3e6
+// 0.258252
+0x210e
+// 0.071472
+0x926
+// 0.172131
+0x1608
+// 0.038318
+0x4e8
+// 0.232983
+0x1dd2
+// 0.417221
+0x3568
+// 0.235694
+0x1e2b
+// -0.116868
+0xf10a
+// 0.185064
+0x17b0
+// 0.141518
+0x121d
+// 0.122786
+0xfb7
+// 0.004000
+0x83
+// 0.168345
+0x158c
+// -0.108457
+0xf21e
+// 0.273262
+0x22fa
+// 0.570716
+0x490d
+// 0.746756
+0x5f96
+// -0.185060
+0xe850
+// 0.477260
+0x3d17
+// -0.075174
+0xf661
+// -0.424065
+0xc9b8
+// 0.332602
+0x2a93
+// -0.240844
+0xe12c
+// -0.123592
+0xf02e
+// 0.413636
+0x34f2
+// -0.010065
+0xfeb6
+// 0.330875
+0x2a5a
+// -0.092891
+0xf41c
+// -0.235722
+0xe1d4
+// 0.137144
+0x118e
+// -0.138304
+0xee4c
+// -0.081581
+0xf58f
+// 0.277656
+0x238a
+// 0.354501
+0x2d60
+// 0.162546
+0x14ce
+// 0.041302
+0x549
+// 0.088276
+0xb4d
+// 0.225729
+0x1ce5
+// -0.049092
+0xf9b7
+// 0.066994
+0x893
+// -0.130630
+0xef48
+// -0.018250
+0xfdaa
+// 0.084468
+0xad0
+// -0.069994
+0xf70a
+// 0.274737
+0x232b
+// 0.021891
+0x2cd
+// 0.436305
+0x37d9
+// 0.124288
+0xfe9
+// 0.177627
+0x16bc
+// 0.077543
+0x9ed
+// -0.145446
+0xed62
+// -0.221641
+0xe3a1
+// -0.226014
+0xe312
+// -0.150232
+0xecc5
+// -0.066160
+0xf788
+// -0.296890
+0xd9ff
+// 0.001533
+0x32
+// 0.060334
+0x7b9
+// 0.129148
+0x1088
+// 0.119977
+0xf5b
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Input2_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Input2_q15.txt
new file mode 100644
index 0000000..d45db78
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Input2_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.116931
+0xef8
+// -0.043964
+0xfa5f
+// 0.099476
+0xcbc
+// -0.129369
+0xef71
+// -0.137899
+0xee59
+// -0.190074
+0xe7ac
+// 0.146031
+0x12b1
+// -0.046707
+0xfa05
+// 0.055112
+0x70e
+// -0.195655
+0xe6f5
+// -0.072208
+0xf6c2
+// 0.038791
+0x4f7
+// 0.087293
+0xb2c
+// -0.036457
+0xfb55
+// 0.002633
+0x56
+// -0.147286
+0xed26
+// -0.049631
+0xf9a6
+// 0.039465
+0x50d
+// 0.076408
+0x9c8
+// -0.035169
+0xfb80
+// -0.081000
+0xf5a2
+// -0.027343
+0xfc80
+// -0.083378
+0xf554
+// 0.050883
+0x683
+// -0.033583
+0xfbb4
+// -0.007948
+0xfefc
+// -0.187341
+0xe805
+// 0.060684
+0x7c4
+// 0.156505
+0x1408
+// 0.032726
+0x430
+// 0.195882
+0x1913
+// 0.036148
+0x4a0
+// 0.009417
+0x135
+// -0.006354
+0xff30
+// 0.138847
+0x11c6
+// 0.077945
+0x9fa
+// 0.036075
+0x49e
+// -0.098555
+0xf363
+// 0.168953
+0x15a0
+// -0.014307
+0xfe2b
+// -0.019484
+0xfd82
+// 0.030234
+0x3df
+// 0.032720
+0x430
+// -0.089211
+0xf495
+// 0.024838
+0x32e
+// 0.133252
+0x110e
+// -0.023941
+0xfcf0
+// 0.010988
+0x168
+// 0.056605
+0x73f
+// 0.138472
+0x11b9
+// 0.007641
+0xfa
+// -0.212575
+0xe4ca
+// -0.052244
+0xf950
+// 0.045712
+0x5da
+// 0.025461
+0x342
+// -0.085060
+0xf51d
+// -0.075838
+0xf64b
+// -0.031865
+0xfbec
+// -0.100388
+0xf326
+// 0.003398
+0x6f
+// 0.173097
+0x1628
+// 0.105698
+0xd88
+// 0.090590
+0xb98
+// 0.087919
+0xb41
+// -0.081698
+0xf58b
+// -0.020728
+0xfd59
+// 0.057188
+0x752
+// 0.002324
+0x4c
+// -0.016319
+0xfde9
+// -0.123857
+0xf025
+// 0.059653
+0x7a3
+// -0.008892
+0xfedd
+// 0.024789
+0x32c
+// 0.147418
+0x12df
+// -0.117531
+0xf0f5
+// 0.018470
+0x25d
+// 0.019238
+0x276
+// 0.026105
+0x357
+// 0.200581
+0x19ad
+// -0.128801
+0xef83
+// 0.054851
+0x705
+// -0.003637
+0xff89
+// -0.101220
+0xf30b
+// -0.077263
+0xf61c
+// 0.039184
+0x504
+// -0.068005
+0xf74c
+// -0.125797
+0xefe6
+// 0.017807
+0x247
+// 0.030370
+0x3e3
+// 0.027295
+0x37e
+// 0.015439
+0x1fa
+// 0.100731
+0xce5
+// -0.019519
+0xfd80
+// -0.223432
+0xe367
+// 0.000090
+0x3
+// 0.165044
+0x1520
+// -0.168458
+0xea70
+// -0.027258
+0xfc83
+// 0.014934
+0x1e9
+// 0.032490
+0x429
+// -0.015146
+0xfe10
+// 0.029183
+0x3bc
+// 0.110480
+0xe24
+// 0.103387
+0xd3c
+// 0.125119
+0x1004
+// 0.042068
+0x562
+// 0.074813
+0x993
+// 0.106332
+0xd9c
+// -0.105463
+0xf280
+// -0.046829
+0xfa02
+// -0.148238
+0xed07
+// -0.009464
+0xfeca
+// 0.113086
+0xe7a
+// -0.064527
+0xf7be
+// -0.059584
+0xf860
+// 0.076743
+0x9d3
+// 0.070266
+0x8fe
+// 0.028874
+0x3b2
+// 0.017561
+0x23f
+// 0.035979
+0x49b
+// -0.004291
+0xff73
+// -0.059008
+0xf872
+// 0.106374
+0xd9e
+// 0.053954
+0x6e8
+// -0.109861
+0xf1f0
+// 0.006777
+0xde
+// -0.134565
+0xeec7
+// -0.167303
+0xea96
+// -0.083254
+0xf558
+// 0.240404
+0x1ec6
+// 0.051868
+0x6a4
+// -0.090264
+0xf472
+// -0.012027
+0xfe76
+// 0.122697
+0xfb5
+// -0.031499
+0xfbf8
+// 0.064355
+0x83d
+// -0.035734
+0xfb6d
+// 0.076140
+0x9bf
+// 0.128245
+0x106a
+// -0.099789
+0xf33a
+// -0.097540
+0xf384
+// 0.102394
+0xd1b
+// -0.142477
+0xedc3
+// 0.175716
+0x167e
+// 0.055369
+0x716
+// -0.103826
+0xf2b6
+// 0.055498
+0x71b
+// 0.087463
+0xb32
+// -0.167233
+0xea98
+// 0.052947
+0x6c7
+// 0.059919
+0x7ab
+// 0.112123
+0xe5a
+// 0.041143
+0x544
+// 0.026289
+0x35d
+// -0.121540
+0xf071
+// 0.004987
+0xa3
+// 0.046207
+0x5ea
+// 0.097083
+0xc6d
+// -0.083529
+0xf54f
+// -0.135862
+0xee9c
+// 0.098214
+0xc92
+// 0.015572
+0x1fe
+// 0.040467
+0x52e
+// -0.033134
+0xfbc2
+// -0.101266
+0xf30a
+// -0.082211
+0xf57a
+// -0.045820
+0xfa23
+// 0.125238
+0x1008
+// -0.069822
+0xf710
+// -0.175695
+0xe983
+// 0.043476
+0x591
+// -0.025584
+0xfcba
+// 0.156356
+0x1403
+// 0.164570
+0x1511
+// 0.044915
+0x5c0
+// 0.376727
+0x3039
+// -0.068826
+0xf731
+// 0.172869
+0x1621
+// 0.057541
+0x75e
+// 0.131920
+0x10e3
+// 0.017784
+0x247
+// 0.039679
+0x514
+// 0.141439
+0x121b
+// 0.168662
+0x1597
+// -0.125797
+0xefe6
+// -0.014753
+0xfe1d
+// -0.019138
+0xfd8d
+// 0.001955
+0x40
+// -0.173278
+0xe9d2
+// -0.008624
+0xfee5
+// 0.017862
+0x249
+// -0.112655
+0xf195
+// 0.208459
+0x1aaf
+// 0.054696
+0x700
+// -0.101655
+0xf2fd
+// -0.129799
+0xef63
+// 0.097291
+0xc74
+// 0.026926
+0x372
+// 0.064846
+0x84d
+// 0.014435
+0x1d9
+// 0.087771
+0xb3c
+// 0.157179
+0x141e
+// 0.088792
+0xb5e
+// -0.044027
+0xfa5d
+// 0.069719
+0x8ed
+// 0.053314
+0x6d3
+// 0.046257
+0x5ec
+// 0.001507
+0x31
+// 0.063420
+0x81e
+// -0.040859
+0xfac5
+// 0.102945
+0xd2d
+// 0.215004
+0x1b85
+// 0.281323
+0x2402
+// -0.069717
+0xf714
+// 0.179797
+0x1704
+// -0.028320
+0xfc60
+// -0.159757
+0xeb8d
+// 0.125300
+0x100a
+// -0.090733
+0xf463
+// -0.046560
+0xfa0a
+// 0.155828
+0x13f2
+// -0.003792
+0xff84
+// 0.124650
+0xff5
+// -0.034995
+0xfb85
+// -0.088803
+0xf4a2
+// 0.051666
+0x69d
+// -0.052103
+0xf955
+// -0.030734
+0xfc11
+// 0.104600
+0xd64
+// 0.133550
+0x1118
+// 0.061235
+0x7d7
+// 0.015560
+0x1fe
+// 0.033256
+0x442
+// 0.085038
+0xae3
+// -0.018494
+0xfda2
+// 0.025238
+0x33b
+// -0.049212
+0xf9b3
+// -0.006875
+0xff1f
+// 0.031821
+0x413
+// -0.026369
+0xfca0
+// 0.103501
+0xd40
+// 0.008247
+0x10e
+// 0.164368
+0x150a
+// 0.046823
+0x5fe
+// 0.066917
+0x891
+// 0.029212
+0x3bd
+// -0.054793
+0xf8fd
+// -0.083498
+0xf550
+// -0.085146
+0xf51a
+// -0.056597
+0xf8c1
+// -0.024924
+0xfccf
+// -0.111847
+0xf1af
+// 0.000577
+0x13
+// 0.022729
+0x2e9
+// 0.048654
+0x63a
+// 0.045199
+0x5c9
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference10_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference10_q15.txt
new file mode 100644
index 0000000..ac16d35
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference10_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.310387
+0x27bb
+// 0.116701
+0xef0
+// 0.264053
+0x21cc
+// 0.343402
+0x2bf5
+// 0.366045
+0x2edb
+// 0.504540
+0x4095
+// 0.387632
+0x319e
+// 0.123981
+0xfdf
+// 0.146292
+0x12ba
+// 0.519356
+0x427a
+// 0.191673
+0x1889
+// 0.102968
+0xd2e
+// 0.231713
+0x1da9
+// 0.096773
+0xc63
+// 0.006988
+0xe5
+// 0.390963
+0x320b
+// 0.131743
+0x10dd
+// 0.104758
+0xd69
+// 0.202819
+0x19f6
+// 0.093355
+0xbf3
+// 0.215011
+0x1b85
+// 0.072582
+0x94a
+// 0.221321
+0x1c54
+// 0.135066
+0x114a
+// 0.089144
+0xb69
+// 0.021097
+0x2b3
+// 0.497287
+0x3fa7
+// 0.161082
+0x149e
+// 0.415432
+0x352d
+// 0.086870
+0xb1f
+// 0.519957
+0x428e
+// 0.095952
+0xc48
+// 0.024997
+0x333
+// 0.016867
+0x229
+// 0.368561
+0x2f2d
+// 0.206902
+0x1a7c
+// 0.095760
+0xc42
+// 0.261607
+0x217c
+// 0.448476
+0x3968
+// 0.037978
+0x4dc
+// 0.051719
+0x69f
+// 0.080255
+0xa46
+// 0.086853
+0xb1e
+// 0.236806
+0x1e50
+// 0.065931
+0x870
+// 0.353711
+0x2d46
+// 0.063549
+0x822
+// 0.029167
+0x3bc
+// 0.150256
+0x133c
+// 0.367567
+0x2f0c
+// 0.020283
+0x299
+// 0.564269
+0x483a
+// 0.138678
+0x11c0
+// 0.121341
+0xf88
+// 0.067586
+0x8a7
+// 0.225787
+0x1ce7
+// 0.201308
+0x19c4
+// 0.084584
+0xad4
+// 0.266474
+0x221c
+// 0.009020
+0x128
+// 0.459475
+0x3ad0
+// 0.280571
+0x23ea
+// 0.240465
+0x1ec8
+// 0.233376
+0x1ddf
+// 0.216864
+0x1bc2
+// 0.055021
+0x70b
+// 0.151803
+0x136e
+// 0.006168
+0xca
+// 0.043318
+0x58b
+// 0.328772
+0x2a15
+// 0.158344
+0x1445
+// 0.023603
+0x305
+// 0.065800
+0x86c
+// 0.391312
+0x3217
+// 0.311980
+0x27ef
+// 0.049028
+0x647
+// 0.051066
+0x689
+// 0.069294
+0x8df
+// 0.532430
+0x4427
+// 0.341894
+0x2bc3
+// 0.145598
+0x12a3
+// 0.009655
+0x13c
+// 0.268682
+0x2264
+// 0.205090
+0x1a40
+// 0.104011
+0xd50
+// 0.180514
+0x171b
+// 0.333921
+0x2abe
+// 0.047268
+0x60d
+// 0.080615
+0xa52
+// 0.072452
+0x946
+// 0.040981
+0x53f
+// 0.267386
+0x223a
+// 0.051812
+0x6a2
+// 0.593088
+0x4bea
+// 0.000240
+0x8
+// 0.438100
+0x3814
+// 0.447162
+0x393d
+// 0.072355
+0x943
+// 0.039643
+0x513
+// 0.086244
+0xb0a
+// 0.040205
+0x525
+// 0.077464
+0x9ea
+// 0.293263
+0x258a
+// 0.274435
+0x2321
+// 0.332121
+0x2a83
+// 0.111668
+0xe4b
+// 0.198588
+0x196b
+// 0.282252
+0x2421
+// 0.279946
+0x23d5
+// 0.124304
+0xfe9
+// 0.393489
+0x325e
+// 0.025122
+0x337
+// 0.300181
+0x266c
+// 0.171283
+0x15ed
+// 0.158163
+0x143f
+// 0.203709
+0x1a13
+// 0.186518
+0x17e0
+// 0.076645
+0x9d0
+// 0.046614
+0x5f7
+// 0.095504
+0xc39
+// 0.011389
+0x175
+// 0.156633
+0x140d
+// 0.282363
+0x2424
+// 0.143218
+0x1255
+// 0.291621
+0x2554
+// 0.017989
+0x24d
+// 0.357195
+0x2db9
+// 0.444095
+0x38d8
+// 0.220993
+0x1c49
+// 0.638140
+0x51af
+// 0.137680
+0x11a0
+// 0.239599
+0x1eab
+// 0.031926
+0x416
+// 0.325691
+0x29b0
+// 0.083612
+0xab4
+// 0.170827
+0x15de
+// 0.094855
+0xc24
+// 0.202108
+0x19df
+// 0.340420
+0x2b93
+// 0.264883
+0x21e8
+// 0.258914
+0x2124
+// 0.271798
+0x22ca
+// 0.378198
+0x3069
+// 0.466427
+0x3bb4
+// 0.146974
+0x12d0
+// 0.275601
+0x2347
+// 0.147315
+0x12db
+// 0.232166
+0x1db8
+// 0.443911
+0x38d2
+// 0.140544
+0x11fd
+// 0.159052
+0x145c
+// 0.297624
+0x2619
+// 0.109212
+0xdfb
+// 0.069782
+0x8ef
+// 0.322621
+0x294c
+// 0.013237
+0x1b2
+// 0.122654
+0xfb3
+// 0.257702
+0x20fc
+// 0.221724
+0x1c61
+// 0.360638
+0x2e29
+// 0.260703
+0x215f
+// 0.041334
+0x54a
+// 0.107417
+0xdc0
+// 0.087953
+0xb42
+// 0.268806
+0x2268
+// 0.218224
+0x1bef
+// 0.121626
+0xf91
+// 0.332438
+0x2a8d
+// 0.185339
+0x17b9
+// 0.466374
+0x3bb2
+// 0.115403
+0xec6
+// 0.067910
+0x8b1
+// 0.415039
+0x3520
+// 0.436841
+0x37ea
+// 0.119224
+0xf43
+// 1.000000
+0x7fff
+// 0.182696
+0x1763
+// 0.458870
+0x3abc
+// 0.152741
+0x138d
+// 0.350174
+0x2cd3
+// 0.047206
+0x60b
+// 0.105326
+0xd7b
+// 0.375441
+0x300e
+// 0.447703
+0x394e
+// 0.333922
+0x2abe
+// 0.039161
+0x503
+// 0.050799
+0x681
+// 0.005188
+0xaa
+// 0.459957
+0x3ae0
+// 0.022893
+0x2ee
+// 0.047413
+0x612
+// 0.299037
+0x2647
+// 0.553342
+0x46d4
+// 0.145188
+0x1296
+// 0.269838
+0x228a
+// 0.344543
+0x2c1a
+// 0.258252
+0x210e
+// 0.071472
+0x926
+// 0.172131
+0x1608
+// 0.038318
+0x4e8
+// 0.232983
+0x1dd2
+// 0.417221
+0x3568
+// 0.235694
+0x1e2b
+// 0.116868
+0xef6
+// 0.185064
+0x17b0
+// 0.141518
+0x121d
+// 0.122786
+0xfb7
+// 0.004000
+0x83
+// 0.168345
+0x158c
+// 0.108457
+0xde2
+// 0.273262
+0x22fa
+// 0.570716
+0x490d
+// 0.746756
+0x5f96
+// 0.185060
+0x17b0
+// 0.477260
+0x3d17
+// 0.075174
+0x99f
+// 0.424065
+0x3648
+// 0.332602
+0x2a93
+// 0.240844
+0x1ed4
+// 0.123592
+0xfd2
+// 0.413636
+0x34f2
+// 0.010065
+0x14a
+// 0.330875
+0x2a5a
+// 0.092891
+0xbe4
+// 0.235722
+0x1e2c
+// 0.137144
+0x118e
+// 0.138304
+0x11b4
+// 0.081581
+0xa71
+// 0.277656
+0x238a
+// 0.354501
+0x2d60
+// 0.162546
+0x14ce
+// 0.041302
+0x549
+// 0.088276
+0xb4d
+// 0.225729
+0x1ce5
+// 0.049092
+0x649
+// 0.066994
+0x893
+// 0.130630
+0x10b8
+// 0.018250
+0x256
+// 0.084468
+0xad0
+// 0.069994
+0x8f6
+// 0.274737
+0x232b
+// 0.021891
+0x2cd
+// 0.436305
+0x37d9
+// 0.124288
+0xfe9
+// 0.177627
+0x16bc
+// 0.077543
+0x9ed
+// 0.145446
+0x129e
+// 0.221641
+0x1c5f
+// 0.226014
+0x1cee
+// 0.150232
+0x133b
+// 0.066160
+0x878
+// 0.296890
+0x2601
+// 0.001533
+0x32
+// 0.060334
+0x7b9
+// 0.129148
+0x1088
+// 0.119977
+0xf5b
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference1_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference1_q15.txt
new file mode 100644
index 0000000..4cb0320
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference1_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.427317
+0x36b2
+// -0.160665
+0xeb6f
+// 0.363529
+0x2e88
+// -0.472770
+0xc37c
+// -0.503943
+0xbf7f
+// -0.694614
+0xa717
+// 0.533663
+0x444f
+// -0.170689
+0xea27
+// 0.201405
+0x19c8
+// -0.715011
+0xa47b
+// -0.263881
+0xde39
+// 0.141759
+0x1225
+// 0.319006
+0x28d5
+// -0.133231
+0xeef2
+// 0.009621
+0x13b
+// -0.538249
+0xbb1b
+// -0.181373
+0xe8c9
+// 0.144223
+0x1276
+// 0.279227
+0x23be
+// -0.128524
+0xef8d
+// -0.296011
+0xda1c
+// -0.099925
+0xf336
+// -0.304699
+0xd900
+// 0.185949
+0x17cd
+// -0.122726
+0xf04b
+// -0.029045
+0xfc48
+// -0.684629
+0xa85e
+// 0.221766
+0x1c63
+// 0.571937
+0x4935
+// 0.119597
+0xf4f
+// 0.715838
+0x5ba1
+// 0.132100
+0x10e9
+// 0.034414
+0x468
+// -0.023221
+0xfd07
+// 0.507408
+0x40f3
+// 0.284847
+0x2476
+// 0.131835
+0x10e0
+// -0.360162
+0xd1e6
+// 0.617429
+0x4f08
+// -0.052286
+0xf94f
+// -0.071203
+0xf6e3
+// 0.110490
+0xe25
+// 0.119573
+0xf4e
+// -0.326017
+0xd645
+// 0.090769
+0xb9e
+// 0.486963
+0x3e55
+// -0.087490
+0xf4cd
+// 0.040155
+0x524
+// 0.206861
+0x1a7a
+// 0.506039
+0x40c6
+// 0.027924
+0x393
+// -0.776844
+0x9c90
+// -0.190922
+0xe790
+// 0.167053
+0x1562
+// 0.093047
+0xbe9
+// -0.310847
+0xd836
+// -0.277147
+0xdc86
+// -0.116450
+0xf118
+// -0.366861
+0xd10b
+// 0.012418
+0x197
+// 0.632572
+0x50f8
+// 0.386269
+0x3171
+// 0.331055
+0x2a60
+// 0.321295
+0x2920
+// -0.298562
+0xd9c9
+// -0.075749
+0xf64e
+// 0.208991
+0x1ac0
+// 0.008491
+0x116
+// -0.059637
+0xf85e
+// -0.452629
+0xc610
+// 0.217997
+0x1be7
+// -0.032495
+0xfbd7
+// 0.090588
+0xb98
+// 0.538730
+0x44f5
+// -0.429511
+0xc906
+// 0.067498
+0x8a4
+// 0.070304
+0x900
+// 0.095399
+0xc36
+// 0.733011
+0x5dd3
+// -0.470695
+0xc3c0
+// 0.200449
+0x19a8
+// -0.013292
+0xfe4c
+// -0.369902
+0xd0a7
+// -0.282352
+0xdbdc
+// 0.143195
+0x1254
+// -0.248519
+0xe031
+// -0.459718
+0xc528
+// 0.065075
+0x854
+// 0.110984
+0xe35
+// 0.099747
+0xcc5
+// 0.056420
+0x739
+// 0.368117
+0x2f1e
+// -0.071331
+0xf6df
+// -0.816520
+0x977c
+// 0.000330
+0xb
+// 0.603144
+0x4d34
+// -0.615620
+0xb133
+// -0.099612
+0xf340
+// 0.054577
+0x6fc
+// 0.118735
+0xf33
+// -0.055352
+0xf8ea
+// 0.106647
+0xda7
+// 0.403742
+0x33ae
+// 0.377821
+0x305c
+// 0.457240
+0x3a87
+// 0.153736
+0x13ae
+// 0.273402
+0x22ff
+// 0.388585
+0x31bd
+// -0.385410
+0xceab
+// -0.171133
+0xea18
+// -0.541727
+0xbaa9
+// -0.034586
+0xfb93
+// 0.413267
+0x34e6
+// -0.235810
+0xe1d1
+// -0.217747
+0xe421
+// 0.280451
+0x23e6
+// 0.256784
+0x20de
+// 0.105519
+0xd82
+// 0.064175
+0x837
+// 0.131483
+0x10d4
+// -0.015680
+0xfdfe
+// -0.215640
+0xe466
+// 0.388737
+0x31c2
+// 0.197173
+0x193d
+// -0.401482
+0xcc9c
+// 0.024765
+0x32c
+// -0.491759
+0xc10e
+// -0.611398
+0xb1be
+// -0.304247
+0xd90e
+// 0.878544
+0x7074
+// 0.189548
+0x1843
+// -0.329863
+0xd5c7
+// -0.043953
+0xfa60
+// 0.448388
+0x3965
+// -0.115111
+0xf144
+// 0.235182
+0x1e1a
+// -0.130589
+0xef49
+// 0.278248
+0x239e
+// 0.468666
+0x3bfd
+// -0.364672
+0xd152
+// -0.356454
+0xd260
+// 0.374192
+0x2fe6
+// -0.520675
+0xbd5b
+// 0.642143
+0x5232
+// 0.202342
+0x19e6
+// -0.379427
+0xcf6f
+// 0.202813
+0x19f6
+// 0.319629
+0x28ea
+// -0.611145
+0xb1c6
+// 0.193491
+0x18c4
+// 0.218971
+0x1c07
+// 0.409747
+0x3473
+// 0.150355
+0x133f
+// 0.096071
+0xc4c
+// -0.444161
+0xc726
+// 0.018224
+0x255
+// 0.168861
+0x159d
+// 0.354786
+0x2d6a
+// -0.305253
+0xd8ed
+// -0.496500
+0xc073
+// 0.358917
+0x2df1
+// 0.056906
+0x749
+// 0.147884
+0x12ee
+// -0.121087
+0xf080
+// -0.370072
+0xd0a1
+// -0.300435
+0xd98b
+// -0.167446
+0xea91
+// 0.457676
+0x3a95
+// -0.255161
+0xdf57
+// -0.642069
+0xadd1
+// 0.158879
+0x1456
+// -0.093493
+0xf408
+// 0.571396
+0x4923
+// 0.601411
+0x4cfb
+// 0.164140
+0x1503
+// 1.376727
+0x7fff
+// -0.251522
+0xdfce
+// 0.631739
+0x50dd
+// 0.210282
+0x1aeb
+// 0.482095
+0x3db5
+// 0.064990
+0x852
+// 0.145005
+0x1290
+// 0.516879
+0x4229
+// 0.616365
+0x4ee5
+// -0.459720
+0xc528
+// -0.053914
+0xf919
+// -0.069937
+0xf70c
+// 0.007143
+0xea
+// -0.633236
+0xaef2
+// -0.031517
+0xfbf7
+// 0.065275
+0x85b
+// -0.411693
+0xcb4e
+// 0.761801
+0x6183
+// 0.199884
+0x1996
+// -0.371493
+0xd073
+// -0.474342
+0xc349
+// 0.355543
+0x2d82
+// 0.098398
+0xc98
+// 0.236978
+0x1e55
+// 0.052753
+0x6c1
+// 0.320755
+0x290e
+// 0.574400
+0x4986
+// 0.324486
+0x2989
+// -0.160895
+0xeb68
+// 0.254783
+0x209d
+// 0.194831
+0x18f0
+// 0.169043
+0x15a3
+// 0.005507
+0xb4
+// 0.231765
+0x1daa
+// -0.149316
+0xece3
+// 0.376208
+0x3028
+// 0.785720
+0x6492
+// 1.028079
+0x7fff
+// -0.254778
+0xdf63
+// 0.657057
+0x541a
+// -0.103494
+0xf2c1
+// -0.583821
+0xb545
+// 0.457902
+0x3a9d
+// -0.331577
+0xd58f
+// -0.170152
+0xea38
+// 0.569463
+0x48e4
+// -0.013857
+0xfe3a
+// 0.455525
+0x3a4f
+// -0.127886
+0xefa1
+// -0.324524
+0xd676
+// 0.188810
+0x182b
+// -0.190406
+0xe7a1
+// -0.112315
+0xf1a0
+// 0.382256
+0x30ee
+// 0.488051
+0x3e78
+// 0.223781
+0x1ca5
+// 0.056862
+0x747
+// 0.121532
+0xf8e
+// 0.310767
+0x27c7
+// -0.067586
+0xf759
+// 0.092232
+0xbce
+// -0.179841
+0xe8fb
+// -0.025126
+0xfcc9
+// 0.116290
+0xee3
+// -0.096362
+0xf3aa
+// 0.378237
+0x306a
+// 0.030138
+0x3dc
+// 0.600672
+0x4ce3
+// 0.171111
+0x15e7
+// 0.244544
+0x1f4d
+// 0.106755
+0xdaa
+// -0.200239
+0xe65f
+// -0.305140
+0xd8f1
+// -0.311160
+0xd82c
+// -0.206829
+0xe587
+// -0.091085
+0xf457
+// -0.408737
+0xcbaf
+// 0.002110
+0x45
+// 0.083063
+0xaa2
+// 0.177802
+0x16c2
+// 0.165176
+0x1524
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference2_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference2_q15.txt
new file mode 100644
index 0000000..4b175a1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference2_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.193456
+0x18c3
+// -0.072736
+0xf6b1
+// 0.164577
+0x1511
+// -0.214033
+0xe49b
+// -0.228146
+0xe2cc
+// -0.314467
+0xd7c0
+// 0.241600
+0x1eed
+// -0.077274
+0xf61c
+// 0.091180
+0xbac
+// -0.323701
+0xd691
+// -0.119464
+0xf0b5
+// 0.064177
+0x837
+// 0.144421
+0x127c
+// -0.060316
+0xf848
+// 0.004356
+0x8f
+// -0.243677
+0xe0cf
+// -0.082112
+0xf57d
+// 0.065293
+0x85c
+// 0.126412
+0x102e
+// -0.058186
+0xf88d
+// -0.134010
+0xeed9
+// -0.045238
+0xfa36
+// -0.137943
+0xee58
+// 0.084183
+0xac7
+// -0.055561
+0xf8e3
+// -0.013149
+0xfe51
+// -0.309946
+0xd854
+// 0.100398
+0xcda
+// 0.258928
+0x2125
+// 0.054144
+0x6ee
+// 0.324075
+0x297b
+// 0.059805
+0x7a8
+// 0.015580
+0x1ff
+// -0.010513
+0xfea8
+// 0.229714
+0x1d67
+// 0.128956
+0x1082
+// 0.059684
+0x7a4
+// -0.163053
+0xeb21
+// 0.279523
+0x23c7
+// -0.023671
+0xfcf8
+// -0.032235
+0xfbe0
+// 0.050021
+0x667
+// 0.054133
+0x6ee
+// -0.147595
+0xed1c
+// 0.041093
+0x543
+// 0.220458
+0x1c38
+// -0.039609
+0xfaee
+// 0.018179
+0x254
+// 0.093650
+0xbfd
+// 0.229095
+0x1d53
+// 0.012642
+0x19e
+// -0.351694
+0xd2fc
+// -0.086434
+0xf4f0
+// 0.075628
+0x9ae
+// 0.042124
+0x564
+// -0.140727
+0xedfd
+// -0.125470
+0xeff1
+// -0.052719
+0xf940
+// -0.166086
+0xeabe
+// 0.005622
+0xb8
+// 0.286379
+0x24a8
+// 0.174872
+0x1662
+// 0.149875
+0x132f
+// 0.145457
+0x129e
+// -0.135165
+0xeeb3
+// -0.034293
+0xfb9c
+// 0.094615
+0xc1c
+// 0.003844
+0x7e
+// -0.026999
+0xfc8b
+// -0.204915
+0xe5c5
+// 0.098692
+0xca2
+// -0.014711
+0xfe1e
+// 0.041011
+0x540
+// 0.243894
+0x1f38
+// -0.194448
+0xe71c
+// 0.030558
+0x3e9
+// 0.031828
+0x413
+// 0.043189
+0x587
+// 0.331849
+0x2a7a
+// -0.213093
+0xe4b9
+// 0.090747
+0xb9e
+// -0.006017
+0xff3b
+// -0.167462
+0xea91
+// -0.127827
+0xefa3
+// 0.064828
+0x84c
+// -0.112510
+0xf199
+// -0.208124
+0xe55c
+// 0.029461
+0x3c5
+// 0.050245
+0x66e
+// 0.045157
+0x5c8
+// 0.025542
+0x345
+// 0.166654
+0x1555
+// -0.032293
+0xfbde
+// -0.369656
+0xd0af
+// 0.000149
+0x5
+// 0.273056
+0x22f4
+// -0.278704
+0xdc53
+// -0.045097
+0xfa3a
+// 0.024708
+0x32a
+// 0.053754
+0x6e1
+// -0.025059
+0xfccb
+// 0.048281
+0x62e
+// 0.182783
+0x1765
+// 0.171048
+0x15e5
+// 0.207002
+0x1a7f
+// 0.069600
+0x8e9
+// 0.123775
+0xfd8
+// 0.175920
+0x1685
+// -0.174483
+0xe9ab
+// -0.077475
+0xf615
+// -0.245251
+0xe09c
+// -0.015658
+0xfdff
+// 0.187095
+0x17f3
+// -0.106756
+0xf256
+// -0.098579
+0xf362
+// 0.126966
+0x1040
+// 0.116252
+0xee1
+// 0.047771
+0x61d
+// 0.029053
+0x3b8
+// 0.059525
+0x79f
+// -0.007099
+0xff17
+// -0.097625
+0xf381
+// 0.175989
+0x1687
+// 0.089264
+0xb6d
+// -0.181759
+0xe8bc
+// 0.011212
+0x16f
+// -0.222630
+0xe381
+// -0.276793
+0xdc92
+// -0.137739
+0xee5f
+// 0.397735
+0x32e9
+// 0.085812
+0xafc
+// -0.149336
+0xece3
+// -0.019899
+0xfd74
+// 0.202995
+0x19fc
+// -0.052113
+0xf954
+// 0.106472
+0xda1
+// -0.059121
+0xf86f
+// 0.125969
+0x1020
+// 0.212175
+0x1b29
+// -0.165095
+0xeade
+// -0.161374
+0xeb58
+// 0.169404
+0x15af
+// -0.235721
+0xe1d4
+// 0.290711
+0x2536
+// 0.091605
+0xbba
+// -0.171774
+0xea03
+// 0.091818
+0xbc1
+// 0.144703
+0x1286
+// -0.276678
+0xdc96
+// 0.087597
+0xb36
+// 0.099133
+0xcb0
+// 0.185501
+0x17be
+// 0.068069
+0x8b6
+// 0.043493
+0x591
+// -0.201081
+0xe643
+// 0.008250
+0x10e
+// 0.076447
+0x9c9
+// 0.160619
+0x148f
+// -0.138195
+0xee50
+// -0.224776
+0xe33b
+// 0.162489
+0x14cc
+// 0.025762
+0x34c
+// 0.066950
+0x892
+// -0.054819
+0xf8fc
+// -0.167539
+0xea8e
+// -0.136013
+0xee97
+// -0.075806
+0xf64c
+// 0.207200
+0x1a86
+// -0.115517
+0xf137
+// -0.290678
+0xdacb
+// 0.071928
+0x935
+// -0.042326
+0xfa95
+// 0.258683
+0x211d
+// 0.272272
+0x22da
+// 0.074309
+0x983
+// 0.623273
+0x4fc7
+// -0.113869
+0xf16d
+// 0.286002
+0x249c
+// 0.095199
+0xc2f
+// 0.218254
+0x1bf0
+// 0.029422
+0x3c4
+// 0.065647
+0x867
+// 0.234002
+0x1df4
+// 0.279041
+0x23b8
+// -0.208125
+0xe55c
+// -0.024408
+0xfce0
+// -0.031662
+0xfbf3
+// 0.003234
+0x6a
+// -0.286679
+0xdb4e
+// -0.014269
+0xfe2c
+// 0.029551
+0x3c8
+// -0.186382
+0xe825
+// 0.344883
+0x2c25
+// 0.090492
+0xb95
+// -0.168183
+0xea79
+// -0.214744
+0xe483
+// 0.160962
+0x149a
+// 0.044547
+0x5b4
+// 0.107285
+0xdbc
+// 0.023883
+0x30f
+// 0.145212
+0x1296
+// 0.260043
+0x2149
+// 0.146902
+0x12ce
+// -0.072840
+0xf6ad
+// 0.115346
+0xec4
+// 0.088204
+0xb4a
+// 0.076529
+0x9cc
+// 0.002493
+0x52
+// 0.104925
+0xd6e
+// -0.067599
+0xf759
+// 0.170317
+0x15cd
+// 0.355712
+0x2d88
+// 0.465433
+0x3b93
+// -0.115343
+0xf13c
+// 0.297463
+0x2613
+// -0.046854
+0xfa01
+// -0.264308
+0xde2b
+// 0.207302
+0x1a89
+// -0.150112
+0xecc9
+// -0.077031
+0xf624
+// 0.257808
+0x2100
+// -0.006273
+0xff32
+// 0.206226
+0x1a66
+// -0.057897
+0xf897
+// -0.146919
+0xed32
+// 0.085478
+0xaf1
+// -0.086201
+0xf4f7
+// -0.050847
+0xf97e
+// 0.173056
+0x1627
+// 0.220951
+0x1c48
+// 0.101310
+0xcf8
+// 0.025742
+0x34c
+// 0.055020
+0x70b
+// 0.140691
+0x1202
+// -0.030598
+0xfc15
+// 0.041755
+0x558
+// -0.081418
+0xf594
+// -0.011375
+0xfe8b
+// 0.052647
+0x6bd
+// -0.043625
+0xfa6a
+// 0.171236
+0x15eb
+// 0.013644
+0x1bf
+// 0.271937
+0x22cf
+// 0.077466
+0x9ea
+// 0.110710
+0xe2c
+// 0.048330
+0x630
+// -0.090653
+0xf465
+// -0.138143
+0xee51
+// -0.140868
+0xedf8
+// -0.093636
+0xf404
+// -0.041236
+0xfab9
+// -0.185044
+0xe850
+// 0.000955
+0x1f
+// 0.037604
+0x4d0
+// 0.080495
+0xa4e
+// 0.074778
+0x992
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference3_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference3_q15.txt
new file mode 100644
index 0000000..e02f533
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference3_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.036294
+0x4a5
+// 0.005131
+0xa8
+// 0.026267
+0x35d
+// 0.044425
+0x5b0
+// 0.050477
+0x676
+// 0.095900
+0xc46
+// 0.056606
+0x73f
+// 0.005791
+0xbe
+// 0.008063
+0x108
+// 0.101615
+0xd02
+// 0.013840
+0x1c6
+// 0.003994
+0x83
+// 0.020227
+0x297
+// 0.003528
+0x74
+// 0.000018
+0x1
+// 0.057583
+0x75f
+// 0.006539
+0xd6
+// 0.004134
+0x87
+// 0.015497
+0x1fc
+// 0.003283
+0x6c
+// 0.017416
+0x23b
+// 0.001985
+0x41
+// 0.018453
+0x25d
+// 0.006873
+0xe1
+// 0.002994
+0x62
+// 0.000168
+0x5
+// 0.093162
+0xbed
+// 0.009775
+0x140
+// 0.065017
+0x852
+// 0.002843
+0x5d
+// 0.101850
+0xd09
+// 0.003468
+0x72
+// 0.000235
+0x8
+// 0.000107
+0x4
+// 0.051174
+0x68d
+// 0.016127
+0x210
+// 0.003455
+0x71
+// 0.025783
+0x34d
+// 0.075771
+0x9b3
+// 0.000543
+0x12
+// 0.001008
+0x21
+// 0.002426
+0x50
+// 0.002842
+0x5d
+// 0.021126
+0x2b4
+// 0.001638
+0x36
+// 0.047133
+0x608
+// 0.001521
+0x32
+// 0.000320
+0xb
+// 0.008505
+0x117
+// 0.050898
+0x684
+// 0.000155
+0x5
+// 0.119950
+0xf5b
+// 0.007245
+0xed
+// 0.005547
+0xb6
+// 0.001721
+0x38
+// 0.019205
+0x275
+// 0.015267
+0x1f4
+// 0.002695
+0x58
+// 0.026751
+0x36d
+// 0.000031
+0x1
+// 0.079534
+0xa2e
+// 0.029656
+0x3cc
+// 0.021784
+0x2ca
+// 0.020518
+0x2a0
+// 0.017717
+0x245
+// 0.001140
+0x25
+// 0.008681
+0x11c
+// 0.000014
+0x0
+// 0.000707
+0x17
+// 0.040721
+0x536
+// 0.009446
+0x136
+// 0.000210
+0x7
+// 0.001631
+0x35
+// 0.057686
+0x762
+// 0.036667
+0x4b2
+// 0.000906
+0x1e
+// 0.000982
+0x20
+// 0.001809
+0x3b
+// 0.106795
+0xdab
+// 0.044036
+0x5a3
+// 0.007986
+0x106
+// 0.000035
+0x1
+// 0.027196
+0x37b
+// 0.015846
+0x207
+// 0.004076
+0x86
+// 0.012276
+0x192
+// 0.042006
+0x560
+// 0.000842
+0x1c
+// 0.002448
+0x50
+// 0.001978
+0x41
+// 0.000633
+0x15
+// 0.026934
+0x373
+// 0.001011
+0x21
+// 0.132515
+0x10f6
+// 0.000000
+0x0
+// 0.072306
+0x941
+// 0.075328
+0x9a4
+// 0.001972
+0x41
+// 0.000592
+0x13
+// 0.002802
+0x5c
+// 0.000609
+0x14
+// 0.002261
+0x4a
+// 0.032400
+0x426
+// 0.028373
+0x3a2
+// 0.041555
+0x552
+// 0.004698
+0x9a
+// 0.014857
+0x1e7
+// 0.030012
+0x3d7
+// 0.029524
+0x3c7
+// 0.005821
+0xbf
+// 0.058330
+0x777
+// 0.000238
+0x8
+// 0.033946
+0x458
+// 0.011052
+0x16a
+// 0.009424
+0x135
+// 0.015633
+0x200
+// 0.013106
+0x1ad
+// 0.002213
+0x49
+// 0.000819
+0x1b
+// 0.003436
+0x71
+// 0.000049
+0x2
+// 0.009243
+0x12f
+// 0.030036
+0x3d8
+// 0.007727
+0xfd
+// 0.032038
+0x41a
+// 0.000122
+0x4
+// 0.048066
+0x627
+// 0.074298
+0x983
+// 0.018399
+0x25b
+// 0.153412
+0x13a3
+// 0.007141
+0xea
+// 0.021627
+0x2c5
+// 0.000384
+0xd
+// 0.039961
+0x51d
+// 0.002634
+0x56
+// 0.010994
+0x168
+// 0.003390
+0x6f
+// 0.015388
+0x1f8
+// 0.043657
+0x597
+// 0.026432
+0x362
+// 0.025254
+0x33c
+// 0.027830
+0x390
+// 0.053885
+0x6e6
+// 0.081959
+0xa7e
+// 0.008138
+0x10b
+// 0.028615
+0x3aa
+// 0.008176
+0x10c
+// 0.020306
+0x299
+// 0.074237
+0x981
+// 0.007441
+0xf4
+// 0.009530
+0x138
+// 0.033370
+0x445
+// 0.004493
+0x93
+// 0.001834
+0x3c
+// 0.039211
+0x505
+// 0.000066
+0x2
+// 0.005667
+0xba
+// 0.025019
+0x334
+// 0.018520
+0x25f
+// 0.048997
+0x646
+// 0.025605
+0x347
+// 0.000644
+0x15
+// 0.004347
+0x8e
+// 0.002914
+0x5f
+// 0.027221
+0x37c
+// 0.017940
+0x24c
+// 0.005573
+0xb7
+// 0.041634
+0x554
+// 0.012941
+0x1a8
+// 0.081940
+0xa7d
+// 0.005017
+0xa4
+// 0.001737
+0x39
+// 0.064894
+0x84e
+// 0.071891
+0x934
+// 0.005355
+0xaf
+// 0.376727
+0x3039
+// 0.012574
+0x19c
+// 0.079324
+0xa27
+// 0.008789
+0x120
+// 0.046195
+0x5ea
+// 0.000840
+0x1c
+// 0.004179
+0x89
+// 0.053102
+0x6cc
+// 0.075510
+0x9aa
+// 0.042007
+0x560
+// 0.000578
+0x13
+// 0.000972
+0x20
+// 0.000010
+0x0
+// 0.079701
+0xa34
+// 0.000197
+0x6
+// 0.000847
+0x1c
+// 0.033688
+0x450
+// 0.115349
+0xec4
+// 0.007941
+0x104
+// 0.027430
+0x383
+// 0.044721
+0x5b9
+// 0.025126
+0x337
+// 0.001924
+0x3f
+// 0.011162
+0x16e
+// 0.000553
+0x12
+// 0.020449
+0x29e
+// 0.065578
+0x865
+// 0.020928
+0x2ae
+// 0.005145
+0xa9
+// 0.012902
+0x1a7
+// 0.007545
+0xf7
+// 0.005680
+0xba
+// 0.000006
+0x0
+// 0.010676
+0x15e
+// 0.004431
+0x91
+// 0.028131
+0x39a
+// 0.122706
+0xfb5
+// 0.210079
+0x1ae4
+// 0.012902
+0x1a7
+// 0.085810
+0xafc
+// 0.002129
+0x46
+// 0.067747
+0x8ac
+// 0.041675
+0x556
+// 0.021852
+0x2cc
+// 0.005754
+0xbd
+// 0.064456
+0x840
+// 0.000038
+0x1
+// 0.041244
+0x547
+// 0.003251
+0x6b
+// 0.020933
+0x2ae
+// 0.007086
+0xe8
+// 0.007206
+0xec
+// 0.002507
+0x52
+// 0.029043
+0x3b8
+// 0.047344
+0x60f
+// 0.009954
+0x146
+// 0.000643
+0x15
+// 0.002936
+0x60
+// 0.019196
+0x275
+// 0.000908
+0x1e
+// 0.001691
+0x37
+// 0.006428
+0xd3
+// 0.000125
+0x4
+// 0.002688
+0x58
+// 0.001846
+0x3c
+// 0.028435
+0x3a4
+// 0.000181
+0x6
+// 0.071714
+0x92e
+// 0.005820
+0xbf
+// 0.011886
+0x185
+// 0.002265
+0x4a
+// 0.007969
+0x105
+// 0.018507
+0x25e
+// 0.019244
+0x277
+// 0.008503
+0x117
+// 0.001649
+0x36
+// 0.033206
+0x440
+// 0.000001
+0x0
+// 0.001371
+0x2d
+// 0.006284
+0xce
+// 0.005423
+0xb2
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference4_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference4_q15.txt
new file mode 100644
index 0000000..d1be1ad
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference4_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// -0.310387
+0xd845
+// 0.116701
+0xef0
+// -0.264053
+0xde34
+// 0.343402
+0x2bf5
+// 0.366045
+0x2edb
+// 0.504540
+0x4095
+// -0.387632
+0xce62
+// 0.123981
+0xfdf
+// -0.146292
+0xed46
+// 0.519356
+0x427a
+// 0.191673
+0x1889
+// -0.102968
+0xf2d2
+// -0.231713
+0xe257
+// 0.096773
+0xc63
+// -0.006988
+0xff1b
+// 0.390963
+0x320b
+// 0.131743
+0x10dd
+// -0.104758
+0xf297
+// -0.202819
+0xe60a
+// 0.093355
+0xbf3
+// 0.215011
+0x1b85
+// 0.072582
+0x94a
+// 0.221321
+0x1c54
+// -0.135066
+0xeeb6
+// 0.089144
+0xb69
+// 0.021097
+0x2b3
+// 0.497287
+0x3fa7
+// -0.161082
+0xeb62
+// -0.415432
+0xcad3
+// -0.086870
+0xf4e1
+// -0.519957
+0xbd72
+// -0.095952
+0xf3b8
+// -0.024997
+0xfccd
+// 0.016867
+0x229
+// -0.368561
+0xd0d3
+// -0.206902
+0xe584
+// -0.095760
+0xf3be
+// 0.261607
+0x217c
+// -0.448476
+0xc698
+// 0.037978
+0x4dc
+// 0.051719
+0x69f
+// -0.080255
+0xf5ba
+// -0.086853
+0xf4e2
+// 0.236806
+0x1e50
+// -0.065931
+0xf790
+// -0.353711
+0xd2ba
+// 0.063549
+0x822
+// -0.029167
+0xfc44
+// -0.150256
+0xecc4
+// -0.367567
+0xd0f4
+// -0.020283
+0xfd67
+// 0.564269
+0x483a
+// 0.138678
+0x11c0
+// -0.121341
+0xf078
+// -0.067586
+0xf759
+// 0.225787
+0x1ce7
+// 0.201308
+0x19c4
+// 0.084584
+0xad4
+// 0.266474
+0x221c
+// -0.009020
+0xfed8
+// -0.459475
+0xc530
+// -0.280571
+0xdc16
+// -0.240465
+0xe138
+// -0.233376
+0xe221
+// 0.216864
+0x1bc2
+// 0.055021
+0x70b
+// -0.151803
+0xec92
+// -0.006168
+0xff36
+// 0.043318
+0x58b
+// 0.328772
+0x2a15
+// -0.158344
+0xebbb
+// 0.023603
+0x305
+// -0.065800
+0xf794
+// -0.391312
+0xcde9
+// 0.311980
+0x27ef
+// -0.049028
+0xf9b9
+// -0.051066
+0xf977
+// -0.069294
+0xf721
+// -0.532430
+0xbbd9
+// 0.341894
+0x2bc3
+// -0.145598
+0xed5d
+// 0.009655
+0x13c
+// 0.268682
+0x2264
+// 0.205090
+0x1a40
+// -0.104011
+0xf2b0
+// 0.180514
+0x171b
+// 0.333921
+0x2abe
+// -0.047268
+0xf9f3
+// -0.080615
+0xf5ae
+// -0.072452
+0xf6ba
+// -0.040981
+0xfac1
+// -0.267386
+0xddc6
+// 0.051812
+0x6a2
+// 0.593088
+0x4bea
+// -0.000240
+0xfff8
+// -0.438100
+0xc7ec
+// 0.447162
+0x393d
+// 0.072355
+0x943
+// -0.039643
+0xfaed
+// -0.086244
+0xf4f6
+// 0.040205
+0x525
+// -0.077464
+0xf616
+// -0.293263
+0xda76
+// -0.274435
+0xdcdf
+// -0.332121
+0xd57d
+// -0.111668
+0xf1b5
+// -0.198588
+0xe695
+// -0.282252
+0xdbdf
+// 0.279946
+0x23d5
+// 0.124304
+0xfe9
+// 0.393489
+0x325e
+// 0.025122
+0x337
+// -0.300181
+0xd994
+// 0.171283
+0x15ed
+// 0.158163
+0x143f
+// -0.203709
+0xe5ed
+// -0.186518
+0xe820
+// -0.076645
+0xf630
+// -0.046614
+0xfa09
+// -0.095504
+0xf3c7
+// 0.011389
+0x175
+// 0.156633
+0x140d
+// -0.282363
+0xdbdc
+// -0.143218
+0xedab
+// 0.291621
+0x2554
+// -0.017989
+0xfdb3
+// 0.357195
+0x2db9
+// 0.444095
+0x38d8
+// 0.220993
+0x1c49
+// -0.638140
+0xae51
+// -0.137680
+0xee60
+// 0.239599
+0x1eab
+// 0.031926
+0x416
+// -0.325691
+0xd650
+// 0.083612
+0xab4
+// -0.170827
+0xea22
+// 0.094855
+0xc24
+// -0.202108
+0xe621
+// -0.340420
+0xd46d
+// 0.264883
+0x21e8
+// 0.258914
+0x2124
+// -0.271798
+0xdd36
+// 0.378198
+0x3069
+// -0.466427
+0xc44c
+// -0.146974
+0xed30
+// 0.275601
+0x2347
+// -0.147315
+0xed25
+// -0.232166
+0xe248
+// 0.443911
+0x38d2
+// -0.140544
+0xee03
+// -0.159052
+0xeba4
+// -0.297624
+0xd9e7
+// -0.109212
+0xf205
+// -0.069782
+0xf711
+// 0.322621
+0x294c
+// -0.013237
+0xfe4e
+// -0.122654
+0xf04d
+// -0.257702
+0xdf04
+// 0.221724
+0x1c61
+// 0.360638
+0x2e29
+// -0.260703
+0xdea1
+// -0.041334
+0xfab6
+// -0.107417
+0xf240
+// 0.087953
+0xb42
+// 0.268806
+0x2268
+// 0.218224
+0x1bef
+// 0.121626
+0xf91
+// -0.332438
+0xd573
+// 0.185339
+0x17b9
+// 0.466374
+0x3bb2
+// -0.115403
+0xf13a
+// 0.067910
+0x8b1
+// -0.415039
+0xcae0
+// -0.436841
+0xc816
+// -0.119224
+0xf0bd
+// -1.000000
+0x8000
+// 0.182696
+0x1763
+// -0.458870
+0xc544
+// -0.152741
+0xec73
+// -0.350174
+0xd32d
+// -0.047206
+0xf9f5
+// -0.105326
+0xf285
+// -0.375441
+0xcff2
+// -0.447703
+0xc6b2
+// 0.333922
+0x2abe
+// 0.039161
+0x503
+// 0.050799
+0x681
+// -0.005188
+0xff56
+// 0.459957
+0x3ae0
+// 0.022893
+0x2ee
+// -0.047413
+0xf9ee
+// 0.299037
+0x2647
+// -0.553342
+0xb92c
+// -0.145188
+0xed6a
+// 0.269838
+0x228a
+// 0.344543
+0x2c1a
+// -0.258252
+0xdef2
+// -0.071472
+0xf6da
+// -0.172131
+0xe9f8
+// -0.038318
+0xfb18
+// -0.232983
+0xe22e
+// -0.417221
+0xca98
+// -0.235694
+0xe1d5
+// 0.116868
+0xef6
+// -0.185064
+0xe850
+// -0.141518
+0xede3
+// -0.122786
+0xf049
+// -0.004000
+0xff7d
+// -0.168345
+0xea74
+// 0.108457
+0xde2
+// -0.273262
+0xdd06
+// -0.570716
+0xb6f3
+// -0.746756
+0xa06a
+// 0.185060
+0x17b0
+// -0.477260
+0xc2e9
+// 0.075174
+0x99f
+// 0.424065
+0x3648
+// -0.332602
+0xd56d
+// 0.240844
+0x1ed4
+// 0.123592
+0xfd2
+// -0.413636
+0xcb0e
+// 0.010065
+0x14a
+// -0.330875
+0xd5a6
+// 0.092891
+0xbe4
+// 0.235722
+0x1e2c
+// -0.137144
+0xee72
+// 0.138304
+0x11b4
+// 0.081581
+0xa71
+// -0.277656
+0xdc76
+// -0.354501
+0xd2a0
+// -0.162546
+0xeb32
+// -0.041302
+0xfab7
+// -0.088276
+0xf4b3
+// -0.225729
+0xe31b
+// 0.049092
+0x649
+// -0.066994
+0xf76d
+// 0.130630
+0x10b8
+// 0.018250
+0x256
+// -0.084468
+0xf530
+// 0.069994
+0x8f6
+// -0.274737
+0xdcd5
+// -0.021891
+0xfd33
+// -0.436305
+0xc827
+// -0.124288
+0xf017
+// -0.177627
+0xe944
+// -0.077543
+0xf613
+// 0.145446
+0x129e
+// 0.221641
+0x1c5f
+// 0.226014
+0x1cee
+// 0.150232
+0x133b
+// 0.066160
+0x878
+// 0.296890
+0x2601
+// -0.001533
+0xffce
+// -0.060334
+0xf847
+// -0.129148
+0xef78
+// -0.119977
+0xf0a5
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference5_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference5_q15.txt
new file mode 100644
index 0000000..d248eec
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference5_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.810387
+0x67bb
+// 0.383299
+0x3110
+// 0.764053
+0x61cc
+// 0.156598
+0x140b
+// 0.133955
+0x1125
+// -0.004540
+0xff6b
+// 0.887632
+0x719e
+// 0.376019
+0x3021
+// 0.646292
+0x52ba
+// -0.019356
+0xfd86
+// 0.308327
+0x2777
+// 0.602968
+0x4d2e
+// 0.731713
+0x5da9
+// 0.403227
+0x339d
+// 0.506988
+0x40e5
+// 0.109037
+0xdf5
+// 0.368257
+0x2f23
+// 0.604758
+0x4d69
+// 0.702819
+0x59f6
+// 0.406645
+0x340d
+// 0.284989
+0x247b
+// 0.427418
+0x36b6
+// 0.278679
+0x23ac
+// 0.635066
+0x514a
+// 0.410856
+0x3497
+// 0.478903
+0x3d4d
+// 0.002713
+0x59
+// 0.661082
+0x549e
+// 0.915432
+0x752d
+// 0.586870
+0x4b1f
+// 1.019957
+0x7fff
+// 0.595952
+0x4c48
+// 0.524997
+0x4333
+// 0.483133
+0x3dd7
+// 0.868561
+0x6f2d
+// 0.706902
+0x5a7c
+// 0.595760
+0x4c42
+// 0.238393
+0x1e84
+// 0.948476
+0x7968
+// 0.462022
+0x3b24
+// 0.448281
+0x3961
+// 0.580255
+0x4a46
+// 0.586853
+0x4b1e
+// 0.263194
+0x21b0
+// 0.565931
+0x4870
+// 0.853711
+0x6d46
+// 0.436451
+0x37de
+// 0.529167
+0x43bc
+// 0.650256
+0x533c
+// 0.867567
+0x6f0c
+// 0.520283
+0x4299
+// -0.064269
+0xf7c6
+// 0.361322
+0x2e40
+// 0.621341
+0x4f88
+// 0.567586
+0x48a7
+// 0.274213
+0x2319
+// 0.298692
+0x263c
+// 0.415416
+0x352c
+// 0.233526
+0x1de4
+// 0.509020
+0x4128
+// 0.959475
+0x7ad0
+// 0.780571
+0x63ea
+// 0.740465
+0x5ec8
+// 0.733376
+0x5ddf
+// 0.283136
+0x243e
+// 0.444979
+0x38f5
+// 0.651803
+0x536e
+// 0.506168
+0x40ca
+// 0.456682
+0x3a75
+// 0.171228
+0x15eb
+// 0.658344
+0x5445
+// 0.476397
+0x3cfb
+// 0.565800
+0x486c
+// 0.891312
+0x7217
+// 0.188020
+0x1811
+// 0.549028
+0x4647
+// 0.551066
+0x4689
+// 0.569294
+0x48df
+// 1.032430
+0x7fff
+// 0.158106
+0x143d
+// 0.645598
+0x52a3
+// 0.490345
+0x3ec4
+// 0.231318
+0x1d9c
+// 0.294910
+0x25c0
+// 0.604011
+0x4d50
+// 0.319486
+0x28e5
+// 0.166079
+0x1542
+// 0.547268
+0x460d
+// 0.580615
+0x4a52
+// 0.572452
+0x4946
+// 0.540981
+0x453f
+// 0.767386
+0x623a
+// 0.448188
+0x395e
+// -0.093088
+0xf416
+// 0.500240
+0x4008
+// 0.938100
+0x7814
+// 0.052838
+0x6c3
+// 0.427645
+0x36bd
+// 0.539643
+0x4513
+// 0.586244
+0x4b0a
+// 0.459795
+0x3adb
+// 0.577464
+0x49ea
+// 0.793263
+0x658a
+// 0.774435
+0x6321
+// 0.832121
+0x6a83
+// 0.611668
+0x4e4b
+// 0.698588
+0x596b
+// 0.782252
+0x6421
+// 0.220054
+0x1c2b
+// 0.375696
+0x3017
+// 0.106511
+0xda2
+// 0.474878
+0x3cc9
+// 0.800181
+0x666c
+// 0.328717
+0x2a13
+// 0.341837
+0x2bc1
+// 0.703709
+0x5a13
+// 0.686518
+0x57e0
+// 0.576645
+0x49d0
+// 0.546614
+0x45f7
+// 0.595504
+0x4c39
+// 0.488611
+0x3e8b
+// 0.343367
+0x2bf3
+// 0.782363
+0x6424
+// 0.643218
+0x5255
+// 0.208379
+0x1aac
+// 0.517989
+0x424d
+// 0.142805
+0x1247
+// 0.055905
+0x728
+// 0.279007
+0x23b7
+// 1.138140
+0x7fff
+// 0.637680
+0x51a0
+// 0.260401
+0x2155
+// 0.468074
+0x3bea
+// 0.825691
+0x69b0
+// 0.416388
+0x354c
+// 0.670827
+0x55de
+// 0.405145
+0x33dc
+// 0.702108
+0x59df
+// 0.840420
+0x6b93
+// 0.235117
+0x1e18
+// 0.241086
+0x1edc
+// 0.771798
+0x62ca
+// 0.121802
+0xf97
+// 0.966427
+0x7bb4
+// 0.646974
+0x52d0
+// 0.224399
+0x1cb9
+// 0.647315
+0x52db
+// 0.732166
+0x5db8
+// 0.056089
+0x72e
+// 0.640544
+0x51fd
+// 0.659052
+0x545c
+// 0.797624
+0x6619
+// 0.609212
+0x4dfb
+// 0.569782
+0x48ef
+// 0.177379
+0x16b4
+// 0.513237
+0x41b2
+// 0.622654
+0x4fb3
+// 0.757702
+0x60fc
+// 0.278276
+0x239f
+// 0.139362
+0x11d7
+// 0.760703
+0x615f
+// 0.541334
+0x454a
+// 0.607417
+0x4dc0
+// 0.412047
+0x34be
+// 0.231194
+0x1d98
+// 0.281776
+0x2411
+// 0.378374
+0x306f
+// 0.832438
+0x6a8d
+// 0.314661
+0x2847
+// 0.033626
+0x44e
+// 0.615403
+0x4ec6
+// 0.432090
+0x374f
+// 0.915039
+0x7520
+// 0.936841
+0x77ea
+// 0.619224
+0x4f43
+// 1.500000
+0x7fff
+// 0.317304
+0x289d
+// 0.958870
+0x7abc
+// 0.652741
+0x538d
+// 0.850174
+0x6cd3
+// 0.547206
+0x460b
+// 0.605326
+0x4d7b
+// 0.875441
+0x700e
+// 0.947703
+0x794e
+// 0.166078
+0x1542
+// 0.460839
+0x3afd
+// 0.449201
+0x397f
+// 0.505188
+0x40aa
+// 0.040043
+0x520
+// 0.477107
+0x3d12
+// 0.547413
+0x4612
+// 0.200963
+0x19b9
+// 1.053342
+0x7fff
+// 0.645188
+0x5296
+// 0.230162
+0x1d76
+// 0.155457
+0x13e6
+// 0.758252
+0x610e
+// 0.571472
+0x4926
+// 0.672131
+0x5608
+// 0.538318
+0x44e8
+// 0.732983
+0x5dd2
+// 0.917221
+0x7568
+// 0.735694
+0x5e2b
+// 0.383132
+0x310a
+// 0.685064
+0x57b0
+// 0.641518
+0x521d
+// 0.622786
+0x4fb7
+// 0.504000
+0x4083
+// 0.668345
+0x558c
+// 0.391543
+0x321e
+// 0.773262
+0x62fa
+// 1.070716
+0x7fff
+// 1.246756
+0x7fff
+// 0.314940
+0x2850
+// 0.977260
+0x7d17
+// 0.424826
+0x3661
+// 0.075935
+0x9b8
+// 0.832602
+0x6a93
+// 0.259156
+0x212c
+// 0.376408
+0x302e
+// 0.913636
+0x74f2
+// 0.489935
+0x3eb6
+// 0.830875
+0x6a5a
+// 0.407109
+0x341c
+// 0.264278
+0x21d4
+// 0.637144
+0x518e
+// 0.361696
+0x2e4c
+// 0.418419
+0x358f
+// 0.777656
+0x638a
+// 0.854501
+0x6d60
+// 0.662546
+0x54ce
+// 0.541302
+0x4549
+// 0.588276
+0x4b4d
+// 0.725729
+0x5ce5
+// 0.450908
+0x39b7
+// 0.566994
+0x4893
+// 0.369370
+0x2f48
+// 0.481750
+0x3daa
+// 0.584468
+0x4ad0
+// 0.430006
+0x370a
+// 0.774737
+0x632b
+// 0.521891
+0x42cd
+// 0.936305
+0x77d9
+// 0.624288
+0x4fe9
+// 0.677627
+0x56bc
+// 0.577543
+0x49ed
+// 0.354554
+0x2d62
+// 0.278359
+0x23a1
+// 0.273986
+0x2312
+// 0.349768
+0x2cc5
+// 0.433840
+0x3788
+// 0.203110
+0x19ff
+// 0.501533
+0x4032
+// 0.560334
+0x47b9
+// 0.629148
+0x5088
+// 0.619977
+0x4f5b
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference6_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference6_q15.txt
new file mode 100644
index 0000000..fb2e435
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference6_q15.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.155193
+0x13dd
+// -0.058350
+0xf888
+// 0.132027
+0x10e6
+// -0.171701
+0xea06
+// -0.183022
+0xe893
+// -0.252270
+0xdfb6
+// 0.193816
+0x18cf
+// -0.061991
+0xf811
+// 0.073146
+0x95d
+// -0.259678
+0xdec3
+// -0.095836
+0xf3bc
+// 0.051484
+0x697
+// 0.115857
+0xed4
+// -0.048387
+0xf9ce
+// 0.003494
+0x72
+// -0.195482
+0xe6fa
+// -0.065871
+0xf792
+// 0.052379
+0x6b4
+// 0.101410
+0xcfb
+// -0.046677
+0xfa06
+// -0.107505
+0xf23d
+// -0.036291
+0xfb5b
+// -0.110661
+0xf1d6
+// 0.067533
+0x8a5
+// -0.044572
+0xfa4b
+// -0.010549
+0xfea6
+// -0.248644
+0xe02c
+// 0.080541
+0xa4f
+// 0.207716
+0x1a96
+// 0.043435
+0x58f
+// 0.259978
+0x2147
+// 0.047976
+0x624
+// 0.012498
+0x19a
+// -0.008433
+0xfeec
+// 0.184281
+0x1797
+// 0.103451
+0xd3e
+// 0.047880
+0x621
+// -0.130804
+0xef42
+// 0.224238
+0x1cb4
+// -0.018989
+0xfd92
+// -0.025859
+0xfcb1
+// 0.040128
+0x523
+// 0.043427
+0x58f
+// -0.118403
+0xf0d8
+// 0.032966
+0x438
+// 0.176855
+0x16a3
+// -0.031775
+0xfbef
+// 0.014583
+0x1de
+// 0.075128
+0x99e
+// 0.183783
+0x1786
+// 0.010142
+0x14c
+// -0.282134
+0xdbe3
+// -0.069339
+0xf720
+// 0.060670
+0x7c4
+// 0.033793
+0x453
+// -0.112894
+0xf18d
+// -0.100654
+0xf31e
+// -0.042292
+0xfa96
+// -0.133237
+0xeef2
+// 0.004510
+0x94
+// 0.229738
+0x1d68
+// 0.140285
+0x11f5
+// 0.120233
+0xf64
+// 0.116688
+0xef0
+// -0.108432
+0xf21f
+// -0.027510
+0xfc7b
+// 0.075902
+0x9b7
+// 0.003084
+0x65
+// -0.021659
+0xfd3a
+// -0.164386
+0xeaf5
+// 0.079172
+0xa22
+// -0.011801
+0xfe7d
+// 0.032900
+0x436
+// 0.195656
+0x190b
+// -0.155990
+0xec09
+// 0.024514
+0x323
+// 0.025533
+0x345
+// 0.034647
+0x46f
+// 0.266215
+0x2213
+// -0.170947
+0xea1e
+// 0.072799
+0x951
+// -0.004827
+0xff62
+// -0.134341
+0xeece
+// -0.102545
+0xf2e0
+// 0.052006
+0x6a8
+// -0.090257
+0xf472
+// -0.166961
+0xeaa1
+// 0.023634
+0x306
+// 0.040307
+0x529
+// 0.036226
+0x4a3
+// 0.020490
+0x29f
+// 0.133693
+0x111d
+// -0.025906
+0xfcaf
+// -0.296544
+0xda0b
+// 0.000120
+0x4
+// 0.219050
+0x1c0a
+// -0.223581
+0xe362
+// -0.036177
+0xfb5f
+// 0.019821
+0x28a
+// 0.043122
+0x585
+// -0.020103
+0xfd6d
+// 0.038732
+0x4f5
+// 0.146631
+0x12c5
+// 0.137217
+0x1190
+// 0.166061
+0x1541
+// 0.055834
+0x726
+// 0.099294
+0xcb6
+// 0.141126
+0x1210
+// -0.139973
+0xee15
+// -0.062152
+0xf80b
+// -0.196744
+0xe6d1
+// -0.012561
+0xfe64
+// 0.150090
+0x1336
+// -0.085642
+0xf50a
+// -0.079082
+0xf5e1
+// 0.101854
+0xd0a
+// 0.093259
+0xbf0
+// 0.038322
+0x4e8
+// 0.023307
+0x2fc
+// 0.047752
+0x61d
+// -0.005695
+0xff45
+// -0.078316
+0xf5fa
+// 0.141181
+0x1212
+// 0.071609
+0x92a
+// -0.145810
+0xed56
+// 0.008994
+0x127
+// -0.178597
+0xe924
+// -0.222048
+0xe394
+// -0.110497
+0xf1db
+// 0.319070
+0x28d7
+// 0.068840
+0x8d0
+// -0.119800
+0xf0aa
+// -0.015963
+0xfdf5
+// 0.162846
+0x14d8
+// -0.041806
+0xfaa6
+// 0.085413
+0xaef
+// -0.047427
+0xf9ee
+// 0.101054
+0xcef
+// 0.170210
+0x15c9
+// -0.132442
+0xef0c
+// -0.129457
+0xef6e
+// 0.135899
+0x1165
+// -0.189099
+0xe7cc
+// 0.233214
+0x1dda
+// 0.073487
+0x968
+// -0.137800
+0xee5d
+// 0.073658
+0x96e
+// 0.116083
+0xedc
+// -0.221956
+0xe397
+// 0.070272
+0x8ff
+// 0.079526
+0xa2e
+// 0.148812
+0x130c
+// 0.054606
+0x6fd
+// 0.034891
+0x477
+// -0.161311
+0xeb5a
+// 0.006618
+0xd9
+// 0.061327
+0x7da
+// 0.128851
+0x107e
+// -0.110862
+0xf1cf
+// -0.180319
+0xe8eb
+// 0.130352
+0x10af
+// 0.020667
+0x2a5
+// 0.053709
+0x6e0
+// -0.043976
+0xfa5f
+// -0.134403
+0xeecc
+// -0.109112
+0xf209
+// -0.060813
+0xf837
+// 0.166219
+0x1547
+// -0.092669
+0xf423
+// -0.233187
+0xe227
+// 0.057702
+0x763
+// -0.033955
+0xfba7
+// 0.207520
+0x1a90
+// 0.218421
+0x1bf5
+// 0.059612
+0x7a1
+// 0.500000
+0x4000
+// -0.091348
+0xf44f
+// 0.229435
+0x1d5e
+// 0.076370
+0x9c7
+// 0.175087
+0x1669
+// 0.023603
+0x305
+// 0.052663
+0x6be
+// 0.187720
+0x1807
+// 0.223851
+0x1ca7
+// -0.166961
+0xeaa1
+// -0.019580
+0xfd7e
+// -0.025400
+0xfcc0
+// 0.002594
+0x55
+// -0.229979
+0xe290
+// -0.011446
+0xfe89
+// 0.023707
+0x309
+// -0.149519
+0xecdd
+// 0.276671
+0x236a
+// 0.072594
+0x94b
+// -0.134919
+0xeebb
+// -0.172272
+0xe9f3
+// 0.129126
+0x1087
+// 0.035736
+0x493
+// 0.086066
+0xb04
+// 0.019159
+0x274
+// 0.116492
+0xee9
+// 0.208611
+0x1ab4
+// 0.117847
+0xf16
+// -0.058434
+0xf885
+// 0.092532
+0xbd8
+// 0.070759
+0x90f
+// 0.061393
+0x7dc
+// 0.002000
+0x42
+// 0.084172
+0xac6
+// -0.054229
+0xf90f
+// 0.136631
+0x117d
+// 0.285358
+0x2487
+// 0.373378
+0x2fcb
+// -0.092530
+0xf428
+// 0.238630
+0x1e8b
+// -0.037587
+0xfb30
+// -0.212032
+0xe4dc
+// 0.166301
+0x1549
+// -0.120422
+0xf096
+// -0.061796
+0xf817
+// 0.206818
+0x1a79
+// -0.005033
+0xff5b
+// 0.165438
+0x152d
+// -0.046446
+0xfa0e
+// -0.117861
+0xf0ea
+// 0.068572
+0x8c7
+// -0.069152
+0xf726
+// -0.040791
+0xfac7
+// 0.138828
+0x11c5
+// 0.177250
+0x16b0
+// 0.081273
+0xa67
+// 0.020651
+0x2a5
+// 0.044138
+0x5a6
+// 0.112864
+0xe72
+// -0.024546
+0xfcdc
+// 0.033497
+0x44a
+// -0.065315
+0xf7a4
+// -0.009125
+0xfed5
+// 0.042234
+0x568
+// -0.034997
+0xfb85
+// 0.137368
+0x1195
+// 0.010946
+0x167
+// 0.218152
+0x1bec
+// 0.062144
+0x7f4
+// 0.088813
+0xb5e
+// 0.038771
+0x4f6
+// -0.072723
+0xf6b1
+// -0.110821
+0xf1d1
+// -0.113007
+0xf189
+// -0.075116
+0xf663
+// -0.033080
+0xfbc4
+// -0.148445
+0xed00
+// 0.000766
+0x19
+// 0.030167
+0x3dd
+// 0.064574
+0x844
+// 0.059989
+0x7ae
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference7_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference7_q15.txt
new file mode 100644
index 0000000..916ad17
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference7_q15.txt
@@ -0,0 +1,4 @@
+H
+1
+// 0.067691
+0x8aa
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference8_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference8_q15.txt
new file mode 100644
index 0000000..3c7c5aa
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference8_q15.txt
@@ -0,0 +1,4 @@
+H
+1
+// 0.320891
+0x2913
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference9_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference9_q15.txt
new file mode 100644
index 0000000..0406875
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ15/Reference9_q15.txt
@@ -0,0 +1,4 @@
+H
+1
+// 0.328954
+0x2a1b
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Input1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Input1_q31.txt
new file mode 100644
index 0000000..1c4a8b8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Input1_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.093517
+0xbf85ae3
+// 0.135554
+0x1159d373
+// 0.232449
+0x1dc0e0bc
+// -0.012435
+0xfe688660
+// 0.271979
+0x22d0342b
+// -0.332892
+0xd563c90d
+// -0.719347
+0xa3ec726b
+// 0.360936
+0x2e3324fc
+// -0.044988
+0xfa3dd205
+// -0.598341
+0xb3699281
+// -0.425388
+0xc98ce185
+// -0.167692
+0xea89150e
+// 0.753507
+0x6072ec1f
+// 0.094737
+0xc2057e6
+// 0.264506
+0x21db5521
+// -0.403606
+0xcc56a38c
+// 0.667312
+0x556a79bf
+// 0.423374
+0x36311b83
+// -0.666339
+0xaab56b08
+// -0.275674
+0xdcb6b78e
+// -0.114448
+0xf159c899
+// -0.097559
+0xf3832ec6
+// -0.711435
+0xa4efb339
+// -0.343336
+0xd40d8d79
+// 0.370771
+0x2f756be4
+// -0.961476
+0x84ee56a2
+// -0.062574
+0xf7fd96b5
+// -0.372733
+0xd04a4aea
+// -0.150845
+0xecb11b89
+// 0.238875
+0x1e93771d
+// 0.654290
+0x53bfc7de
+// 0.070687
+0x90c43b5
+// -0.211240
+0xe4f6193d
+// -0.531794
+0xbbee2911
+// 0.008259
+0x10ea150
+// -0.308165
+0xd88e10c4
+// -0.044518
+0xfa4d3d29
+// 0.251037
+0x2021f7c3
+// -0.075615
+0xf6524382
+// -0.301091
+0xd975dd18
+// 0.825626
+0x69ae192d
+// -0.416341
+0xcab55480
+// -0.051030
+0xf977da6e
+// 0.325529
+0x29aaecb9
+// -0.022089
+0xfd2c33ce
+// 0.206344
+0x1a697728
+// 0.244204
+0x1f4210a1
+// -0.277605
+0xdc77746c
+// -0.174865
+0xe99e0738
+// -0.061459
+0xf8221bd2
+// 0.489900
+0x3eb506f4
+// -0.319109
+0xd7276d4b
+// 0.167859
+0x157c6708
+// -0.144478
+0xed81be0c
+// -0.833791
+0x95465562
+// 0.483957
+0x3df25110
+// 0.326781
+0x29d3f4f1
+// 0.600434
+0x4cdb04d6
+// 0.396175
+0x32b5dd3b
+// 0.370160
+0x2f6164ec
+// -0.573738
+0xb68fc3fb
+// -0.925296
+0x898fe73a
+// -0.278922
+0xdc4c4860
+// -0.870119
+0x909ff4e2
+// 0.395950
+0x32ae7ff1
+// 0.554178
+0x46ef5109
+// -0.054386
+0xf909de19
+// 0.187040
+0x17f0ea16
+// 0.475297
+0x3cd687fe
+// 0.215141
+0x1b89be3c
+// 0.103425
+0xd3d087b
+// 0.555422
+0x47181427
+// 0.107544
+0xdc3fed6
+// 0.000138
+0x487fc
+// -0.758501
+0x9ee971d4
+// 0.757377
+0x60f1bbeb
+// 0.513582
+0x41bd122f
+// 0.483633
+0x3de7b35c
+// -0.580088
+0xb5bfa98c
+// -0.038017
+0xfb2245ca
+// 0.359883
+0x2e10a513
+// -0.313031
+0xd7ee9649
+// 0.146754
+0x12c8d9da
+// -0.421891
+0xc9ff7b41
+// -0.416203
+0xcab9d96b
+// 0.257994
+0x2105f50c
+// 0.983882
+0x7defdae2
+// 0.404064
+0x33b85d53
+// -0.671561
+0xaa0a4ab6
+// -0.321057
+0xd6e79a10
+// 0.141595
+0x121fc533
+// 0.119630
+0xf50058d
+// 0.216586
+0x1bb9191a
+// 0.436296
+0x37d88e2a
+// -0.386608
+0xce839ee7
+// 0.950865
+0x79b5f14b
+// -0.506492
+0xbf2b4708
+// -0.444800
+0xc710c9da
+// -0.483000
+0xc22d115e
+// 0.025490
+0x3434523
+// -0.772342
+0x9d23e6e7
+// 0.260732
+0x215fa768
+// 0.127202
+0x10482bdc
+// -0.551743
+0xb9607cf7
+// 0.696067
+0x5918b5fb
+// -0.050704
+0xf982859e
+// 0.080822
+0xa585e21
+// 0.059950
+0x7ac6d70
+// -0.095925
+0xf3b8b9de
+// 0.488533
+0x3e8843b4
+// -0.160721
+0xeb6d7a79
+// 0.013833
+0x1c545fb
+// -0.068626
+0xf737468a
+// -0.150333
+0xecc1e089
+// -0.913261
+0x8b1a435d
+// -0.232932
+0xe22f465e
+// -0.308618
+0xd87f30a2
+// -0.369235
+0xd0bce8c2
+// -0.383467
+0xceea8f95
+// -0.642932
+0xadb46b8b
+// 0.041654
+0x554eb42
+// -0.552809
+0xb93d9192
+// 0.014227
+0x1d23450
+// -0.120752
+0xf08b3178
+// -0.251204
+0xdfd88bbb
+// 0.040159
+0x523ea7e
+// 0.418769
+0x359a3cb8
+// 0.234122
+0x1df7b42c
+// -0.463444
+0xc4addeb0
+// 0.335212
+0x2ae83ab6
+// 0.007470
+0xf4c51b
+// 0.391838
+0x3227bbcd
+// -0.186281
+0xe827edc3
+// -0.613516
+0xb1784f59
+// -0.290737
+0xdac91fe9
+// 0.146831
+0x12cb5f01
+// 0.131281
+0x10cdd41f
+// -0.764621
+0x9e20e35c
+// 0.387957
+0x31a89172
+// 0.417712
+0x357798c1
+// 0.253089
+0x20653830
+// -0.148722
+0xecf6ae2c
+// -0.369865
+0xd0a84788
+// 0.262285
+0x2192919a
+// 0.468145
+0x3bec2d33
+// 0.750884
+0x601cf72e
+// 0.448877
+0x3974cc70
+// 0.011332
+0x173573a
+// 0.180959
+0x1729addc
+// 0.273142
+0x22f6534d
+// -0.322284
+0xd6bf64ba
+// 0.150911
+0x13510b22
+// -0.051018
+0xf9783c2c
+// 0.017218
+0x234301c
+// 0.506664
+0x40da5fd4
+// -0.182569
+0xe8a19157
+// 0.018217
+0x254f2a6
+// 0.461154
+0x3b071b90
+// 0.512066
+0x418b630e
+// 0.030314
+0x3e1506b
+// -0.521420
+0xbd421e5a
+// -0.372627
+0xd04dc4c7
+// -0.191815
+0xe7729709
+// 0.045807
+0x5dd0085
+// -0.247145
+0xe05d907b
+// -0.382553
+0xcf08845f
+// -0.391233
+0xcdec1052
+// -0.598228
+0xb36d45a1
+// -0.266422
+0xdde5de70
+// 0.212657
+0x1b3859f0
+// -0.192644
+0xe7576d5f
+// -0.530595
+0xbc1572c5
+// 0.439107
+0x3834a898
+// -0.162098
+0xeb406280
+// -0.011985
+0xfe774786
+// -0.024244
+0xfce59014
+// 0.292534
+0x2571c06d
+// -0.147518
+0xed1e1ed0
+// 0.313248
+0x28187f76
+// -0.601882
+0xb2f588ed
+// -0.459527
+0xc52e368b
+// -0.400958
+0xccad6b54
+// 0.248536
+0x1fd00941
+// -0.418713
+0xca679a66
+// -0.832142
+0x957c5b9b
+// 0.318198
+0x28bab448
+// -0.487880
+0xc18d2604
+// 0.396160
+0x32b55c34
+// -0.353803
+0xd2b69964
+// 0.306878
+0x2747c732
+// 0.523488
+0x4301a536
+// -0.279326
+0xdc3f0838
+// -0.532785
+0xbbcdb718
+// 0.044267
+0x5aa8a45
+// 0.716642
+0x5bbae9b2
+// 0.373008
+0x2fbeb96b
+// 0.496683
+0x3f934e3e
+// -0.792721
+0x9a881ea1
+// -0.158709
+0xebaf69ab
+// 0.123815
+0xfd92d2d
+// -0.468868
+0xc3fc22d0
+// -0.231156
+0xe2697dbb
+// -0.116639
+0xf111fb98
+// -0.656190
+0xac01fb6a
+// -0.114523
+0xf1575365
+// 0.503538
+0x4073ec2b
+// -0.927916
+0x893a0be5
+// 0.822440
+0x6945b574
+// -0.083908
+0xf54283b1
+// -0.209396
+0xe5327fc9
+// 0.029477
+0x3c5e42c
+// 0.487368
+0x3e621726
+// 0.662086
+0x54bf381a
+// -0.129134
+0xef788a8e
+// -0.178253
+0xe92f02dd
+// -0.038253
+0xfb1a83f6
+// 0.059044
+0x78ec3ca
+// 0.158816
+0x14541192
+// -0.100970
+0xf3136933
+// 0.331807
+0x2a78a814
+// -0.483720
+0xc215763f
+// 0.509671
+0x413ce393
+// -0.078929
+0xf5e5aa67
+// 0.255725
+0x20bb9746
+// 1.000000
+0x7fffffff
+// 0.166281
+0x1548b47b
+// -0.084700
+0xf5288dff
+// -0.822128
+0x96c48541
+// 0.127587
+0x1054c14b
+// 0.734885
+0x5e10b6ba
+// -0.081360
+0xf595fe82
+// 0.597111
+0x4c6e237e
+// -0.056493
+0xf8c4d249
+// -0.668595
+0xaa6b7b74
+// 0.140673
+0x12019383
+// -0.007700
+0xff03b3b4
+// 0.132311
+0x10ef9194
+// 0.572723
+0x494efdd6
+// 0.065309
+0x85c0c12
+// 0.276592
+0x23675f5d
+// 0.532034
+0x4419b49d
+// -0.230690
+0xe278bf67
+// -0.081344
+0xf596851b
+// 0.001533
+0x323be5
+// 0.016496
+0x21c8de8
+// -0.743346
+0xa0da084e
+// 0.260974
+0x216794ae
+// 0.910947
+0x7499e6a2
+// 0.040241
+0x5269a88
+// -0.546775
+0xba0346ef
+// -0.191585
+0xe77a27ea
+// 0.168955
+0x15a04f28
+// 0.255253
+0x20ac1e80
+// -0.293135
+0xda7a9129
+// -0.612559
+0xb197aea9
+// -0.450270
+0xc65d89f1
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Input2_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Input2_q31.txt
new file mode 100644
index 0000000..6da3a76
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Input2_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.023538
+0x30348cb
+// 0.034118
+0x45dfcd2
+// 0.058506
+0x77d2243
+// -0.003130
+0xff9970bb
+// 0.068456
+0x8c3295a
+// -0.083787
+0xf5467398
+// -0.181056
+0xe8d32576
+// 0.090846
+0xba0d6c6
+// -0.011323
+0xfe8cf4a4
+// -0.150600
+0xecb92687
+// -0.107068
+0xf24b9628
+// -0.042207
+0xfa98f437
+// 0.189654
+0x18469808
+// 0.023845
+0x30d5967
+// 0.066575
+0x885874e
+// -0.101586
+0xf2ff3c78
+// 0.167959
+0x157fb180
+// 0.106561
+0xda3cc73
+// -0.167714
+0xea88558a
+// -0.069386
+0xf71e5d07
+// -0.028806
+0xfc501662
+// -0.024555
+0xfcdb6021
+// -0.179065
+0xe9146630
+// -0.086416
+0xf4f05027
+// 0.093321
+0xbf1f462
+// -0.241999
+0xe1062abe
+// -0.015749
+0xfdfbebb4
+// -0.093815
+0xf3fddd6a
+// -0.037967
+0xfb23e571
+// 0.060124
+0x7b22343
+// 0.164682
+0x15144bd3
+// 0.017792
+0x246fe4b
+// -0.053168
+0xf931c9e2
+// -0.133850
+0xeeddfea5
+// 0.002079
+0x441dcb
+// -0.077564
+0xf6126539
+// -0.011205
+0xfe90d61f
+// 0.063185
+0x8167064
+// -0.019032
+0xfd905d6d
+// -0.075783
+0xf64cbcea
+// 0.207806
+0x1a996506
+// -0.104791
+0xf2963393
+// -0.012844
+0xfe5b20d2
+// 0.081934
+0xa7cd11e
+// -0.005560
+0xff49d2ca
+// 0.051936
+0x6a5d494
+// 0.061465
+0x7de156c
+// -0.069872
+0xf70e70c9
+// -0.044013
+0xfa5dcabb
+// -0.015469
+0xfe051cd5
+// 0.123305
+0xfc8797f
+// -0.080318
+0xf5b820b0
+// 0.042249
+0x5686d30
+// -0.036364
+0xfb5868a0
+// -0.209861
+0xe523427b
+// 0.121810
+0xf977782
+// 0.082249
+0xa8724fc
+// 0.151127
+0x13581d14
+// 0.099715
+0xcc37a0a
+// 0.093168
+0xbece9f3
+// -0.144407
+0xed8410d3
+// -0.232893
+0xe230917b
+// -0.070203
+0xf7039309
+// -0.219005
+0xe3f7a5ad
+// 0.099659
+0xcc19f85
+// 0.139484
+0x11da9e3e
+// -0.013689
+0xfe3f71ff
+// 0.047077
+0x6069ec1
+// 0.119630
+0xf500a11
+// 0.054150
+0x6ee6379
+// 0.026032
+0x355011e
+// 0.139797
+0x11e4e0b7
+// 0.027068
+0x376f949
+// 0.000035
+0x123f6
+// -0.190911
+0xe790386e
+// 0.190628
+0x18668306
+// 0.129266
+0x108bcd24
+// 0.121728
+0xf94cb7a
+// -0.146006
+0xed4fafe4
+// -0.009569
+0xfec674be
+// 0.090581
+0xb9827d2
+// -0.078789
+0xf5ea4161
+// 0.036937
+0x4ba5dba
+// -0.106188
+0xf2686e55
+// -0.104757
+0xf29756c4
+// 0.064936
+0x84fd2ac
+// 0.247639
+0x1fb2a04f
+// 0.101701
+0xd048a43
+// -0.169029
+0xea5d432f
+// -0.080809
+0xf5a8102d
+// 0.035639
+0x48fcf2d
+// 0.030110
+0x3daa6dc
+// 0.054514
+0x6fa4ebe
+// 0.109814
+0xe0e60e8
+// -0.097308
+0xf38b6d10
+// 0.239328
+0x1ea25050
+// -0.127482
+0xefaeae03
+// -0.111954
+0xf1ab7c26
+// -0.121569
+0xf0706eb9
+// 0.006416
+0xd23bd4
+// -0.194395
+0xe71e10d7
+// 0.065625
+0x8666631
+// 0.032016
+0x4191c25
+// -0.138871
+0xee3977e6
+// 0.175197
+0x166cd988
+// -0.012762
+0xfe5dd03f
+// 0.020342
+0x29a950c
+// 0.015089
+0x1ee7003
+// -0.024144
+0xfce8da24
+// 0.122962
+0xfbd3541
+// -0.040453
+0xfad270b4
+// 0.003482
+0x72163d
+// -0.017273
+0xfdca0196
+// -0.037838
+0xfb281df8
+// -0.229864
+0xe293d3b0
+// -0.058628
+0xf87ee0a3
+// -0.077678
+0xf60ea6bb
+// -0.092935
+0xf41ab6a0
+// -0.096517
+0xf3a555ea
+// -0.161823
+0xeb496295
+// 0.010484
+0x1578b41
+// -0.139139
+0xee30ade4
+// 0.003581
+0x75576f
+// -0.030393
+0xfc1c16ee
+// -0.063227
+0xf7e82e1a
+// 0.010108
+0x14b35cb
+// 0.105402
+0xd7dd344
+// 0.058927
+0x78aeeeb
+// -0.116647
+0xf111b830
+// 0.084371
+0xaccae57
+// 0.001880
+0x3d9b85
+// 0.098624
+0xc9fb3fd
+// -0.046886
+0xf9ffa1fe
+// -0.154419
+0xec3bfde8
+// -0.073177
+0xf6a220e0
+// 0.036957
+0x4bb001c
+// 0.033043
+0x43ac039
+// -0.192452
+0xe75dbdc3
+// 0.097647
+0xc7fb234
+// 0.105136
+0xd751b3d
+// 0.063701
+0x8275db0
+// -0.037433
+0xfb35684c
+// -0.093093
+0xf415855d
+// 0.066016
+0x87336d7
+// 0.117830
+0xf150da5
+// 0.188994
+0x1830f57d
+// 0.112980
+0xe762368
+// 0.002852
+0x5d76fc
+// 0.045547
+0x5d47938
+// 0.068749
+0x8ccc1ae
+// -0.081117
+0xf59df164
+// 0.037984
+0x4dca529
+// -0.012841
+0xfe5b396b
+// 0.004334
+0x8e00e9
+// 0.127525
+0x1052be28
+// -0.045952
+0xfa1e3faf
+// 0.004585
+0x963fc4
+// 0.116070
+0xedb65cf
+// 0.128885
+0x107f4bcb
+// 0.007630
+0xfa0340
+// -0.131239
+0xef338f86
+// -0.093788
+0xf3febd64
+// -0.048279
+0xf9d1fd9a
+// 0.011529
+0x179cba2
+// -0.062205
+0xf809a906
+// -0.096287
+0xf3ace01d
+// -0.098472
+0xf36547a3
+// -0.150571
+0xecba14ea
+// -0.067057
+0xf76aaa54
+// 0.053525
+0x6d9e712
+// -0.048488
+0xf9cb2765
+// -0.133548
+0xeee7e220
+// 0.110521
+0xe258f7e
+// -0.040799
+0xfac71723
+// -0.003017
+0xff9d276c
+// -0.006102
+0xff380b32
+// 0.073629
+0x96cb0c4
+// -0.037130
+0xfb3f5593
+// 0.078843
+0xa178722
+// -0.151491
+0xec9bf1c5
+// -0.115661
+0xf13205dc
+// -0.100919
+0xf3151414
+// 0.062555
+0x801d134
+// -0.105388
+0xf282a350
+// -0.209446
+0xe530db7c
+// 0.080089
+0xa405abe
+// -0.122797
+0xf0482e78
+// 0.099712
+0xcc35990
+// -0.089050
+0xf499fe47
+// 0.077240
+0x9e2fe79
+// 0.131759
+0x10dd7ec7
+// -0.070305
+0xf7003d3e
+// -0.134099
+0xeed5d412
+// 0.011142
+0x16d182b
+// 0.180375
+0x17168b18
+// 0.093884
+0xc046795
+// 0.125013
+0x10006bcc
+// -0.199524
+0xe675fcec
+// -0.039946
+0xfae3091f
+// 0.031164
+0x3fd2c4c
+// -0.118012
+0xf0e4fc13
+// -0.058181
+0xf88d87bf
+// -0.029357
+0xfc3e03f7
+// -0.165160
+0xeadc09fc
+// -0.028825
+0xfc4f7804
+// 0.126738
+0x1038f4c6
+// -0.233552
+0xe21af562
+// 0.207004
+0x1a7f1ec9
+// -0.021119
+0xfd4bf785
+// -0.052704
+0xf940fdbd
+// 0.007419
+0xf31c49
+// 0.122668
+0xfb3998c
+// 0.166644
+0x155496c1
+// -0.032502
+0xfbd6f5fd
+// -0.044865
+0xfa41d975
+// -0.009628
+0xfec480ec
+// 0.014861
+0x1e6f8ba
+// 0.039973
+0x51dd733
+// -0.025414
+0xfcbf3e38
+// 0.083514
+0xab09942
+// -0.121750
+0xf06a7db2
+// 0.128282
+0x106b89da
+// -0.019866
+0xfd750803
+// 0.064365
+0x83d1af3
+// 0.251695
+0x20378ed4
+// 0.041852
+0x55b6a1c
+// -0.021319
+0xfd456ed4
+// -0.206926
+0xe5837455
+// 0.032113
+0x41c46f7
+// 0.184967
+0x17ad01d3
+// -0.020478
+0xfd60fa75
+// 0.150290
+0x133cb57b
+// -0.014219
+0xfe2e1113
+// -0.168282
+0xea75b98e
+// 0.035407
+0x48835a6
+// -0.001938
+0xffc07f6b
+// 0.033302
+0x4433e3b
+// 0.144152
+0x12739134
+// 0.016438
+0x21aa3e6
+// 0.069617
+0x8e935c4
+// 0.133911
+0x1123fc30
+// -0.058064
+0xf8915ec9
+// -0.020474
+0xfd611c56
+// 0.000386
+0xca4c7
+// 0.004152
+0x880e1a
+// -0.187097
+0xe80d3597
+// 0.065686
+0x86864f4
+// 0.229281
+0x1d5915e5
+// 0.010128
+0x14be2f8
+// -0.137621
+0xee62710c
+// -0.048221
+0xf9d3e51a
+// 0.042525
+0x57176ce
+// 0.064246
+0x839360a
+// -0.073781
+0xf68e5b16
+// -0.154178
+0xec43e35a
+// -0.113331
+0xf17e5e5e
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference10_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference10_q31.txt
new file mode 100644
index 0000000..dd4cbf3
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference10_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.093517
+0xbf85ae3
+// 0.135554
+0x1159d373
+// 0.232449
+0x1dc0e0bc
+// 0.012435
+0x19779a0
+// 0.271979
+0x22d0342b
+// 0.332892
+0x2a9c36f3
+// 0.719347
+0x5c138d95
+// 0.360936
+0x2e3324fc
+// 0.044988
+0x5c22dfb
+// 0.598341
+0x4c966d7f
+// 0.425388
+0x36731e7b
+// 0.167692
+0x1576eaf2
+// 0.753507
+0x6072ec1f
+// 0.094737
+0xc2057e6
+// 0.264506
+0x21db5521
+// 0.403606
+0x33a95c74
+// 0.667312
+0x556a79bf
+// 0.423374
+0x36311b83
+// 0.666339
+0x554a94f8
+// 0.275674
+0x23494872
+// 0.114448
+0xea63767
+// 0.097559
+0xc7cd13a
+// 0.711435
+0x5b104cc7
+// 0.343336
+0x2bf27287
+// 0.370771
+0x2f756be4
+// 0.961476
+0x7b11a95e
+// 0.062574
+0x802694b
+// 0.372733
+0x2fb5b516
+// 0.150845
+0x134ee477
+// 0.238875
+0x1e93771d
+// 0.654290
+0x53bfc7de
+// 0.070687
+0x90c43b5
+// 0.211240
+0x1b09e6c3
+// 0.531794
+0x4411d6ef
+// 0.008259
+0x10ea150
+// 0.308165
+0x2771ef3c
+// 0.044518
+0x5b2c2d7
+// 0.251037
+0x2021f7c3
+// 0.075615
+0x9adbc7e
+// 0.301091
+0x268a22e8
+// 0.825626
+0x69ae192d
+// 0.416341
+0x354aab80
+// 0.051030
+0x6882592
+// 0.325529
+0x29aaecb9
+// 0.022089
+0x2d3cc32
+// 0.206344
+0x1a697728
+// 0.244204
+0x1f4210a1
+// 0.277605
+0x23888b94
+// 0.174865
+0x1661f8c8
+// 0.061459
+0x7dde42e
+// 0.489900
+0x3eb506f4
+// 0.319109
+0x28d892b5
+// 0.167859
+0x157c6708
+// 0.144478
+0x127e41f4
+// 0.833791
+0x6ab9aa9e
+// 0.483957
+0x3df25110
+// 0.326781
+0x29d3f4f1
+// 0.600434
+0x4cdb04d6
+// 0.396175
+0x32b5dd3b
+// 0.370160
+0x2f6164ec
+// 0.573738
+0x49703c05
+// 0.925296
+0x767018c6
+// 0.278922
+0x23b3b7a0
+// 0.870119
+0x6f600b1e
+// 0.395950
+0x32ae7ff1
+// 0.554178
+0x46ef5109
+// 0.054386
+0x6f621e7
+// 0.187040
+0x17f0ea16
+// 0.475297
+0x3cd687fe
+// 0.215141
+0x1b89be3c
+// 0.103425
+0xd3d087b
+// 0.555422
+0x47181427
+// 0.107544
+0xdc3fed6
+// 0.000138
+0x487fc
+// 0.758501
+0x61168e2c
+// 0.757377
+0x60f1bbeb
+// 0.513582
+0x41bd122f
+// 0.483633
+0x3de7b35c
+// 0.580088
+0x4a405674
+// 0.038017
+0x4ddba36
+// 0.359883
+0x2e10a513
+// 0.313031
+0x281169b7
+// 0.146754
+0x12c8d9da
+// 0.421891
+0x360084bf
+// 0.416203
+0x35462695
+// 0.257994
+0x2105f50c
+// 0.983882
+0x7defdae2
+// 0.404064
+0x33b85d53
+// 0.671561
+0x55f5b54a
+// 0.321057
+0x291865f0
+// 0.141595
+0x121fc533
+// 0.119630
+0xf50058d
+// 0.216586
+0x1bb9191a
+// 0.436296
+0x37d88e2a
+// 0.386608
+0x317c6119
+// 0.950865
+0x79b5f14b
+// 0.506492
+0x40d4b8f8
+// 0.444800
+0x38ef3626
+// 0.483000
+0x3dd2eea2
+// 0.025490
+0x3434523
+// 0.772342
+0x62dc1919
+// 0.260732
+0x215fa768
+// 0.127202
+0x10482bdc
+// 0.551743
+0x469f8309
+// 0.696067
+0x5918b5fb
+// 0.050704
+0x67d7a62
+// 0.080822
+0xa585e21
+// 0.059950
+0x7ac6d70
+// 0.095925
+0xc474622
+// 0.488533
+0x3e8843b4
+// 0.160721
+0x14928587
+// 0.013833
+0x1c545fb
+// 0.068626
+0x8c8b976
+// 0.150333
+0x133e1f77
+// 0.913261
+0x74e5bca3
+// 0.232932
+0x1dd0b9a2
+// 0.308618
+0x2780cf5e
+// 0.369235
+0x2f43173e
+// 0.383467
+0x3115706b
+// 0.642932
+0x524b9475
+// 0.041654
+0x554eb42
+// 0.552809
+0x46c26e6e
+// 0.014227
+0x1d23450
+// 0.120752
+0xf74ce88
+// 0.251204
+0x20277445
+// 0.040159
+0x523ea7e
+// 0.418769
+0x359a3cb8
+// 0.234122
+0x1df7b42c
+// 0.463444
+0x3b522150
+// 0.335212
+0x2ae83ab6
+// 0.007470
+0xf4c51b
+// 0.391838
+0x3227bbcd
+// 0.186281
+0x17d8123d
+// 0.613516
+0x4e87b0a7
+// 0.290737
+0x2536e017
+// 0.146831
+0x12cb5f01
+// 0.131281
+0x10cdd41f
+// 0.764621
+0x61df1ca4
+// 0.387957
+0x31a89172
+// 0.417712
+0x357798c1
+// 0.253089
+0x20653830
+// 0.148722
+0x130951d4
+// 0.369865
+0x2f57b878
+// 0.262285
+0x2192919a
+// 0.468145
+0x3bec2d33
+// 0.750884
+0x601cf72e
+// 0.448877
+0x3974cc70
+// 0.011332
+0x173573a
+// 0.180959
+0x1729addc
+// 0.273142
+0x22f6534d
+// 0.322284
+0x29409b46
+// 0.150911
+0x13510b22
+// 0.051018
+0x687c3d4
+// 0.017218
+0x234301c
+// 0.506664
+0x40da5fd4
+// 0.182569
+0x175e6ea9
+// 0.018217
+0x254f2a6
+// 0.461154
+0x3b071b90
+// 0.512066
+0x418b630e
+// 0.030314
+0x3e1506b
+// 0.521420
+0x42bde1a6
+// 0.372627
+0x2fb23b39
+// 0.191815
+0x188d68f7
+// 0.045807
+0x5dd0085
+// 0.247145
+0x1fa26f85
+// 0.382553
+0x30f77ba1
+// 0.391233
+0x3213efae
+// 0.598228
+0x4c92ba5f
+// 0.266422
+0x221a2190
+// 0.212657
+0x1b3859f0
+// 0.192644
+0x18a892a1
+// 0.530595
+0x43ea8d3b
+// 0.439107
+0x3834a898
+// 0.162098
+0x14bf9d80
+// 0.011985
+0x188b87a
+// 0.024244
+0x31a6fec
+// 0.292534
+0x2571c06d
+// 0.147518
+0x12e1e130
+// 0.313248
+0x28187f76
+// 0.601882
+0x4d0a7713
+// 0.459527
+0x3ad1c975
+// 0.400958
+0x335294ac
+// 0.248536
+0x1fd00941
+// 0.418713
+0x3598659a
+// 0.832142
+0x6a83a465
+// 0.318198
+0x28bab448
+// 0.487880
+0x3e72d9fc
+// 0.396160
+0x32b55c34
+// 0.353803
+0x2d49669c
+// 0.306878
+0x2747c732
+// 0.523488
+0x4301a536
+// 0.279326
+0x23c0f7c8
+// 0.532785
+0x443248e8
+// 0.044267
+0x5aa8a45
+// 0.716642
+0x5bbae9b2
+// 0.373008
+0x2fbeb96b
+// 0.496683
+0x3f934e3e
+// 0.792721
+0x6577e15f
+// 0.158709
+0x14509655
+// 0.123815
+0xfd92d2d
+// 0.468868
+0x3c03dd30
+// 0.231156
+0x1d968245
+// 0.116639
+0xeee0468
+// 0.656190
+0x53fe0496
+// 0.114523
+0xea8ac9b
+// 0.503538
+0x4073ec2b
+// 0.927916
+0x76c5f41b
+// 0.822440
+0x6945b574
+// 0.083908
+0xabd7c4f
+// 0.209396
+0x1acd8037
+// 0.029477
+0x3c5e42c
+// 0.487368
+0x3e621726
+// 0.662086
+0x54bf381a
+// 0.129134
+0x10877572
+// 0.178253
+0x16d0fd23
+// 0.038253
+0x4e57c0a
+// 0.059044
+0x78ec3ca
+// 0.158816
+0x14541192
+// 0.100970
+0xcec96cd
+// 0.331807
+0x2a78a814
+// 0.483720
+0x3dea89c1
+// 0.509671
+0x413ce393
+// 0.078929
+0xa1a5599
+// 0.255725
+0x20bb9746
+// 1.000000
+0x7fffffff
+// 0.166281
+0x1548b47b
+// 0.084700
+0xad77201
+// 0.822128
+0x693b7abf
+// 0.127587
+0x1054c14b
+// 0.734885
+0x5e10b6ba
+// 0.081360
+0xa6a017e
+// 0.597111
+0x4c6e237e
+// 0.056493
+0x73b2db7
+// 0.668595
+0x5594848c
+// 0.140673
+0x12019383
+// 0.007700
+0xfc4c4c
+// 0.132311
+0x10ef9194
+// 0.572723
+0x494efdd6
+// 0.065309
+0x85c0c12
+// 0.276592
+0x23675f5d
+// 0.532034
+0x4419b49d
+// 0.230690
+0x1d874099
+// 0.081344
+0xa697ae5
+// 0.001533
+0x323be5
+// 0.016496
+0x21c8de8
+// 0.743346
+0x5f25f7b2
+// 0.260974
+0x216794ae
+// 0.910947
+0x7499e6a2
+// 0.040241
+0x5269a88
+// 0.546775
+0x45fcb911
+// 0.191585
+0x1885d816
+// 0.168955
+0x15a04f28
+// 0.255253
+0x20ac1e80
+// 0.293135
+0x25856ed7
+// 0.612559
+0x4e685157
+// 0.450270
+0x39a2760f
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference1_q31.txt
new file mode 100644
index 0000000..4ad50c6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference1_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.117054
+0xefba3ae
+// 0.169672
+0x15b7d045
+// 0.290955
+0x253e02ff
+// -0.015565
+0xfe01f71b
+// 0.340435
+0x2b935d85
+// -0.416680
+0xcaaa3ca5
+// -0.900403
+0x8cbf97e1
+// 0.451782
+0x39d3fbc2
+// -0.056312
+0xf8cac6a9
+// -0.748940
+0xa022b908
+// -0.532456
+0xbbd877ad
+// -0.209899
+0xe5220945
+// 0.943162
+0x78b98427
+// 0.118582
+0xf2db14d
+// 0.331081
+0x2a60dc6f
+// -0.505192
+0xbf55e004
+// 0.835271
+0x6aea2b3f
+// 0.529935
+0x43d4e7f6
+// -0.834053
+0x953dc091
+// -0.345060
+0xd3d51494
+// -0.143253
+0xeda9defb
+// -0.122114
+0xf05e8ee7
+// -0.890500
+0x8e041969
+// -0.429753
+0xc8fddda1
+// 0.464092
+0x3b676046
+// -1.203476
+0x80000000
+// -0.078323
+0xf5f98269
+// -0.466548
+0xc4482855
+// -0.188812
+0xe7d500fa
+// 0.298999
+0x26459a60
+// 0.818972
+0x68d413b1
+// 0.088478
+0xb534201
+// -0.264408
+0xde27e31f
+// -0.665645
+0xaacc27b6
+// 0.010338
+0x152bf1b
+// -0.385728
+0xcea075fd
+// -0.055723
+0xf8de1347
+// 0.314221
+0x28386828
+// -0.094646
+0xf3e2a0ef
+// -0.376874
+0xcfc29a02
+// 1.033432
+0x7fffffff
+// -0.521132
+0xbd4b8813
+// -0.063874
+0xf7d2fb40
+// 0.407463
+0x3427bdd7
+// -0.027648
+0xfc760698
+// 0.258279
+0x210f4bbc
+// 0.305669
+0x2720260d
+// -0.347476
+0xd385e535
+// -0.218878
+0xe3fbd1f4
+// -0.076928
+0xf62738a8
+// 0.613205
+0x4e7d8072
+// -0.399428
+0xccdf8dfa
+// 0.210108
+0x1ae4d438
+// -0.180843
+0xe8da26ad
+// -1.043653
+0x80000000
+// 0.605767
+0x4d89c892
+// 0.409030
+0x345b19ed
+// 0.751560
+0x603321ea
+// 0.495891
+0x3f795745
+// 0.463327
+0x3b4e4ede
+// -0.718145
+0xa413d4ce
+// -1.158189
+0x80000000
+// -0.349125
+0xd34fdb69
+// -1.089123
+0x80000000
+// 0.495609
+0x3f701f75
+// 0.693663
+0x58c9ef47
+// -0.068075
+0xf7495018
+// 0.234117
+0x1df788d8
+// 0.594927
+0x4c26920f
+// 0.269291
+0x227821b5
+// 0.129457
+0x10920999
+// 0.695220
+0x58fcf4de
+// 0.134612
+0x113af81f
+// 0.000173
+0x5abf2
+// -0.949412
+0x8679aa42
+// 0.948006
+0x79583ef1
+// 0.642849
+0x5248df53
+// 0.605362
+0x4d7c7ed6
+// -0.726094
+0xa30f596f
+// -0.047585
+0xf9e8ba88
+// 0.450464
+0x39a8cce5
+// -0.391820
+0xcdd8d7aa
+// 0.183692
+0x17833794
+// -0.528079
+0xbc67e996
+// -0.520960
+0xbd51302f
+// 0.322930
+0x2955c7b8
+// 1.231521
+0x7fffffff
+// 0.505765
+0x40bce797
+// -0.840590
+0x94678de4
+// -0.401866
+0xcc8faa3d
+// 0.177233
+0x16af945f
+// 0.149740
+0x132aac68
+// 0.271100
+0x22b367d8
+// 0.546110
+0x45e6ef13
+// -0.483916
+0xc20f0bf7
+// 1.190193
+0x7fffffff
+// -0.633973
+0xaed9f50b
+// -0.556754
+0xb8bc4600
+// -0.604568
+0xb29d8016
+// 0.031906
+0x41580f7
+// -0.966737
+0x8441f7be
+// 0.326357
+0x29c60d9a
+// 0.159219
+0x14614800
+// -0.690614
+0xa799f4dc
+// 0.871263
+0x6f858f83
+// -0.063466
+0xf7e055dc
+// 0.101164
+0xcf2f32d
+// 0.075039
+0x99add73
+// -0.120069
+0xf0a19402
+// 0.611495
+0x4e4578f4
+// -0.201174
+0xe63feb2d
+// 0.017314
+0x2375c37
+// -0.085898
+0xf5014820
+// -0.188172
+0xe7e9fe81
+// -1.143125
+0x80000000
+// -0.291560
+0xdaae2701
+// -0.386296
+0xce8dd75d
+// -0.462170
+0xc4d79f62
+// -0.479984
+0xc28fe57e
+// -0.804754
+0x98fdce1f
+// 0.052138
+0x6ac7683
+// -0.691948
+0xa76e3f76
+// 0.017808
+0x2478bbe
+// -0.151145
+0xeca74867
+// -0.314431
+0xd7c0b9d5
+// 0.050266
+0x66f2049
+// 0.524172
+0x43180ffc
+// 0.293049
+0x2582a317
+// -0.580091
+0xb5bf96e0
+// 0.419583
+0x35b4e90d
+// 0.009350
+0x13260a0
+// 0.490461
+0x3ec76fcb
+// -0.233168
+0xe2278fc0
+// -0.767935
+0x9db44d41
+// -0.363914
+0xd16b40c9
+// 0.183788
+0x17865f1d
+// 0.164324
+0x15089458
+// -0.957073
+0x857ea11f
+// 0.485604
+0x3e2843a6
+// 0.522849
+0x42ecb3fe
+// 0.316790
+0x288c95df
+// -0.186155
+0xe82c1678
+// -0.462958
+0xc4bdcce5
+// 0.328301
+0x2a05c872
+// 0.585975
+0x4b013ad8
+// 0.939878
+0x784decab
+// 0.561857
+0x47eaefd8
+// 0.014185
+0x1d0ce36
+// 0.226506
+0x1cfe2715
+// 0.341891
+0x2bc314fb
+// -0.403402
+0xcc5d561e
+// 0.188894
+0x182db04b
+// -0.063859
+0xf7d37597
+// 0.021551
+0x2c23105
+// 0.634189
+0x512d1dfc
+// -0.228521
+0xe2bfd106
+// 0.022803
+0x2eb326a
+// 0.577225
+0x49e28160
+// 0.640951
+0x520aaed9
+// 0.037943
+0x4db53ab
+// -0.652659
+0xac75ade0
+// -0.466415
+0xc44c822a
+// -0.240095
+0xe14494a3
+// 0.057336
+0x756cc27
+// -0.309350
+0xd8673982
+// -0.478839
+0xc2b5647c
+// -0.489705
+0xc15157f5
+// -0.748799
+0xa0275a8b
+// -0.333480
+0xd55088c4
+// 0.266182
+0x22124103
+// -0.241132
+0xe12294c4
+// -0.664144
+0xaafd54e5
+// 0.549628
+0x465a3816
+// -0.202897
+0xe60779a4
+// -0.015001
+0xfe146ef1
+// -0.030346
+0xfc1d9b47
+// 0.366163
+0x2ede7132
+// -0.184648
+0xe85d7464
+// 0.392091
+0x32300698
+// -0.753373
+0x9f917ab2
+// -0.575188
+0xb6603c67
+// -0.501877
+0xbfc27f68
+// 0.311092
+0x27d1da74
+// -0.524102
+0xbcea3db6
+// -1.041589
+0x80000000
+// 0.398287
+0x32fb0f06
+// -0.610677
+0xb1d5547c
+// 0.495871
+0x3f78b5c4
+// -0.442853
+0xc75097ab
+// 0.384118
+0x312ac5ab
+// 0.655247
+0x53df23fe
+// -0.349632
+0xd33f4576
+// -0.666884
+0xaaa38b2b
+// 0.055409
+0x717a270
+// 0.897017
+0x72d174ca
+// 0.466892
+0x3bc32100
+// 0.621696
+0x4f93ba09
+// -0.992245
+0x80fe1b8d
+// -0.198656
+0xe69272cb
+// 0.154979
+0x13d65979
+// -0.586880
+0xb4e11ee4
+// -0.289337
+0xdaf7057a
+// -0.145996
+0xed4fff8f
+// -0.821349
+0x96de0566
+// -0.143347
+0xeda6cb68
+// 0.630276
+0x50ace0f1
+// -1.161468
+0x80000000
+// 1.029444
+0x7fffffff
+// -0.105027
+0xf28e7b36
+// -0.262101
+0xde737d86
+// 0.036896
+0x4b90074
+// 0.610037
+0x4e15b0b2
+// 0.828729
+0x6a13cedb
+// -0.161636
+0xeb4f808b
+// -0.223118
+0xe370dc52
+// -0.047881
+0xf9df04e2
+// 0.073906
+0x975bc84
+// 0.198789
+0x1971e8c4
+// -0.126384
+0xefd2a76b
+// 0.415322
+0x35294156
+// -0.605470
+0xb27ff3f1
+// 0.637952
+0x51a86d6d
+// -0.098795
+0xf35ab26a
+// 0.320090
+0x28f8b239
+// 1.251695
+0x7fffffff
+// 0.208134
+0x1aa41e97
+// -0.106018
+0xf26dfcd3
+// -1.029053
+0x80000000
+// 0.159699
+0x14710841
+// 0.919852
+0x75bdb88e
+// -0.101838
+0xf2f6f8f8
+// 0.747401
+0x5faad8f9
+// -0.070713
+0xf6f2e35b
+// -0.836877
+0x94e13502
+// 0.176080
+0x1689c929
+// -0.009637
+0xfec4331e
+// 0.165613
+0x1532cfcf
+// 0.716875
+0x5bc28f09
+// 0.081747
+0xa76aff8
+// 0.346209
+0x2c509521
+// 0.665945
+0x553db0cd
+// -0.288754
+0xdb0a1e30
+// -0.101818
+0xf2f7a170
+// 0.001919
+0x3ee0ac
+// 0.020648
+0x2a49c02
+// -0.930443
+0x88e73de5
+// 0.326659
+0x29cff9a2
+// 1.140228
+0x7fffffff
+// 0.050369
+0x6727d7f
+// -0.684396
+0xa865b7fb
+// -0.239806
+0xe14e0d04
+// 0.211480
+0x1b11c5f6
+// 0.319499
+0x28e5548a
+// -0.366915
+0xd108ec3f
+// -0.766737
+0x9ddb9202
+// -0.563601
+0xb7dbe84f
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference2_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference2_q31.txt
new file mode 100644
index 0000000..0df7eab
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference2_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.069979
+0x8f51218
+// 0.101435
+0xcfbd6a1
+// 0.173942
+0x1643be79
+// -0.009305
+0xfecf15a5
+// 0.203523
+0x1a0d0ad1
+// -0.249105
+0xe01d5575
+// -0.538290
+0xbb194cf5
+// 0.270090
+0x22924e36
+// -0.033665
+0xfbb0dd60
+// -0.447741
+0xc6b06bf9
+// -0.318320
+0xd7414b5c
+// -0.125484
+0xeff020d7
+// 0.563853
+0x482c5416
+// 0.070892
+0x912fe7f
+// 0.197931
+0x1955cdd2
+// -0.302020
+0xd9576714
+// 0.499352
+0x3feac83f
+// 0.316812
+0x288d4f10
+// -0.498624
+0xc02d157e
+// -0.206288
+0xe5985a87
+// -0.085642
+0xf509b237
+// -0.073004
+0xf6a7cea6
+// -0.532370
+0xbbdb4d09
+// -0.256920
+0xdf1d3d52
+// 0.277450
+0x23837782
+// -0.719477
+0xa3e82be4
+// -0.046824
+0xfa01ab01
+// -0.278918
+0xdc4c6d80
+// -0.112878
+0xf18d3619
+// 0.178751
+0x16e153da
+// 0.489608
+0x3eab7c0b
+// 0.052895
+0x6c5456a
+// -0.158072
+0xebc44f5a
+// -0.397944
+0xcd102a6c
+// 0.006180
+0xca8385
+// -0.230601
+0xe27bab8c
+// -0.033313
+0xfbbc670a
+// 0.187852
+0x180b875f
+// -0.056583
+0xf8c1e615
+// -0.225307
+0xe329202e
+// 0.617819
+0x4f14b427
+// -0.311550
+0xd81f20ed
+// -0.038186
+0xfb1cb99d
+// 0.243595
+0x1f2e1b9a
+// -0.016529
+0xfde26104
+// 0.154408
+0x13c3a294
+// 0.182739
+0x1763fb34
+// -0.207733
+0xe56903a3
+// -0.130852
+0xef403c7d
+// -0.045990
+0xfa1cfefd
+// 0.366594
+0x2eec8d75
+// -0.238791
+0xe16f4c9b
+// 0.125610
+0x1013f9d8
+// -0.108114
+0xf229556c
+// -0.623930
+0xb02312e8
+// 0.362148
+0x2e5ad98d
+// 0.244532
+0x1f4ccff5
+// 0.449307
+0x3982e7c3
+// 0.296460
+0x25f26332
+// 0.276992
+0x23747af9
+// -0.429330
+0xc90bb328
+// -0.692403
+0xa75f55bf
+// -0.208719
+0xe548b558
+// -0.651114
+0xaca84f35
+// 0.296291
+0x25ece06c
+// 0.414694
+0x3514b2cb
+// -0.040698
+0xfaca6c1a
+// 0.139963
+0x11ea4b55
+// 0.355667
+0x2d867ded
+// 0.160991
+0x149b5ac3
+// 0.077393
+0x9e8075d
+// 0.415625
+0x35333370
+// 0.080476
+0xa4d058d
+// 0.000103
+0x36405
+// -0.567590
+0xb7593966
+// 0.566749
+0x488b38e5
+// 0.384316
+0x3131450b
+// 0.361905
+0x2e52e7e2
+// -0.434083
+0xc86ff9a8
+// -0.028448
+0xfc5bd10b
+// 0.269302
+0x22787d41
+// -0.234243
+0xe20454e8
+// 0.109817
+0xe0e7c20
+// -0.315703
+0xd7970cec
+// -0.311447
+0xd82282a7
+// 0.193058
+0x18b62260
+// 0.736244
+0x5e3d3a93
+// 0.302363
+0x26b3d310
+// -0.502532
+0xbfad0787
+// -0.240248
+0xe13f89e3
+// 0.105956
+0xd8ff606
+// 0.089519
+0xb755eb1
+// 0.162072
+0x14beca5b
+// 0.326482
+0x29ca2d42
+// -0.289301
+0xdaf831d7
+// 0.711537
+0x5b13a0fb
+// -0.379010
+0xcf7c9905
+// -0.332846
+0xd5654db5
+// -0.361431
+0xd1bca2a5
+// 0.019075
+0x271094e
+// -0.577947
+0xb605d610
+// 0.195107
+0x18f94137
+// 0.095186
+0xc2f0fb7
+// -0.412872
+0xcb270511
+// 0.520870
+0x42abdc73
+// -0.037942
+0xfb24b55f
+// 0.060479
+0x7bdc915
+// 0.044861
+0x5bdfd6d
+// -0.071781
+0xf6cfdfba
+// 0.365572
+0x2ecb0e73
+// -0.120269
+0xf09b09c5
+// 0.010351
+0x1532fbe
+// -0.051353
+0xf96d44f4
+// -0.112495
+0xf199c291
+// -0.683397
+0xa8866fae
+// -0.174304
+0xe9b065bb
+// -0.230941
+0xe27089e7
+// -0.276300
+0xdca23222
+// -0.286950
+0xdb4539ab
+// -0.481109
+0xc26b08f6
+// 0.031170
+0x3fd6001
+// -0.413669
+0xcb0ce3ae
+// 0.010646
+0x15cdce1
+// -0.090359
+0xf46f1a8a
+// -0.187977
+0xe7f05da1
+// 0.030051
+0x3d8b4b4
+// 0.313367
+0x281c6974
+// 0.175194
+0x166cc541
+// -0.346797
+0xd39c267f
+// 0.250841
+0x201b8c5e
+// 0.005590
+0xb72997
+// 0.293214
+0x258807d0
+// -0.139395
+0xee284bc5
+// -0.459097
+0xc53c5171
+// -0.217560
+0xe426ff0a
+// 0.109875
+0xe105ee5
+// 0.098238
+0xc9313e6
+// -0.572170
+0xb6c32599
+// 0.290310
+0x2528df3e
+// 0.312576
+0x28027d84
+// 0.189388
+0x183dda80
+// -0.111289
+0xf1c145e0
+// -0.276771
+0xdc92c22b
+// 0.196269
+0x191f5ac3
+// 0.350315
+0x2cd71f8e
+// 0.561890
+0x47ec01b1
+// 0.335897
+0x2afea907
+// 0.008480
+0x115e03e
+// 0.135413
+0x115534a4
+// 0.204394
+0x1a29919f
+// -0.241167
+0xe1217356
+// 0.112927
+0xe7465f9
+// -0.038177
+0xfb1d02c0
+// 0.012884
+0x1a62f33
+// 0.379139
+0x3087a1ac
+// -0.136617
+0xee8351a8
+// 0.013632
+0x1beb2e2
+// 0.345084
+0x2c2bb5c1
+// 0.383181
+0x310c1743
+// 0.022684
+0x2e74d2c
+// -0.390181
+0xce0e8ed3
+// -0.278838
+0xdc4f0763
+// -0.143536
+0xeda09970
+// 0.034278
+0x46334e3
+// -0.184939
+0xe853e775
+// -0.286266
+0xdb5ba442
+// -0.292762
+0xda86c8b0
+// -0.447657
+0xc6b330b6
+// -0.199365
+0xe67b341c
+// 0.159132
+0x145e72de
+// -0.144157
+0xed8c45fa
+// -0.397047
+0xcd2d90a5
+// 0.328586
+0x2a0f191a
+// -0.121298
+0xf0794b5d
+// -0.008968
+0xfeda201a
+// -0.018142
+0xfdad84e2
+// 0.218904
+0x1c050fa9
+// -0.110389
+0xf1dec93d
+// 0.234405
+0x1e00f854
+// -0.450391
+0xc6599728
+// -0.343866
+0xd3fc30af
+// -0.300038
+0xd998573f
+// 0.185981
+0x17ce380d
+// -0.313325
+0xd7e4f716
+// -0.622696
+0xb04b8020
+// 0.238109
+0x1e7a598a
+// -0.365083
+0xd144f78b
+// 0.296448
+0x25f202a4
+// -0.264752
+0xde1c9b1e
+// 0.229638
+0x1d64c8b9
+// 0.391728
+0x3224266f
+// -0.209021
+0xe53ecafa
+// -0.398685
+0xccf7e306
+// 0.033125
+0x43d721a
+// 0.536266
+0x44a45e9a
+// 0.279124
+0x23ba51d6
+// 0.371670
+0x2f92e272
+// -0.593197
+0xb41221b5
+// -0.118763
+0xf0cc608c
+// 0.092651
+0xbdc00e1
+// -0.350856
+0xd31726bd
+// -0.172975
+0xe9dbf5fc
+// -0.087281
+0xf4d3f7a1
+// -0.491030
+0xc125f16e
+// -0.085698
+0xf507db61
+// 0.376800
+0x303af766
+// -0.694364
+0xa71f1683
+// 0.615435
+0x4ec696ac
+// -0.062788
+0xf7f68c2c
+// -0.156692
+0xebf1820c
+// 0.022058
+0x2d2c7e3
+// 0.364700
+0x2eae7d9b
+// 0.495442
+0x3f6aa159
+// -0.096631
+0xf3a19491
+// -0.133387
+0xeeed2968
+// -0.028625
+0xfc56030b
+// 0.044183
+0x5a7cb11
+// 0.118842
+0xf363a5f
+// -0.075556
+0xf6542afb
+// 0.248293
+0x1fc80ed3
+// -0.361970
+0xd1aaf88d
+// 0.381389
+0x30d159b9
+// -0.059063
+0xf870a264
+// 0.191360
+0x187e7c53
+// 0.748305
+0x5fc8712c
+// 0.124429
+0xfed4a5e
+// -0.063381
+0xf7e31f2b
+// -0.615202
+0xb14110ec
+// 0.095474
+0xc387a54
+// 0.549918
+0x4663b4e7
+// -0.060882
+0xf835040d
+// 0.446821
+0x39316e02
+// -0.042274
+0xfa96c136
+// -0.500313
+0xbff5c1e7
+// 0.105266
+0xd795ddd
+// -0.005762
+0xff433449
+// 0.099009
+0xcac5359
+// 0.428571
+0x36db6ca2
+// 0.048871
+0x641682d
+// 0.206975
+0x1a7e299a
+// 0.398124
+0x32f5b86d
+// -0.172626
+0xe9e7609e
+// -0.060870
+0xf83568c5
+// 0.001147
+0x25971e
+// 0.012344
+0x1947fce
+// -0.556249
+0xb8ccd2b6
+// 0.195288
+0x18ff2fbb
+// 0.681666
+0x5740d0bc
+// 0.030112
+0x3dab790
+// -0.409154
+0xcba0d5e3
+// -0.143364
+0xeda642cf
+// 0.126430
+0x102ed85a
+// 0.191007
+0x1872e876
+// -0.219354
+0xe3ec3612
+// -0.458380
+0xc553cb4f
+// -0.336939
+0xd4df2b93
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference3_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference3_q31.txt
new file mode 100644
index 0000000..5426f1f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference3_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.002201
+0x4820c2
+// 0.004625
+0x978c25
+// 0.013600
+0x1bda29c
+// 0.000039
+0x1467d
+// 0.018619
+0x26217b1
+// 0.027892
+0x391f8d0
+// 0.130242
+0x10abc75e
+// 0.032790
+0x43272a1
+// 0.000509
+0x10b154
+// 0.090110
+0xb88b8a4
+// 0.045546
+0x5d47002
+// 0.007078
+0xe7ecd8
+// 0.142906
+0x124abdae
+// 0.002259
+0x4a05d1
+// 0.017609
+0x2410702
+// 0.041001
+0x53f824f
+// 0.112081
+0xe58ae11
+// 0.045115
+0x5c655e3
+// 0.111755
+0xe4df95d
+// 0.019128
+0x272c846
+// 0.003297
+0x6c0749
+// 0.002396
+0x4e7f9b
+// 0.127393
+0x104e6a8c
+// 0.029670
+0x3cc38a1
+// 0.034601
+0x46dccf7
+// 0.232677
+0x1dc85918
+// 0.000986
+0x204afe
+// 0.034968
+0x479d4b5
+// 0.005727
+0xbbaabe
+// 0.014362
+0x1d69e01
+// 0.107750
+0xdcabe5e
+// 0.001258
+0x2935be
+// 0.011231
+0x170062f
+// 0.071181
+0x91c7401
+// 0.000017
+0x9005
+// 0.023902
+0x30f3b7a
+// 0.000499
+0x105868
+// 0.015862
+0x207c18a
+// 0.001439
+0x2f27e6
+// 0.022818
+0x2ebafd4
+// 0.171570
+0x15f602a0
+// 0.043629
+0x595a1c8
+// 0.000655
+0x157a1f
+// 0.026672
+0x369fc27
+// 0.000123
+0x40626
+// 0.010717
+0x15f2967
+// 0.015010
+0x1ebd8b9
+// 0.019397
+0x27b9792
+// 0.007696
+0xfc3107
+// 0.000951
+0x1f2720
+// 0.060407
+0x7bb6d31
+// 0.025630
+0x347dada
+// 0.007092
+0xe8636e
+// 0.005254
+0xac28a8
+// 0.174981
+0x1665c3cb
+// 0.058951
+0x78bb332
+// 0.026877
+0x370b8c5
+// 0.090741
+0xb9d6ac1
+// 0.039505
+0x50e7e26
+// 0.034487
+0x46a10d7
+// 0.082852
+0xa9ae384
+// 0.215495
+0x1b955528
+// 0.019581
+0x281a3b0
+// 0.190560
+0x18644707
+// 0.039460
+0x50d0645
+// 0.077299
+0x9e4f00b
+// 0.000744
+0x186530
+// 0.008805
+0x12087f6
+// 0.056860
+0x7472ecd
+// 0.011650
+0x17dbe6f
+// 0.002692
+0x5838d8
+// 0.077647
+0x9f05261
+// 0.002911
+0x5f6377
+// 0.000000
+0xa
+// 0.144806
+0x12890397
+// 0.144378
+0x127af71a
+// 0.066389
+0x87f6ef3
+// 0.058872
+0x7891d54
+// 0.084696
+0xad75318
+// 0.000364
+0xbeb7d
+// 0.032599
+0x42c3048
+// 0.024663
+0x3282ac9
+// 0.005421
+0xb1a06d
+// 0.044800
+0x5bbff8d
+// 0.043600
+0x594af5a
+// 0.016753
+0x224f758
+// 0.243647
+0x1f2fd649
+// 0.041094
+0x5428f1b
+// 0.113513
+0xe879985
+// 0.025944
+0x352238b
+// 0.005046
+0xa55afe
+// 0.003602
+0x760861
+// 0.011807
+0x182e3c0
+// 0.047911
+0x621f584
+// 0.037620
+0x4d0baa1
+// 0.227569
+0x1d20fb31
+// 0.064568
+0x843c743
+// 0.049797
+0x65fc18e
+// 0.058718
+0x7840fc9
+// 0.000164
+0x55be4
+// 0.150139
+0x1337c44f
+// 0.017111
+0x230ad55
+// 0.004073
+0x85730c
+// 0.076621
+0x9ceb93e
+// 0.121949
+0xf9c038b
+// 0.000647
+0x153430
+// 0.001644
+0x35dfd6
+// 0.000905
+0x1da42d
+// 0.002316
+0x4be415
+// 0.060071
+0x7b06727
+// 0.006502
+0xd50bc2
+// 0.000048
+0x19401
+// 0.001185
+0x26d778
+// 0.005688
+0xba654f
+// 0.209926
+0x1aded70c
+// 0.013656
+0x1bf7dd0
+// 0.023973
+0x3118aa8
+// 0.034315
+0x4646d1f
+// 0.037011
+0x4bcc6d6
+// 0.104041
+0xd5137df
+// 0.000437
+0xe4f5b
+// 0.076917
+0x9d86e7d
+// 0.000051
+0x1ab62
+// 0.003670
+0x784222
+// 0.015883
+0x2087315
+// 0.000406
+0xd4d09
+// 0.044139
+0x5a65b43
+// 0.013796
+0x1c412d8
+// 0.054059
+0x6eb69a3
+// 0.028282
+0x39ec125
+// 0.000014
+0x75cf
+// 0.038644
+0x4f24d7d
+// 0.008734
+0x11e325e
+// 0.094739
+0xc206548
+// 0.021275
+0x2b9267f
+// 0.005426
+0xb1d019
+// 0.004338
+0x8e2521
+// 0.147153
+0x12d5e665
+// 0.037883
+0x4d95806
+// 0.043917
+0x59f1036
+// 0.016122
+0x2104a10
+// 0.005567
+0xb66bd4
+// 0.034432
+0x4684393
+// 0.017315
+0x237612b
+// 0.055162
+0x70f886f
+// 0.141913
+0x122a318b
+// 0.050714
+0x67dcdee
+// 0.000032
+0x10f27
+// 0.008242
+0x10e13c2
+// 0.018778
+0x26752b1
+// 0.026143
+0x358a64e
+// 0.005732
+0xbbd491
+// 0.000655
+0x15779c
+// 0.000075
+0x271e9
+// 0.064612
+0x8453838
+// 0.008389
+0x112e76e
+// 0.000084
+0x2bcb6
+// 0.053526
+0x6d9f420
+// 0.065998
+0x8729b7e
+// 0.000231
+0x7942a
+// 0.068431
+0x8c2557a
+// 0.034948
+0x4792dc4
+// 0.009261
+0x12f7433
+// 0.000528
+0x114e3f
+// 0.015374
+0x1f7c3c6
+// 0.036835
+0x4b70044
+// 0.038525
+0x4ee6696
+// 0.090076
+0xb879b65
+// 0.017866
+0x2496b57
+// 0.011382
+0x174fae3
+// 0.009341
+0x1321515
+// 0.070860
+0x911f296
+// 0.048531
+0x63640ab
+// 0.006613
+0xd8b5bb
+// 0.000036
+0x12f46
+// 0.000148
+0x4d909
+// 0.021539
+0x2c1cb38
+// 0.005477
+0xb37aff
+// 0.024697
+0x32948b1
+// 0.091180
+0xbabc66a
+// 0.053149
+0x6cd98f8
+// 0.040464
+0x52def80
+// 0.015547
+0x1fd7433
+// 0.044127
+0x5a5f7f4
+// 0.174289
+0x164f1cab
+// 0.025484
+0x3431050
+// 0.059910
+0x7ab23f9
+// 0.039502
+0x50e646a
+// 0.031506
+0x40865eb
+// 0.023703
+0x308b4d5
+// 0.068974
+0x8d427dc
+// 0.019638
+0x2838051
+// 0.071446
+0x9252596
+// 0.000493
+0x102960
+// 0.129265
+0x108bbdcc
+// 0.035020
+0x47b85fb
+// 0.062092
+0x7f29f52
+// 0.158167
+0x143ed1b4
+// 0.006340
+0xcfbeaf
+// 0.003859
+0x7e6fce
+// 0.055332
+0x7151e93
+// 0.013449
+0x1b8b0f8
+// 0.003424
+0x703463
+// 0.108376
+0xddf45a5
+// 0.003301
+0x6c2b8c
+// 0.063817
+0x82b2b7d
+// 0.216717
+0x1bbd614f
+// 0.170249
+0x15cab557
+// 0.001772
+0x3a111e
+// 0.011036
+0x169a121
+// 0.000219
+0x72a85
+// 0.059785
+0x7a706b8
+// 0.110333
+0xe1f6081
+// 0.004197
+0x89885a
+// 0.007997
+0x1060efa
+// 0.000368
+0xc119c
+// 0.000877
+0x1cc0bf
+// 0.006348
+0xd005e9
+// 0.002566
+0x541565
+// 0.027711
+0x38c05e3
+// 0.058893
+0x789ce31
+// 0.065381
+0x85e6b9b
+// 0.001568
+0x33614d
+// 0.016460
+0x21b59bf
+// 0.251695
+0x20378ed4
+// 0.006959
+0xe40a62
+// 0.001806
+0x3b2b25
+// 0.170119
+0x15c67961
+// 0.004097
+0x8641a2
+// 0.135930
+0x116624c4
+// 0.001666
+0x369827
+// 0.089740
+0xb7c9943
+// 0.000803
+0x1a527c
+// 0.112513
+0xe66d0f7
+// 0.004981
+0xa335d5
+// 0.000015
+0x7d2b
+// 0.004406
+0x90622f
+// 0.082559
+0xa914bd3
+// 0.001074
+0x232d97
+// 0.019256
+0x276f700
+// 0.071245
+0x91e8f30
+// 0.013395
+0x1b6eaf5
+// 0.001665
+0x3692a4
+// 0.000001
+0x4f6
+// 0.000068
+0x23e92
+// 0.139078
+0x11cd4cc0
+// 0.017142
+0x231b7cc
+// 0.208863
+0x1abc0535
+// 0.000408
+0xd5af6
+// 0.075248
+0x9a1b6b9
+// 0.009238
+0x12eb94b
+// 0.007185
+0xeb6eb0
+// 0.016399
+0x2195c59
+// 0.021628
+0x2c4b1ee
+// 0.094443
+0xc16b6d7
+// 0.051030
+0x688236c
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference4_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference4_q31.txt
new file mode 100644
index 0000000..d41e6b8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference4_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// -0.093517
+0xf407a51d
+// -0.135554
+0xeea62c8d
+// -0.232449
+0xe23f1f44
+// 0.012435
+0x19779a0
+// -0.271979
+0xdd2fcbd5
+// 0.332892
+0x2a9c36f3
+// 0.719347
+0x5c138d95
+// -0.360936
+0xd1ccdb04
+// 0.044988
+0x5c22dfb
+// 0.598341
+0x4c966d7f
+// 0.425388
+0x36731e7b
+// 0.167692
+0x1576eaf2
+// -0.753507
+0x9f8d13e1
+// -0.094737
+0xf3dfa81a
+// -0.264506
+0xde24aadf
+// 0.403606
+0x33a95c74
+// -0.667312
+0xaa958641
+// -0.423374
+0xc9cee47d
+// 0.666339
+0x554a94f8
+// 0.275674
+0x23494872
+// 0.114448
+0xea63767
+// 0.097559
+0xc7cd13a
+// 0.711435
+0x5b104cc7
+// 0.343336
+0x2bf27287
+// -0.370771
+0xd08a941c
+// 0.961476
+0x7b11a95e
+// 0.062574
+0x802694b
+// 0.372733
+0x2fb5b516
+// 0.150845
+0x134ee477
+// -0.238875
+0xe16c88e3
+// -0.654290
+0xac403822
+// -0.070687
+0xf6f3bc4b
+// 0.211240
+0x1b09e6c3
+// 0.531794
+0x4411d6ef
+// -0.008259
+0xfef15eb0
+// 0.308165
+0x2771ef3c
+// 0.044518
+0x5b2c2d7
+// -0.251037
+0xdfde083d
+// 0.075615
+0x9adbc7e
+// 0.301091
+0x268a22e8
+// -0.825626
+0x9651e6d3
+// 0.416341
+0x354aab80
+// 0.051030
+0x6882592
+// -0.325529
+0xd6551347
+// 0.022089
+0x2d3cc32
+// -0.206344
+0xe59688d8
+// -0.244204
+0xe0bdef5f
+// 0.277605
+0x23888b94
+// 0.174865
+0x1661f8c8
+// 0.061459
+0x7dde42e
+// -0.489900
+0xc14af90c
+// 0.319109
+0x28d892b5
+// -0.167859
+0xea8398f8
+// 0.144478
+0x127e41f4
+// 0.833791
+0x6ab9aa9e
+// -0.483957
+0xc20daef0
+// -0.326781
+0xd62c0b0f
+// -0.600434
+0xb324fb2a
+// -0.396175
+0xcd4a22c5
+// -0.370160
+0xd09e9b14
+// 0.573738
+0x49703c05
+// 0.925296
+0x767018c6
+// 0.278922
+0x23b3b7a0
+// 0.870119
+0x6f600b1e
+// -0.395950
+0xcd51800f
+// -0.554178
+0xb910aef7
+// 0.054386
+0x6f621e7
+// -0.187040
+0xe80f15ea
+// -0.475297
+0xc3297802
+// -0.215141
+0xe47641c4
+// -0.103425
+0xf2c2f785
+// -0.555422
+0xb8e7ebd9
+// -0.107544
+0xf23c012a
+// -0.000138
+0xfffb7804
+// 0.758501
+0x61168e2c
+// -0.757377
+0x9f0e4415
+// -0.513582
+0xbe42edd1
+// -0.483633
+0xc2184ca4
+// 0.580088
+0x4a405674
+// 0.038017
+0x4ddba36
+// -0.359883
+0xd1ef5aed
+// 0.313031
+0x281169b7
+// -0.146754
+0xed372626
+// 0.421891
+0x360084bf
+// 0.416203
+0x35462695
+// -0.257994
+0xdefa0af4
+// -0.983882
+0x8210251e
+// -0.404064
+0xcc47a2ad
+// 0.671561
+0x55f5b54a
+// 0.321057
+0x291865f0
+// -0.141595
+0xede03acd
+// -0.119630
+0xf0affa73
+// -0.216586
+0xe446e6e6
+// -0.436296
+0xc82771d6
+// 0.386608
+0x317c6119
+// -0.950865
+0x864a0eb5
+// 0.506492
+0x40d4b8f8
+// 0.444800
+0x38ef3626
+// 0.483000
+0x3dd2eea2
+// -0.025490
+0xfcbcbadd
+// 0.772342
+0x62dc1919
+// -0.260732
+0xdea05898
+// -0.127202
+0xefb7d424
+// 0.551743
+0x469f8309
+// -0.696067
+0xa6e74a05
+// 0.050704
+0x67d7a62
+// -0.080822
+0xf5a7a1df
+// -0.059950
+0xf8539290
+// 0.095925
+0xc474622
+// -0.488533
+0xc177bc4c
+// 0.160721
+0x14928587
+// -0.013833
+0xfe3aba05
+// 0.068626
+0x8c8b976
+// 0.150333
+0x133e1f77
+// 0.913261
+0x74e5bca3
+// 0.232932
+0x1dd0b9a2
+// 0.308618
+0x2780cf5e
+// 0.369235
+0x2f43173e
+// 0.383467
+0x3115706b
+// 0.642932
+0x524b9475
+// -0.041654
+0xfaab14be
+// 0.552809
+0x46c26e6e
+// -0.014227
+0xfe2dcbb0
+// 0.120752
+0xf74ce88
+// 0.251204
+0x20277445
+// -0.040159
+0xfadc1582
+// -0.418769
+0xca65c348
+// -0.234122
+0xe2084bd4
+// 0.463444
+0x3b522150
+// -0.335212
+0xd517c54a
+// -0.007470
+0xff0b3ae5
+// -0.391838
+0xcdd84433
+// 0.186281
+0x17d8123d
+// 0.613516
+0x4e87b0a7
+// 0.290737
+0x2536e017
+// -0.146831
+0xed34a0ff
+// -0.131281
+0xef322be1
+// 0.764621
+0x61df1ca4
+// -0.387957
+0xce576e8e
+// -0.417712
+0xca88673f
+// -0.253089
+0xdf9ac7d0
+// 0.148722
+0x130951d4
+// 0.369865
+0x2f57b878
+// -0.262285
+0xde6d6e66
+// -0.468145
+0xc413d2cd
+// -0.750884
+0x9fe308d2
+// -0.448877
+0xc68b3390
+// -0.011332
+0xfe8ca8c6
+// -0.180959
+0xe8d65224
+// -0.273142
+0xdd09acb3
+// 0.322284
+0x29409b46
+// -0.150911
+0xecaef4de
+// 0.051018
+0x687c3d4
+// -0.017218
+0xfdcbcfe4
+// -0.506664
+0xbf25a02c
+// 0.182569
+0x175e6ea9
+// -0.018217
+0xfdab0d5a
+// -0.461154
+0xc4f8e470
+// -0.512066
+0xbe749cf2
+// -0.030314
+0xfc1eaf95
+// 0.521420
+0x42bde1a6
+// 0.372627
+0x2fb23b39
+// 0.191815
+0x188d68f7
+// -0.045807
+0xfa22ff7b
+// 0.247145
+0x1fa26f85
+// 0.382553
+0x30f77ba1
+// 0.391233
+0x3213efae
+// 0.598228
+0x4c92ba5f
+// 0.266422
+0x221a2190
+// -0.212657
+0xe4c7a610
+// 0.192644
+0x18a892a1
+// 0.530595
+0x43ea8d3b
+// -0.439107
+0xc7cb5768
+// 0.162098
+0x14bf9d80
+// 0.011985
+0x188b87a
+// 0.024244
+0x31a6fec
+// -0.292534
+0xda8e3f93
+// 0.147518
+0x12e1e130
+// -0.313248
+0xd7e7808a
+// 0.601882
+0x4d0a7713
+// 0.459527
+0x3ad1c975
+// 0.400958
+0x335294ac
+// -0.248536
+0xe02ff6bf
+// 0.418713
+0x3598659a
+// 0.832142
+0x6a83a465
+// -0.318198
+0xd7454bb8
+// 0.487880
+0x3e72d9fc
+// -0.396160
+0xcd4aa3cc
+// 0.353803
+0x2d49669c
+// -0.306878
+0xd8b838ce
+// -0.523488
+0xbcfe5aca
+// 0.279326
+0x23c0f7c8
+// 0.532785
+0x443248e8
+// -0.044267
+0xfa5575bb
+// -0.716642
+0xa445164e
+// -0.373008
+0xd0414695
+// -0.496683
+0xc06cb1c2
+// 0.792721
+0x6577e15f
+// 0.158709
+0x14509655
+// -0.123815
+0xf026d2d3
+// 0.468868
+0x3c03dd30
+// 0.231156
+0x1d968245
+// 0.116639
+0xeee0468
+// 0.656190
+0x53fe0496
+// 0.114523
+0xea8ac9b
+// -0.503538
+0xbf8c13d5
+// 0.927916
+0x76c5f41b
+// -0.822440
+0x96ba4a8c
+// 0.083908
+0xabd7c4f
+// 0.209396
+0x1acd8037
+// -0.029477
+0xfc3a1bd4
+// -0.487368
+0xc19de8da
+// -0.662086
+0xab40c7e6
+// 0.129134
+0x10877572
+// 0.178253
+0x16d0fd23
+// 0.038253
+0x4e57c0a
+// -0.059044
+0xf8713c36
+// -0.158816
+0xebabee6e
+// 0.100970
+0xcec96cd
+// -0.331807
+0xd58757ec
+// 0.483720
+0x3dea89c1
+// -0.509671
+0xbec31c6d
+// 0.078929
+0xa1a5599
+// -0.255725
+0xdf4468ba
+// -1.000000
+0x80000000
+// -0.166281
+0xeab74b85
+// 0.084700
+0xad77201
+// 0.822128
+0x693b7abf
+// -0.127587
+0xefab3eb5
+// -0.734885
+0xa1ef4946
+// 0.081360
+0xa6a017e
+// -0.597111
+0xb391dc82
+// 0.056493
+0x73b2db7
+// 0.668595
+0x5594848c
+// -0.140673
+0xedfe6c7d
+// 0.007700
+0xfc4c4c
+// -0.132311
+0xef106e6c
+// -0.572723
+0xb6b1022a
+// -0.065309
+0xf7a3f3ee
+// -0.276592
+0xdc98a0a3
+// -0.532034
+0xbbe64b63
+// 0.230690
+0x1d874099
+// 0.081344
+0xa697ae5
+// -0.001533
+0xffcdc41b
+// -0.016496
+0xfde37218
+// 0.743346
+0x5f25f7b2
+// -0.260974
+0xde986b52
+// -0.910947
+0x8b66195e
+// -0.040241
+0xfad96578
+// 0.546775
+0x45fcb911
+// 0.191585
+0x1885d816
+// -0.168955
+0xea5fb0d8
+// -0.255253
+0xdf53e180
+// 0.293135
+0x25856ed7
+// 0.612559
+0x4e685157
+// 0.450270
+0x39a2760f
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference5_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference5_q31.txt
new file mode 100644
index 0000000..9cece45
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference5_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.593517
+0x4bf85ae3
+// 0.635554
+0x5159d373
+// 0.732449
+0x5dc0e0bc
+// 0.487565
+0x3e688660
+// 0.771979
+0x62d0342b
+// 0.167108
+0x1563c90d
+// -0.219347
+0xe3ec726b
+// 0.860936
+0x6e3324fc
+// 0.455012
+0x3a3dd205
+// -0.098341
+0xf3699281
+// 0.074612
+0x98ce185
+// 0.332308
+0x2a89150e
+// 1.253507
+0x7fffffff
+// 0.594737
+0x4c2057e6
+// 0.764506
+0x61db5521
+// 0.096394
+0xc56a38c
+// 1.167312
+0x7fffffff
+// 0.923374
+0x76311b83
+// -0.166339
+0xeab56b08
+// 0.224326
+0x1cb6b78e
+// 0.385552
+0x3159c899
+// 0.402441
+0x33832ec6
+// -0.211435
+0xe4efb339
+// 0.156664
+0x140d8d79
+// 0.870771
+0x6f756be4
+// -0.461476
+0xc4ee56a2
+// 0.437426
+0x37fd96b5
+// 0.127267
+0x104a4aea
+// 0.349155
+0x2cb11b89
+// 0.738875
+0x5e93771d
+// 1.154290
+0x7fffffff
+// 0.570687
+0x490c43b5
+// 0.288760
+0x24f6193d
+// -0.031794
+0xfbee2911
+// 0.508259
+0x410ea150
+// 0.191835
+0x188e10c4
+// 0.455482
+0x3a4d3d29
+// 0.751037
+0x6021f7c3
+// 0.424385
+0x36524382
+// 0.198909
+0x1975dd18
+// 1.325626
+0x7fffffff
+// 0.083659
+0xab55480
+// 0.448970
+0x3977da6e
+// 0.825529
+0x69aaecb9
+// 0.477911
+0x3d2c33ce
+// 0.706344
+0x5a697728
+// 0.744204
+0x5f4210a1
+// 0.222395
+0x1c77746c
+// 0.325135
+0x299e0738
+// 0.438541
+0x38221bd2
+// 0.989900
+0x7eb506f4
+// 0.180891
+0x17276d4b
+// 0.667859
+0x557c6708
+// 0.355522
+0x2d81be0c
+// -0.333791
+0xd5465562
+// 0.983957
+0x7df25110
+// 0.826781
+0x69d3f4f1
+// 1.100434
+0x7fffffff
+// 0.896175
+0x72b5dd3b
+// 0.870160
+0x6f6164ec
+// -0.073738
+0xf68fc3fb
+// -0.425296
+0xc98fe73a
+// 0.221078
+0x1c4c4860
+// -0.370119
+0xd09ff4e2
+// 0.895950
+0x72ae7ff1
+// 1.054178
+0x7fffffff
+// 0.445614
+0x3909de19
+// 0.687040
+0x57f0ea16
+// 0.975297
+0x7cd687fe
+// 0.715141
+0x5b89be3c
+// 0.603425
+0x4d3d087b
+// 1.055422
+0x7fffffff
+// 0.607544
+0x4dc3fed6
+// 0.500138
+0x400487fc
+// -0.258501
+0xdee971d4
+// 1.257377
+0x7fffffff
+// 1.013582
+0x7fffffff
+// 0.983633
+0x7de7b35c
+// -0.080088
+0xf5bfa98c
+// 0.461983
+0x3b2245ca
+// 0.859883
+0x6e10a513
+// 0.186969
+0x17ee9649
+// 0.646754
+0x52c8d9da
+// 0.078109
+0x9ff7b41
+// 0.083797
+0xab9d96b
+// 0.757994
+0x6105f50c
+// 1.483882
+0x7fffffff
+// 0.904064
+0x73b85d53
+// -0.171561
+0xea0a4ab6
+// 0.178943
+0x16e79a10
+// 0.641595
+0x521fc533
+// 0.619630
+0x4f50058d
+// 0.716586
+0x5bb9191a
+// 0.936296
+0x77d88e2a
+// 0.113392
+0xe839ee7
+// 1.450865
+0x7fffffff
+// -0.006492
+0xff2b4708
+// 0.055200
+0x710c9da
+// 0.017000
+0x22d115e
+// 0.525490
+0x43434523
+// -0.272342
+0xdd23e6e7
+// 0.760732
+0x615fa768
+// 0.627202
+0x50482bdc
+// -0.051743
+0xf9607cf7
+// 1.196067
+0x7fffffff
+// 0.449296
+0x3982859e
+// 0.580822
+0x4a585e21
+// 0.559950
+0x47ac6d70
+// 0.404075
+0x33b8b9de
+// 0.988533
+0x7e8843b4
+// 0.339279
+0x2b6d7a79
+// 0.513833
+0x41c545fb
+// 0.431374
+0x3737468a
+// 0.349667
+0x2cc1e089
+// -0.413261
+0xcb1a435d
+// 0.267068
+0x222f465e
+// 0.191382
+0x187f30a2
+// 0.130765
+0x10bce8c2
+// 0.116533
+0xeea8f95
+// -0.142932
+0xedb46b8b
+// 0.541654
+0x4554eb42
+// -0.052809
+0xf93d9192
+// 0.514227
+0x41d23450
+// 0.379248
+0x308b3178
+// 0.248796
+0x1fd88bbb
+// 0.540159
+0x4523ea7e
+// 0.918769
+0x759a3cb8
+// 0.734122
+0x5df7b42c
+// 0.036556
+0x4addeb0
+// 0.835212
+0x6ae83ab6
+// 0.507470
+0x40f4c51b
+// 0.891838
+0x7227bbcd
+// 0.313719
+0x2827edc3
+// -0.113516
+0xf1784f59
+// 0.209263
+0x1ac91fe9
+// 0.646831
+0x52cb5f01
+// 0.631281
+0x50cdd41f
+// -0.264621
+0xde20e35c
+// 0.887957
+0x71a89172
+// 0.917712
+0x757798c1
+// 0.753089
+0x60653830
+// 0.351278
+0x2cf6ae2c
+// 0.130135
+0x10a84788
+// 0.762285
+0x6192919a
+// 0.968145
+0x7bec2d33
+// 1.250884
+0x7fffffff
+// 0.948877
+0x7974cc70
+// 0.511332
+0x4173573a
+// 0.680959
+0x5729addc
+// 0.773142
+0x62f6534d
+// 0.177716
+0x16bf64ba
+// 0.650911
+0x53510b22
+// 0.448982
+0x39783c2c
+// 0.517218
+0x4234301c
+// 1.006664
+0x7fffffff
+// 0.317431
+0x28a19157
+// 0.518217
+0x4254f2a6
+// 0.961154
+0x7b071b90
+// 1.012066
+0x7fffffff
+// 0.530314
+0x43e1506b
+// -0.021420
+0xfd421e5a
+// 0.127373
+0x104dc4c7
+// 0.308185
+0x27729709
+// 0.545807
+0x45dd0085
+// 0.252855
+0x205d907b
+// 0.117447
+0xf08845f
+// 0.108767
+0xdec1052
+// -0.098228
+0xf36d45a1
+// 0.233578
+0x1de5de70
+// 0.712657
+0x5b3859f0
+// 0.307356
+0x27576d5f
+// -0.030595
+0xfc1572c5
+// 0.939107
+0x7834a898
+// 0.337902
+0x2b406280
+// 0.488015
+0x3e774786
+// 0.475756
+0x3ce59014
+// 0.792534
+0x6571c06d
+// 0.352482
+0x2d1e1ed0
+// 0.813248
+0x68187f76
+// -0.101882
+0xf2f588ed
+// 0.040473
+0x52e368b
+// 0.099042
+0xcad6b54
+// 0.748536
+0x5fd00941
+// 0.081287
+0xa679a66
+// -0.332142
+0xd57c5b9b
+// 0.818198
+0x68bab448
+// 0.012120
+0x18d2604
+// 0.896160
+0x72b55c34
+// 0.146197
+0x12b69964
+// 0.806878
+0x6747c732
+// 1.023488
+0x7fffffff
+// 0.220674
+0x1c3f0838
+// -0.032785
+0xfbcdb718
+// 0.544267
+0x45aa8a45
+// 1.216642
+0x7fffffff
+// 0.873008
+0x6fbeb96b
+// 0.996683
+0x7f934e3e
+// -0.292721
+0xda881ea1
+// 0.341291
+0x2baf69ab
+// 0.623815
+0x4fd92d2d
+// 0.031132
+0x3fc22d0
+// 0.268844
+0x22697dbb
+// 0.383361
+0x3111fb98
+// -0.156190
+0xec01fb6a
+// 0.385477
+0x31575365
+// 1.003538
+0x7fffffff
+// -0.427916
+0xc93a0be5
+// 1.322440
+0x7fffffff
+// 0.416092
+0x354283b1
+// 0.290604
+0x25327fc9
+// 0.529477
+0x43c5e42c
+// 0.987368
+0x7e621726
+// 1.162086
+0x7fffffff
+// 0.370866
+0x2f788a8e
+// 0.321747
+0x292f02dd
+// 0.461747
+0x3b1a83f6
+// 0.559044
+0x478ec3ca
+// 0.658816
+0x54541192
+// 0.399030
+0x33136933
+// 0.831807
+0x6a78a814
+// 0.016280
+0x215763f
+// 1.009671
+0x7fffffff
+// 0.421071
+0x35e5aa67
+// 0.755725
+0x60bb9746
+// 1.500000
+0x7fffffff
+// 0.666281
+0x5548b47b
+// 0.415300
+0x35288dff
+// -0.322128
+0xd6c48541
+// 0.627587
+0x5054c14b
+// 1.234885
+0x7fffffff
+// 0.418640
+0x3595fe82
+// 1.097111
+0x7fffffff
+// 0.443507
+0x38c4d249
+// -0.168595
+0xea6b7b74
+// 0.640673
+0x52019383
+// 0.492300
+0x3f03b3b4
+// 0.632311
+0x50ef9194
+// 1.072723
+0x7fffffff
+// 0.565309
+0x485c0c12
+// 0.776592
+0x63675f5d
+// 1.032034
+0x7fffffff
+// 0.269310
+0x2278bf67
+// 0.418656
+0x3596851b
+// 0.501533
+0x40323be5
+// 0.516496
+0x421c8de8
+// -0.243346
+0xe0da084e
+// 0.760974
+0x616794ae
+// 1.410947
+0x7fffffff
+// 0.540241
+0x45269a88
+// -0.046775
+0xfa0346ef
+// 0.308415
+0x277a27ea
+// 0.668955
+0x55a04f28
+// 0.755253
+0x60ac1e80
+// 0.206865
+0x1a7a9129
+// -0.112559
+0xf197aea9
+// 0.049730
+0x65d89f1
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference6_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference6_q31.txt
new file mode 100644
index 0000000..4d9c9e8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference6_q31.txt
@@ -0,0 +1,514 @@
+W
+256
+// 0.046758
+0x5fc2d71
+// 0.067777
+0x8ace9ba
+// 0.116224
+0xee0705e
+// -0.006218
+0xff344330
+// 0.135989
+0x11681a16
+// -0.166446
+0xeab1e487
+// -0.359673
+0xd1f63936
+// 0.180468
+0x1719927e
+// -0.022494
+0xfd1ee902
+// -0.299170
+0xd9b4c940
+// -0.212694
+0xe4c670c2
+// -0.083846
+0xf5448a87
+// 0.376754
+0x3039760f
+// 0.047369
+0x6102bf3
+// 0.132253
+0x10edaa90
+// -0.201803
+0xe62b51c6
+// 0.333656
+0x2ab53ce0
+// 0.211687
+0x1b188dc2
+// -0.333169
+0xd55ab584
+// -0.137837
+0xee5b5bc7
+// -0.057224
+0xf8ace44d
+// -0.048780
+0xf9c19763
+// -0.355717
+0xd277d99c
+// -0.171668
+0xea06c6bd
+// 0.185385
+0x17bab5f2
+// -0.480738
+0xc2772b51
+// -0.031287
+0xfbfecb5a
+// -0.186366
+0xe8252575
+// -0.075423
+0xf6588dc5
+// 0.119438
+0xf49bb8f
+// 0.327145
+0x29dfe3ef
+// 0.035343
+0x48621db
+// -0.105620
+0xf27b0c9e
+// -0.265897
+0xddf71489
+// 0.004129
+0x8750a8
+// -0.154082
+0xec470862
+// -0.022259
+0xfd269e94
+// 0.125518
+0x1010fbe2
+// -0.037807
+0xfb2921c1
+// -0.150545
+0xecbaee8c
+// 0.412813
+0x34d70c96
+// -0.208171
+0xe55aaa40
+// -0.025515
+0xfcbbed37
+// 0.162764
+0x14d5765c
+// -0.011044
+0xfe9619e7
+// 0.103172
+0xd34bb94
+// 0.122102
+0xfa10850
+// -0.138802
+0xee3bba36
+// -0.087432
+0xf4cf039c
+// -0.030730
+0xfc110de9
+// 0.244950
+0x1f5a837a
+// -0.159555
+0xeb93b6a5
+// 0.083929
+0xabe3384
+// -0.072239
+0xf6c0df06
+// -0.416896
+0xcaa32ab1
+// 0.241979
+0x1ef92888
+// 0.163390
+0x14e9fa79
+// 0.300217
+0x266d826b
+// 0.198088
+0x195aee9e
+// 0.185080
+0x17b0b276
+// -0.286869
+0xdb47e1fe
+// -0.462648
+0xc4c7f39d
+// -0.139461
+0xee262430
+// -0.435059
+0xc84ffa71
+// 0.197975
+0x19573ff8
+// 0.277089
+0x2377a885
+// -0.027193
+0xfc84ef0c
+// 0.093520
+0xbf8750b
+// 0.237648
+0x1e6b43ff
+// 0.107571
+0xdc4df1e
+// 0.051713
+0x69e843e
+// 0.277711
+0x238c0a14
+// 0.053772
+0x6e1ff6b
+// 0.000069
+0x243fe
+// -0.379250
+0xcf74b8ea
+// 0.378689
+0x3078ddf5
+// 0.256791
+0x20de8917
+// 0.241817
+0x1ef3d9ae
+// -0.290044
+0xdadfd4c6
+// -0.019008
+0xfd9122e5
+// 0.179941
+0x17085289
+// -0.156516
+0xebf74b24
+// 0.073377
+0x9646ced
+// -0.210945
+0xe4ffbda0
+// -0.208102
+0xe55cecb6
+// 0.128997
+0x1082fa86
+// 0.491941
+0x3ef7ed71
+// 0.202032
+0x19dc2eaa
+// -0.335780
+0xd505255b
+// -0.160529
+0xeb73cd08
+// 0.070797
+0x90fe299
+// 0.059815
+0x7a802c6
+// 0.108293
+0xddc8c8d
+// 0.218148
+0x1bec4715
+// -0.193304
+0xe741cf73
+// 0.475432
+0x3cdaf8a6
+// -0.253246
+0xdf95a384
+// -0.222400
+0xe38864ed
+// -0.241500
+0xe11688af
+// 0.012745
+0x1a1a291
+// -0.386171
+0xce91f374
+// 0.130366
+0x10afd3b4
+// 0.063601
+0x82415ee
+// -0.275871
+0xdcb03e7b
+// 0.348033
+0x2c8c5afd
+// -0.025352
+0xfcc142cf
+// 0.040411
+0x52c2f10
+// 0.029975
+0x3d636b8
+// -0.047963
+0xf9dc5cef
+// 0.244267
+0x1f4421da
+// -0.080361
+0xf5b6bd3d
+// 0.006916
+0xe2a2fd
+// -0.034313
+0xfb9ba345
+// -0.075167
+0xf660f045
+// -0.456631
+0xc58d21af
+// -0.116466
+0xf117a32f
+// -0.154309
+0xec3f9851
+// -0.184617
+0xe85e7461
+// -0.191733
+0xe77547ca
+// -0.321466
+0xd6da35c5
+// 0.020827
+0x2aa75a1
+// -0.276404
+0xdc9ec8c9
+// 0.007114
+0xe91a28
+// -0.060376
+0xf84598bc
+// -0.125602
+0xefec45de
+// 0.020079
+0x291f53f
+// 0.209385
+0x1acd1e5c
+// 0.117061
+0xefbda16
+// -0.231722
+0xe256ef58
+// 0.167606
+0x15741d5b
+// 0.003735
+0x7a628e
+// 0.195919
+0x1913dde7
+// -0.093141
+0xf413f6e1
+// -0.306758
+0xd8bc27ac
+// -0.145369
+0xed648ff5
+// 0.073416
+0x965af81
+// 0.065641
+0x866ea0f
+// -0.382311
+0xcf1071ae
+// 0.193978
+0x18d448b9
+// 0.208856
+0x1abbcc61
+// 0.126544
+0x10329c18
+// -0.074361
+0xf67b5716
+// -0.184932
+0xe85423c4
+// 0.131143
+0x10c948cd
+// 0.234073
+0x1df6169a
+// 0.375442
+0x300e7b97
+// 0.224438
+0x1cba6638
+// 0.005666
+0xb9ab9d
+// 0.090480
+0xb94d6ee
+// 0.136571
+0x117b29a7
+// -0.161142
+0xeb5fb25d
+// 0.075455
+0x9a88591
+// -0.025509
+0xfcbc1e16
+// 0.008609
+0x11a180e
+// 0.253332
+0x206d2fea
+// -0.091285
+0xf450c8ab
+// 0.009109
+0x12a7953
+// 0.230577
+0x1d838dc8
+// 0.256033
+0x20c5b187
+// 0.015157
+0x1f0a836
+// -0.260710
+0xdea10f2d
+// -0.186313
+0xe826e263
+// -0.095908
+0xf3b94b85
+// 0.022903
+0x2ee8042
+// -0.123572
+0xf02ec83e
+// -0.191276
+0xe784422f
+// -0.195617
+0xe6f60829
+// -0.299114
+0xd9b6a2d0
+// -0.133211
+0xeef2ef38
+// 0.106329
+0xd9c2cf8
+// -0.096322
+0xf3abb6af
+// -0.265298
+0xde0ab963
+// 0.219554
+0x1c1a544c
+// -0.081049
+0xf5a03140
+// -0.005992
+0xff3ba3c3
+// -0.012122
+0xfe72c80a
+// 0.146267
+0x12b8e037
+// -0.073759
+0xf68f0f68
+// 0.156624
+0x140c3fbb
+// -0.300941
+0xd97ac477
+// -0.229764
+0xe2971b46
+// -0.200479
+0xe656b5aa
+// 0.124268
+0xfe804a0
+// -0.209357
+0xe533cd33
+// -0.416071
+0xcabe2dce
+// 0.159099
+0x145d5a24
+// -0.243940
+0xe0c69302
+// 0.198080
+0x195aae1a
+// -0.176901
+0xe95b4cb2
+// 0.153439
+0x13a3e399
+// 0.261744
+0x2180d29b
+// -0.139663
+0xee1f841c
+// -0.266392
+0xdde6db8c
+// 0.022133
+0x2d54522
+// 0.358321
+0x2ddd74d9
+// 0.186504
+0x17df5cb5
+// 0.248341
+0x1fc9a71f
+// -0.396360
+0xcd440f50
+// -0.079355
+0xf5d7b4d6
+// 0.061908
+0x7ec9696
+// -0.234434
+0xe1fe1168
+// -0.115578
+0xf134bedd
+// -0.058319
+0xf888fdcc
+// -0.328095
+0xd600fdb5
+// -0.057261
+0xf8aba9b2
+// 0.251769
+0x2039f616
+// -0.463958
+0xc49d05f3
+// 0.411220
+0x34a2daba
+// -0.041954
+0xfaa141d8
+// -0.104698
+0xf2993fe5
+// 0.014738
+0x1e2f216
+// 0.243684
+0x1f310b93
+// 0.331043
+0x2a5f9c0d
+// -0.064567
+0xf7bc4547
+// -0.089126
+0xf497816f
+// -0.019127
+0xfd8d41fb
+// 0.029522
+0x3c761e5
+// 0.079408
+0xa2a08c9
+// -0.050485
+0xf989b499
+// 0.165904
+0x153c540a
+// -0.241860
+0xe10abb20
+// 0.254835
+0x209e71c9
+// -0.039464
+0xfaf2d533
+// 0.127862
+0x105dcba3
+// 0.500000
+0x40000000
+// 0.083141
+0xaa45a3d
+// -0.042350
+0xfa9446ff
+// -0.411064
+0xcb6242a1
+// 0.063793
+0x82a60a5
+// 0.367443
+0x2f085b5d
+// -0.040680
+0xfacaff41
+// 0.298556
+0x263711bf
+// -0.028247
+0xfc626924
+// -0.334297
+0xd535bdba
+// 0.070337
+0x900c9c2
+// -0.003850
+0xff81d9da
+// 0.066156
+0x877c8ca
+// 0.286362
+0x24a77eeb
+// 0.032655
+0x42e0609
+// 0.138296
+0x11b3afaf
+// 0.266017
+0x220cda4e
+// -0.115345
+0xf13c5fb4
+// -0.040672
+0xfacb428d
+// 0.000767
+0x191df2
+// 0.008248
+0x10e46f4
+// -0.371673
+0xd06d0427
+// 0.130487
+0x10b3ca57
+// 0.455473
+0x3a4cf351
+// 0.020120
+0x2934d44
+// -0.273387
+0xdd01a377
+// -0.095792
+0xf3bd13f5
+// 0.084477
+0xad02794
+// 0.127626
+0x10560f40
+// -0.146567
+0xed3d4894
+// -0.306279
+0xd8cbd754
+// -0.225135
+0xe32ec4f8
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference7_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference7_q31.txt
new file mode 100644
index 0000000..958c3f4
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference7_q31.txt
@@ -0,0 +1,4 @@
+W
+1
+// 0.020426
+0x29d4f83
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference8_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference8_q31.txt
new file mode 100644
index 0000000..94782f9
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference8_q31.txt
@@ -0,0 +1,4 @@
+W
+1
+// 0.230007
+0x1d70e080
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference9_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference9_q31.txt
new file mode 100644
index 0000000..8c4718d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ31/Reference9_q31.txt
@@ -0,0 +1,4 @@
+W
+1
+// 0.230517
+0x1d8191d5
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Input1_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Input1_q7.txt
new file mode 100644
index 0000000..6c3f552
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Input1_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// -0.961699
+0x85
+// 0.494232
+0x3f
+// 0.302531
+0x27
+// -0.272209
+0xdd
+// 0.177523
+0x17
+// 0.527359
+0x44
+// -0.380243
+0xcf
+// 0.524309
+0x43
+// 0.455291
+0x3a
+// -0.053627
+0xf9
+// -0.102640
+0xf3
+// 0.036724
+0x5
+// 0.032748
+0x4
+// -0.616675
+0xb1
+// 0.652389
+0x54
+// -0.038413
+0xfb
+// 0.240609
+0x1f
+// -0.323942
+0xd7
+// 0.409005
+0x34
+// 0.513823
+0x42
+// 0.203039
+0x1a
+// 0.547714
+0x46
+// -0.184587
+0xe8
+// 0.774425
+0x63
+// -0.456081
+0xc6
+// -0.677663
+0xa9
+// -0.404068
+0xcc
+// -0.588400
+0xb5
+// 0.067917
+0x9
+// 0.205010
+0x1a
+// 0.132869
+0x11
+// 0.179398
+0x17
+// 0.117318
+0xf
+// -0.168945
+0xea
+// 0.048819
+0x6
+// -0.212961
+0xe5
+// 0.449898
+0x3a
+// 0.444909
+0x39
+// 0.110639
+0xe
+// 0.406630
+0x34
+// 0.544917
+0x46
+// 0.094393
+0xc
+// -0.494758
+0xc1
+// -0.246667
+0xe0
+// 0.256129
+0x21
+// -0.572109
+0xb7
+// -0.722233
+0xa4
+// 0.579574
+0x4a
+// 0.418908
+0x36
+// -0.081306
+0xf6
+// -0.436070
+0xc8
+// -0.285771
+0xdb
+// 0.059462
+0x8
+// 0.128085
+0x10
+// 0.495905
+0x3f
+// -0.022717
+0xfd
+// -0.273855
+0xdd
+// 0.492878
+0x3f
+// -0.406182
+0xcc
+// -0.123781
+0xf0
+// -0.514053
+0xbe
+// -0.111131
+0xf2
+// 0.779729
+0x64
+// 0.147250
+0x13
+// -0.555848
+0xb9
+// -0.422051
+0xca
+// 0.255001
+0x21
+// 0.625345
+0x50
+// 0.305747
+0x27
+// 0.072751
+0x9
+// 0.837122
+0x6b
+// -0.121613
+0xf0
+// 0.623400
+0x50
+// 0.849883
+0x6d
+// -0.352876
+0xd3
+// -0.186617
+0xe8
+// 0.261612
+0x21
+// -0.490669
+0xc1
+// -0.054906
+0xf9
+// -0.824393
+0x96
+// 0.427220
+0x37
+// -0.480818
+0xc2
+// -0.926055
+0x89
+// 0.115167
+0xf
+// -0.611721
+0xb2
+// 0.376814
+0x30
+// -0.685199
+0xa8
+// -0.251623
+0xe0
+// 0.079914
+0xa
+// -0.186515
+0xe8
+// -0.286876
+0xdb
+// -0.171382
+0xea
+// -0.368392
+0xd1
+// -1.030129
+0x80
+// 0.095151
+0xc
+// 0.360974
+0x2e
+// 0.590151
+0x4c
+// -0.194777
+0xe7
+// 0.120058
+0xf
+// -0.736154
+0xa2
+// -0.601716
+0xb3
+// -0.216590
+0xe4
+// -0.042021
+0xfb
+// 0.023300
+0x3
+// -0.543915
+0xba
+// 0.256394
+0x21
+// -0.742804
+0xa1
+// 0.127436
+0x10
+// 0.211292
+0x1b
+// 0.229072
+0x1d
+// 0.177624
+0x17
+// -0.136239
+0xef
+// 0.100661
+0xd
+// -0.402520
+0xcc
+// -0.555614
+0xb9
+// 0.232713
+0x1e
+// 0.536663
+0x45
+// 0.713682
+0x5b
+// -1.019851
+0x80
+// 0.309166
+0x28
+// -0.320051
+0xd7
+// 0.293778
+0x26
+// -0.114111
+0xf1
+// -0.718378
+0xa4
+// 0.707115
+0x5b
+// 0.787982
+0x65
+// 0.968425
+0x7c
+// -0.446781
+0xc7
+// 0.087494
+0xb
+// 0.240326
+0x1f
+// 0.135808
+0x11
+// 0.045964
+0x6
+// -0.163520
+0xeb
+// 0.167623
+0x15
+// 0.202561
+0x1a
+// 0.498268
+0x40
+// -0.394554
+0xcd
+// 0.960556
+0x7b
+// -0.345021
+0xd4
+// -0.203279
+0xe6
+// -0.188332
+0xe8
+// -0.120720
+0xf1
+// -0.443905
+0xc7
+// -0.071825
+0xf7
+// -0.133639
+0xef
+// -0.290447
+0xdb
+// -0.448530
+0xc7
+// -0.022137
+0xfd
+// -0.012559
+0xfe
+// 0.971870
+0x7c
+// 0.509792
+0x41
+// 0.405037
+0x34
+// -0.149223
+0xed
+// 0.020054
+0x3
+// 0.281311
+0x24
+// -0.258409
+0xdf
+// -0.693230
+0xa7
+// -0.229410
+0xe3
+// -0.938781
+0x88
+// -0.076843
+0xf6
+// -0.624033
+0xb0
+// -0.218088
+0xe4
+// 0.335481
+0x2b
+// 0.107877
+0xe
+// -0.633110
+0xaf
+// 0.010939
+0x1
+// 0.485775
+0x3e
+// -0.186455
+0xe8
+// 0.102892
+0xd
+// 0.266691
+0x22
+// 0.282406
+0x24
+// -0.590826
+0xb4
+// -0.156682
+0xec
+// -0.453815
+0xc6
+// -0.676240
+0xa9
+// 0.110348
+0xe
+// -0.866935
+0x91
+// 0.003255
+0x0
+// 0.326490
+0x2a
+// 0.211472
+0x1b
+// 0.248533
+0x20
+// 0.324268
+0x2a
+// -0.765034
+0x9e
+// 0.144296
+0x12
+// -0.059933
+0xf8
+// -0.578251
+0xb6
+// -0.465851
+0xc4
+// 0.179015
+0x17
+// 0.524369
+0x43
+// -0.348702
+0xd3
+// -0.278665
+0xdc
+// 0.381901
+0x31
+// -0.531716
+0xbc
+// 0.196335
+0x19
+// -0.180153
+0xe9
+// 0.561431
+0x48
+// -0.233879
+0xe2
+// -0.163053
+0xeb
+// 0.007816
+0x1
+// -0.145667
+0xed
+// -0.151049
+0xed
+// 0.294988
+0x26
+// 0.270504
+0x23
+// 0.915169
+0x75
+// 0.414278
+0x35
+// 0.260942
+0x21
+// -0.628525
+0xb0
+// -0.272937
+0xdd
+// -0.179202
+0xe9
+// -0.351474
+0xd3
+// 0.039123
+0x5
+// -0.398276
+0xcd
+// 0.466159
+0x3c
+// 0.140880
+0x12
+// 1.000000
+0x7f
+// -0.420527
+0xca
+// -0.995406
+0x81
+// -0.093137
+0xf4
+// 0.444716
+0x39
+// -0.456172
+0xc6
+// 0.146709
+0x13
+// 0.439091
+0x38
+// 0.143718
+0x12
+// -0.018954
+0xfe
+// -0.317012
+0xd7
+// 0.184861
+0x18
+// 0.459883
+0x3b
+// -0.493859
+0xc1
+// -0.962717
+0x85
+// -0.231500
+0xe2
+// 0.009801
+0x1
+// -0.296984
+0xda
+// 0.439494
+0x38
+// 0.394427
+0x32
+// -0.405081
+0xcc
+// -0.383634
+0xcf
+// 0.377644
+0x30
+// -0.915626
+0x8b
+// 0.596787
+0x4c
+// -0.148876
+0xed
+// 0.934069
+0x78
+// 0.315758
+0x28
+// 0.550597
+0x46
+// 0.342042
+0x2c
+// -0.291308
+0xdb
+// -0.901065
+0x8d
+// 0.286970
+0x25
+// -0.091896
+0xf4
+// -0.380823
+0xcf
+// 0.845868
+0x6c
+// -0.124636
+0xf0
+// 0.327943
+0x2a
+// 0.083522
+0xb
+// 0.179570
+0x17
+// -0.374909
+0xd0
+// 0.517543
+0x42
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Input2_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Input2_q7.txt
new file mode 100644
index 0000000..57a06de
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Input2_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// -0.286670
+0xdb
+// 0.147324
+0x13
+// 0.090181
+0xc
+// -0.081142
+0xf6
+// 0.052917
+0x7
+// 0.157199
+0x14
+// -0.113346
+0xf1
+// 0.156290
+0x14
+// 0.135717
+0x11
+// -0.015986
+0xfe
+// -0.030596
+0xfc
+// 0.010947
+0x1
+// 0.009762
+0x1
+// -0.183823
+0xe8
+// 0.194469
+0x19
+// -0.011450
+0xff
+// 0.071722
+0x9
+// -0.096563
+0xf4
+// 0.121919
+0x10
+// 0.153164
+0x14
+// 0.060523
+0x8
+// 0.163267
+0x15
+// -0.055023
+0xf9
+// 0.230846
+0x1e
+// -0.135952
+0xef
+// -0.202003
+0xe6
+// -0.120448
+0xf1
+// -0.175394
+0xea
+// 0.020245
+0x3
+// 0.061111
+0x8
+// 0.039606
+0x5
+// 0.053476
+0x7
+// 0.034971
+0x4
+// -0.050360
+0xfa
+// 0.014552
+0x2
+// -0.063481
+0xf8
+// 0.134109
+0x11
+// 0.132622
+0x11
+// 0.032980
+0x4
+// 0.121211
+0x10
+// 0.162433
+0x15
+// 0.028137
+0x4
+// -0.147481
+0xed
+// -0.073528
+0xf7
+// 0.076349
+0xa
+// -0.170538
+0xea
+// -0.215288
+0xe4
+// 0.172764
+0x16
+// 0.124871
+0x10
+// -0.024236
+0xfd
+// -0.129987
+0xef
+// -0.085185
+0xf5
+// 0.017725
+0x2
+// 0.038181
+0x5
+// 0.147823
+0x13
+// -0.006772
+0xff
+// -0.081633
+0xf6
+// 0.146920
+0x13
+// -0.121077
+0xf1
+// -0.036898
+0xfb
+// -0.153233
+0xec
+// -0.033127
+0xfc
+// 0.232427
+0x1e
+// 0.043893
+0x6
+// -0.165691
+0xeb
+// -0.125808
+0xf0
+// 0.076013
+0xa
+// 0.186407
+0x18
+// 0.091139
+0xc
+// 0.021686
+0x3
+// 0.249535
+0x20
+// -0.036251
+0xfb
+// 0.185827
+0x18
+// 0.253339
+0x20
+// -0.105188
+0xf3
+// -0.055628
+0xf9
+// 0.077983
+0xa
+// -0.146262
+0xed
+// -0.016367
+0xfe
+// -0.245741
+0xe1
+// 0.127349
+0x10
+// -0.143326
+0xee
+// -0.276045
+0xdd
+// 0.034330
+0x4
+// -0.182346
+0xe9
+// 0.112323
+0xe
+// -0.204249
+0xe6
+// -0.075006
+0xf6
+// 0.023821
+0x3
+// -0.055598
+0xf9
+// -0.085514
+0xf5
+// -0.051087
+0xf9
+// -0.109813
+0xf2
+// -0.307068
+0xd9
+// 0.028363
+0x4
+// 0.107602
+0xe
+// 0.175916
+0x17
+// -0.058060
+0xf9
+// 0.035788
+0x5
+// -0.219438
+0xe4
+// -0.179364
+0xe9
+// -0.064563
+0xf8
+// -0.012526
+0xfe
+// 0.006945
+0x1
+// -0.162134
+0xeb
+// 0.076428
+0xa
+// -0.221420
+0xe4
+// 0.037987
+0x5
+// 0.062983
+0x8
+// 0.068284
+0x9
+// 0.052948
+0x7
+// -0.040611
+0xfb
+// 0.030006
+0x4
+// -0.119986
+0xf1
+// -0.165621
+0xeb
+// 0.069369
+0x9
+// 0.159972
+0x14
+// 0.212740
+0x1b
+// -0.304004
+0xd9
+// 0.092158
+0xc
+// -0.095403
+0xf4
+// 0.087571
+0xb
+// -0.034015
+0xfc
+// -0.214139
+0xe5
+// 0.210782
+0x1b
+// 0.234887
+0x1e
+// 0.288675
+0x25
+// -0.133180
+0xef
+// 0.026081
+0x3
+// 0.071638
+0x9
+// 0.040483
+0x5
+// 0.013701
+0x2
+// -0.048743
+0xfa
+// 0.049966
+0x6
+// 0.060381
+0x8
+// 0.148527
+0x13
+// -0.117612
+0xf1
+// 0.286329
+0x25
+// -0.102846
+0xf3
+// -0.060595
+0xf8
+// -0.056139
+0xf9
+// -0.035985
+0xfb
+// -0.132322
+0xef
+// -0.021410
+0xfd
+// -0.039836
+0xfb
+// -0.086578
+0xf5
+// -0.133701
+0xef
+// -0.006599
+0xff
+// -0.003744
+0x0
+// 0.289702
+0x25
+// 0.151962
+0x13
+// 0.120736
+0xf
+// -0.044481
+0xfa
+// 0.005978
+0x1
+// 0.083855
+0xb
+// -0.077029
+0xf6
+// -0.206643
+0xe6
+// -0.068384
+0xf7
+// -0.279838
+0xdc
+// -0.022906
+0xfd
+// -0.186016
+0xe8
+// -0.065009
+0xf8
+// 0.100003
+0xd
+// 0.032157
+0x4
+// -0.188722
+0xe8
+// 0.003261
+0x0
+// 0.144803
+0x13
+// -0.055580
+0xf9
+// 0.030671
+0x4
+// 0.079497
+0xa
+// 0.084182
+0xb
+// -0.176118
+0xe9
+// -0.046705
+0xfa
+// -0.135276
+0xef
+// -0.201578
+0xe6
+// 0.032893
+0x4
+// -0.258422
+0xdf
+// 0.000970
+0x0
+// 0.097322
+0xc
+// 0.063037
+0x8
+// 0.074085
+0x9
+// 0.096660
+0xc
+// -0.228047
+0xe3
+// 0.043013
+0x6
+// -0.017865
+0xfe
+// -0.172369
+0xea
+// -0.138864
+0xee
+// 0.053362
+0x7
+// 0.156308
+0x14
+// -0.103944
+0xf3
+// -0.083066
+0xf5
+// 0.113840
+0xf
+// -0.158498
+0xec
+// 0.058525
+0x7
+// -0.053701
+0xf9
+// 0.167355
+0x15
+// -0.069716
+0xf7
+// -0.048604
+0xfa
+// 0.002330
+0x0
+// -0.043421
+0xfa
+// -0.045026
+0xfa
+// 0.087932
+0xb
+// 0.080634
+0xa
+// 0.272800
+0x23
+// 0.123491
+0x10
+// 0.077783
+0xa
+// -0.187355
+0xe8
+// -0.081359
+0xf6
+// -0.053418
+0xf9
+// -0.104770
+0xf3
+// 0.011662
+0x1
+// -0.118721
+0xf1
+// 0.138956
+0x12
+// 0.041995
+0x5
+// 0.298087
+0x26
+// -0.125354
+0xf0
+// -0.296718
+0xda
+// -0.027763
+0xfc
+// 0.132564
+0x11
+// -0.135979
+0xef
+// 0.043732
+0x6
+// 0.130887
+0x11
+// 0.042841
+0x5
+// -0.005650
+0xff
+// -0.094497
+0xf4
+// 0.055105
+0x7
+// 0.137085
+0x12
+// -0.147213
+0xed
+// -0.286973
+0xdb
+// -0.069007
+0xf7
+// 0.002922
+0x0
+// -0.088527
+0xf5
+// 0.131008
+0x11
+// 0.117574
+0xf
+// -0.120749
+0xf1
+// -0.114356
+0xf1
+// 0.112571
+0xe
+// -0.272936
+0xdd
+// 0.177895
+0x17
+// -0.044378
+0xfa
+// 0.278434
+0x24
+// 0.094123
+0xc
+// 0.164126
+0x15
+// 0.101958
+0xd
+// -0.086835
+0xf5
+// -0.268596
+0xde
+// 0.085542
+0xb
+// -0.027393
+0xfc
+// -0.113518
+0xf1
+// 0.252142
+0x20
+// -0.037152
+0xfb
+// 0.097756
+0xd
+// 0.024897
+0x3
+// 0.053528
+0x7
+// -0.111756
+0xf2
+// 0.154273
+0x14
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference10_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference10_q7.txt
new file mode 100644
index 0000000..05a6a2e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference10_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// 0.961699
+0x7b
+// 0.494232
+0x3f
+// 0.302531
+0x27
+// 0.272209
+0x23
+// 0.177523
+0x17
+// 0.527359
+0x44
+// 0.380243
+0x31
+// 0.524309
+0x43
+// 0.455291
+0x3a
+// 0.053627
+0x7
+// 0.102640
+0xd
+// 0.036724
+0x5
+// 0.032748
+0x4
+// 0.616675
+0x4f
+// 0.652389
+0x54
+// 0.038413
+0x5
+// 0.240609
+0x1f
+// 0.323942
+0x29
+// 0.409005
+0x34
+// 0.513823
+0x42
+// 0.203039
+0x1a
+// 0.547714
+0x46
+// 0.184587
+0x18
+// 0.774425
+0x63
+// 0.456081
+0x3a
+// 0.677663
+0x57
+// 0.404068
+0x34
+// 0.588400
+0x4b
+// 0.067917
+0x9
+// 0.205010
+0x1a
+// 0.132869
+0x11
+// 0.179398
+0x17
+// 0.117318
+0xf
+// 0.168945
+0x16
+// 0.048819
+0x6
+// 0.212961
+0x1b
+// 0.449898
+0x3a
+// 0.444909
+0x39
+// 0.110639
+0xe
+// 0.406630
+0x34
+// 0.544917
+0x46
+// 0.094393
+0xc
+// 0.494758
+0x3f
+// 0.246667
+0x20
+// 0.256129
+0x21
+// 0.572109
+0x49
+// 0.722233
+0x5c
+// 0.579574
+0x4a
+// 0.418908
+0x36
+// 0.081306
+0xa
+// 0.436070
+0x38
+// 0.285771
+0x25
+// 0.059462
+0x8
+// 0.128085
+0x10
+// 0.495905
+0x3f
+// 0.022717
+0x3
+// 0.273855
+0x23
+// 0.492878
+0x3f
+// 0.406182
+0x34
+// 0.123781
+0x10
+// 0.514053
+0x42
+// 0.111131
+0xe
+// 0.779729
+0x64
+// 0.147250
+0x13
+// 0.555848
+0x47
+// 0.422051
+0x36
+// 0.255001
+0x21
+// 0.625345
+0x50
+// 0.305747
+0x27
+// 0.072751
+0x9
+// 0.837122
+0x6b
+// 0.121613
+0x10
+// 0.623400
+0x50
+// 0.849883
+0x6d
+// 0.352876
+0x2d
+// 0.186617
+0x18
+// 0.261612
+0x21
+// 0.490669
+0x3f
+// 0.054906
+0x7
+// 0.824393
+0x6a
+// 0.427220
+0x37
+// 0.480818
+0x3e
+// 0.926055
+0x77
+// 0.115167
+0xf
+// 0.611721
+0x4e
+// 0.376814
+0x30
+// 0.685199
+0x58
+// 0.251623
+0x20
+// 0.079914
+0xa
+// 0.186515
+0x18
+// 0.286876
+0x25
+// 0.171382
+0x16
+// 0.368392
+0x2f
+// 1.030129
+0x7f
+// 0.095151
+0xc
+// 0.360974
+0x2e
+// 0.590151
+0x4c
+// 0.194777
+0x19
+// 0.120058
+0xf
+// 0.736154
+0x5e
+// 0.601716
+0x4d
+// 0.216590
+0x1c
+// 0.042021
+0x5
+// 0.023300
+0x3
+// 0.543915
+0x46
+// 0.256394
+0x21
+// 0.742804
+0x5f
+// 0.127436
+0x10
+// 0.211292
+0x1b
+// 0.229072
+0x1d
+// 0.177624
+0x17
+// 0.136239
+0x11
+// 0.100661
+0xd
+// 0.402520
+0x34
+// 0.555614
+0x47
+// 0.232713
+0x1e
+// 0.536663
+0x45
+// 0.713682
+0x5b
+// 1.019851
+0x7f
+// 0.309166
+0x28
+// 0.320051
+0x29
+// 0.293778
+0x26
+// 0.114111
+0xf
+// 0.718378
+0x5c
+// 0.707115
+0x5b
+// 0.787982
+0x65
+// 0.968425
+0x7c
+// 0.446781
+0x39
+// 0.087494
+0xb
+// 0.240326
+0x1f
+// 0.135808
+0x11
+// 0.045964
+0x6
+// 0.163520
+0x15
+// 0.167623
+0x15
+// 0.202561
+0x1a
+// 0.498268
+0x40
+// 0.394554
+0x33
+// 0.960556
+0x7b
+// 0.345021
+0x2c
+// 0.203279
+0x1a
+// 0.188332
+0x18
+// 0.120720
+0xf
+// 0.443905
+0x39
+// 0.071825
+0x9
+// 0.133639
+0x11
+// 0.290447
+0x25
+// 0.448530
+0x39
+// 0.022137
+0x3
+// 0.012559
+0x2
+// 0.971870
+0x7c
+// 0.509792
+0x41
+// 0.405037
+0x34
+// 0.149223
+0x13
+// 0.020054
+0x3
+// 0.281311
+0x24
+// 0.258409
+0x21
+// 0.693230
+0x59
+// 0.229410
+0x1d
+// 0.938781
+0x78
+// 0.076843
+0xa
+// 0.624033
+0x50
+// 0.218088
+0x1c
+// 0.335481
+0x2b
+// 0.107877
+0xe
+// 0.633110
+0x51
+// 0.010939
+0x1
+// 0.485775
+0x3e
+// 0.186455
+0x18
+// 0.102892
+0xd
+// 0.266691
+0x22
+// 0.282406
+0x24
+// 0.590826
+0x4c
+// 0.156682
+0x14
+// 0.453815
+0x3a
+// 0.676240
+0x57
+// 0.110348
+0xe
+// 0.866935
+0x6f
+// 0.003255
+0x0
+// 0.326490
+0x2a
+// 0.211472
+0x1b
+// 0.248533
+0x20
+// 0.324268
+0x2a
+// 0.765034
+0x62
+// 0.144296
+0x12
+// 0.059933
+0x8
+// 0.578251
+0x4a
+// 0.465851
+0x3c
+// 0.179015
+0x17
+// 0.524369
+0x43
+// 0.348702
+0x2d
+// 0.278665
+0x24
+// 0.381901
+0x31
+// 0.531716
+0x44
+// 0.196335
+0x19
+// 0.180153
+0x17
+// 0.561431
+0x48
+// 0.233879
+0x1e
+// 0.163053
+0x15
+// 0.007816
+0x1
+// 0.145667
+0x13
+// 0.151049
+0x13
+// 0.294988
+0x26
+// 0.270504
+0x23
+// 0.915169
+0x75
+// 0.414278
+0x35
+// 0.260942
+0x21
+// 0.628525
+0x50
+// 0.272937
+0x23
+// 0.179202
+0x17
+// 0.351474
+0x2d
+// 0.039123
+0x5
+// 0.398276
+0x33
+// 0.466159
+0x3c
+// 0.140880
+0x12
+// 1.000000
+0x7f
+// 0.420527
+0x36
+// 0.995406
+0x7f
+// 0.093137
+0xc
+// 0.444716
+0x39
+// 0.456172
+0x3a
+// 0.146709
+0x13
+// 0.439091
+0x38
+// 0.143718
+0x12
+// 0.018954
+0x2
+// 0.317012
+0x29
+// 0.184861
+0x18
+// 0.459883
+0x3b
+// 0.493859
+0x3f
+// 0.962717
+0x7b
+// 0.231500
+0x1e
+// 0.009801
+0x1
+// 0.296984
+0x26
+// 0.439494
+0x38
+// 0.394427
+0x32
+// 0.405081
+0x34
+// 0.383634
+0x31
+// 0.377644
+0x30
+// 0.915626
+0x75
+// 0.596787
+0x4c
+// 0.148876
+0x13
+// 0.934069
+0x78
+// 0.315758
+0x28
+// 0.550597
+0x46
+// 0.342042
+0x2c
+// 0.291308
+0x25
+// 0.901065
+0x73
+// 0.286970
+0x25
+// 0.091896
+0xc
+// 0.380823
+0x31
+// 0.845868
+0x6c
+// 0.124636
+0x10
+// 0.327943
+0x2a
+// 0.083522
+0xb
+// 0.179570
+0x17
+// 0.374909
+0x30
+// 0.517543
+0x42
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference1_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference1_q7.txt
new file mode 100644
index 0000000..76e1c89
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference1_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// -1.248369
+0x80
+// 0.641556
+0x52
+// 0.392711
+0x32
+// -0.353351
+0xd3
+// 0.230441
+0x1d
+// 0.684557
+0x58
+// -0.493589
+0xc1
+// 0.680599
+0x57
+// 0.591008
+0x4c
+// -0.069613
+0xf7
+// -0.133235
+0xef
+// 0.047671
+0x6
+// 0.042510
+0x5
+// -0.800498
+0x9a
+// 0.846857
+0x6c
+// -0.049864
+0xfa
+// 0.312332
+0x28
+// -0.420505
+0xca
+// 0.530924
+0x44
+// 0.666987
+0x55
+// 0.263562
+0x22
+// 0.710981
+0x5b
+// -0.239611
+0xe1
+// 1.005271
+0x7f
+// -0.592032
+0xb4
+// -0.879665
+0x8f
+// -0.524516
+0xbd
+// -0.763794
+0x9e
+// 0.088162
+0xb
+// 0.266121
+0x22
+// 0.172475
+0x16
+// 0.232874
+0x1e
+// 0.152290
+0x13
+// -0.219305
+0xe4
+// 0.063371
+0x8
+// -0.276442
+0xdd
+// 0.584007
+0x4b
+// 0.577530
+0x4a
+// 0.143619
+0x12
+// 0.527841
+0x44
+// 0.707350
+0x5b
+// 0.122531
+0x10
+// -0.642238
+0xae
+// -0.320195
+0xd7
+// 0.332477
+0x2b
+// -0.742647
+0xa1
+// -0.937521
+0x88
+// 0.752338
+0x60
+// 0.543780
+0x46
+// -0.105542
+0xf2
+// -0.566057
+0xb8
+// -0.370955
+0xd1
+// 0.077187
+0xa
+// 0.166266
+0x15
+// 0.643728
+0x52
+// -0.029489
+0xfc
+// -0.355488
+0xd2
+// 0.639798
+0x52
+// -0.527259
+0xbd
+// -0.160679
+0xeb
+// -0.667286
+0xab
+// -0.144258
+0xee
+// 1.012156
+0x7f
+// 0.191144
+0x18
+// -0.721539
+0xa4
+// -0.547859
+0xba
+// 0.331014
+0x2a
+// 0.811752
+0x68
+// 0.396886
+0x33
+// 0.094437
+0xc
+// 1.086658
+0x7f
+// -0.157865
+0xec
+// 0.809227
+0x68
+// 1.103222
+0x7f
+// -0.458064
+0xc5
+// -0.242246
+0xe1
+// 0.339595
+0x2b
+// -0.636931
+0xae
+// -0.071273
+0xf7
+// -1.070133
+0x80
+// 0.554569
+0x47
+// -0.624143
+0xb0
+// -1.202100
+0x80
+// 0.149496
+0x13
+// -0.794067
+0x9a
+// 0.489138
+0x3f
+// -0.889448
+0x8e
+// -0.326629
+0xd6
+// 0.103736
+0xd
+// -0.242113
+0xe1
+// -0.372391
+0xd0
+// -0.222468
+0xe4
+// -0.478205
+0xc3
+// -1.337198
+0x80
+// 0.123514
+0x10
+// 0.468575
+0x3c
+// 0.766068
+0x62
+// -0.252837
+0xe0
+// 0.155846
+0x14
+// -0.955592
+0x86
+// -0.781079
+0x9c
+// -0.281152
+0xdc
+// -0.054547
+0xf9
+// 0.030245
+0x4
+// -0.706049
+0xa6
+// 0.332821
+0x2b
+// -0.964225
+0x85
+// 0.165423
+0x15
+// 0.274275
+0x23
+// 0.297356
+0x26
+// 0.230572
+0x1e
+// -0.176850
+0xe9
+// 0.130667
+0x11
+// -0.522506
+0xbd
+// -0.721235
+0xa4
+// 0.302082
+0x27
+// 0.696636
+0x59
+// 0.926422
+0x77
+// -1.323855
+0x80
+// 0.401324
+0x33
+// -0.415454
+0xcb
+// 0.381349
+0x31
+// -0.148126
+0xed
+// -0.932517
+0x89
+// 0.917897
+0x75
+// 1.022869
+0x7f
+// 1.257100
+0x7f
+// -0.579961
+0xb6
+// 0.113575
+0xf
+// 0.311965
+0x28
+// 0.176291
+0x17
+// 0.059665
+0x8
+// -0.212263
+0xe5
+// 0.217589
+0x1c
+// 0.262942
+0x22
+// 0.646795
+0x53
+// -0.512166
+0xbe
+// 1.246885
+0x7f
+// -0.447867
+0xc7
+// -0.263874
+0xde
+// -0.244472
+0xe1
+// -0.156705
+0xec
+// -0.576228
+0xb6
+// -0.093235
+0xf4
+// -0.173475
+0xea
+// -0.377025
+0xd0
+// -0.582231
+0xb5
+// -0.028736
+0xfc
+// -0.016303
+0xfe
+// 1.261572
+0x7f
+// 0.661755
+0x55
+// 0.525773
+0x43
+// -0.193704
+0xe7
+// 0.026032
+0x3
+// 0.365167
+0x2f
+// -0.335438
+0xd5
+// -0.899873
+0x8d
+// -0.297794
+0xda
+// -1.218619
+0x80
+// -0.099749
+0xf3
+// -0.810049
+0x98
+// -0.283097
+0xdc
+// 0.435484
+0x38
+// 0.140033
+0x12
+// -0.821832
+0x97
+// 0.014200
+0x2
+// 0.630578
+0x51
+// -0.242035
+0xe1
+// 0.133563
+0x11
+// 0.346188
+0x2c
+// 0.366588
+0x2f
+// -0.766944
+0x9e
+// -0.203386
+0xe6
+// -0.589091
+0xb5
+// -0.877819
+0x90
+// 0.143241
+0x12
+// -1.125357
+0x80
+// 0.004226
+0x1
+// 0.423812
+0x36
+// 0.274508
+0x23
+// 0.322618
+0x29
+// 0.420927
+0x36
+// -0.993081
+0x81
+// 0.187308
+0x18
+// -0.077798
+0xf6
+// -0.750620
+0xa0
+// -0.604715
+0xb3
+// 0.232377
+0x1e
+// 0.680676
+0x57
+// -0.452646
+0xc6
+// -0.361731
+0xd2
+// 0.495741
+0x3f
+// -0.690213
+0xa8
+// 0.254860
+0x21
+// -0.233854
+0xe2
+// 0.728787
+0x5d
+// -0.303595
+0xd9
+// -0.211657
+0xe5
+// 0.010145
+0x1
+// -0.189088
+0xe8
+// -0.196074
+0xe7
+// 0.382920
+0x31
+// 0.351137
+0x2d
+// 1.187969
+0x7f
+// 0.537769
+0x45
+// 0.338725
+0x2b
+// -0.815880
+0x98
+// -0.354295
+0xd3
+// -0.232620
+0xe2
+// -0.456243
+0xc6
+// 0.050785
+0x7
+// -0.516997
+0xbe
+// 0.605115
+0x4d
+// 0.182875
+0x17
+// 1.298087
+0x7f
+// -0.545881
+0xba
+// -1.292124
+0x80
+// -0.120899
+0xf1
+// 0.577280
+0x4a
+// -0.592152
+0xb4
+// 0.190441
+0x18
+// 0.569979
+0x49
+// 0.186559
+0x18
+// -0.024604
+0xfd
+// -0.411510
+0xcb
+// 0.239966
+0x1f
+// 0.596968
+0x4c
+// -0.641072
+0xae
+// -1.249690
+0x80
+// -0.300507
+0xda
+// 0.012722
+0x2
+// -0.385511
+0xcf
+// 0.570502
+0x49
+// 0.512001
+0x42
+// -0.525830
+0xbd
+// -0.497991
+0xc0
+// 0.490214
+0x3f
+// -1.188562
+0x80
+// 0.774682
+0x63
+// -0.193254
+0xe7
+// 1.212503
+0x7f
+// 0.409881
+0x34
+// 0.714723
+0x5b
+// 0.444000
+0x39
+// -0.378144
+0xd0
+// -1.169661
+0x80
+// 0.372513
+0x30
+// -0.119289
+0xf1
+// -0.494341
+0xc1
+// 1.098010
+0x7f
+// -0.161788
+0xeb
+// 0.425699
+0x36
+// 0.108419
+0xe
+// 0.233098
+0x1e
+// -0.486665
+0xc2
+// 0.671816
+0x56
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference2_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference2_q7.txt
new file mode 100644
index 0000000..5dea221
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference2_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// -0.675029
+0xaa
+// 0.346908
+0x2c
+// 0.212350
+0x1b
+// -0.191067
+0xe8
+// 0.124606
+0x10
+// 0.370160
+0x2f
+// -0.266898
+0xde
+// 0.368019
+0x2f
+// 0.319575
+0x29
+// -0.037642
+0xfb
+// -0.072044
+0xf7
+// 0.025777
+0x3
+// 0.022986
+0x3
+// -0.432852
+0xc9
+// 0.457920
+0x3b
+// -0.026963
+0xfd
+// 0.168887
+0x16
+// -0.227379
+0xe3
+// 0.287086
+0x25
+// 0.360659
+0x2e
+// 0.142516
+0x12
+// 0.384448
+0x31
+// -0.129564
+0xef
+// 0.543579
+0x46
+// -0.320129
+0xd7
+// -0.475660
+0xc3
+// -0.283621
+0xdc
+// -0.413006
+0xcb
+// 0.047672
+0x6
+// 0.143899
+0x12
+// 0.093262
+0xc
+// 0.125922
+0x10
+// 0.082347
+0xb
+// -0.118584
+0xf1
+// 0.034267
+0x4
+// -0.149480
+0xed
+// 0.315789
+0x28
+// 0.312287
+0x28
+// 0.077659
+0xa
+// 0.285419
+0x25
+// 0.382484
+0x31
+// 0.066256
+0x8
+// -0.347277
+0xd4
+// -0.173139
+0xea
+// 0.179780
+0x17
+// -0.401570
+0xcd
+// -0.506944
+0xbf
+// 0.406810
+0x34
+// 0.294037
+0x26
+// -0.057070
+0xf9
+// -0.306083
+0xd9
+// -0.200586
+0xe6
+// 0.041737
+0x5
+// 0.089905
+0xc
+// 0.348082
+0x2d
+// -0.015946
+0xfe
+// -0.192223
+0xe7
+// 0.345957
+0x2c
+// -0.285104
+0xdc
+// -0.086884
+0xf5
+// -0.360820
+0xd2
+// -0.078004
+0xf6
+// 0.547302
+0x46
+// 0.103357
+0xd
+// -0.390157
+0xce
+// -0.296243
+0xda
+// 0.178989
+0x17
+// 0.438937
+0x38
+// 0.214608
+0x1b
+// 0.051065
+0x7
+// 0.587587
+0x4b
+// -0.085362
+0xf5
+// 0.437572
+0x38
+// 0.596544
+0x4c
+// -0.247688
+0xe0
+// -0.130989
+0xef
+// 0.183628
+0x18
+// -0.344407
+0xd4
+// -0.038539
+0xfb
+// -0.578652
+0xb6
+// 0.299871
+0x26
+// -0.337492
+0xd5
+// -0.650010
+0xad
+// 0.080837
+0xa
+// -0.429375
+0xc9
+// 0.264491
+0x22
+// -0.480950
+0xc2
+// -0.176617
+0xe9
+// 0.056093
+0x7
+// -0.130917
+0xef
+// -0.201362
+0xe6
+// -0.120295
+0xf1
+// -0.258579
+0xdf
+// -0.723061
+0xa3
+// 0.066788
+0x9
+// 0.253372
+0x20
+// 0.414235
+0x35
+// -0.136716
+0xef
+// 0.084270
+0xb
+// -0.516716
+0xbe
+// -0.422352
+0xca
+// -0.152027
+0xed
+// -0.029495
+0xfc
+// 0.016354
+0x2
+// -0.381781
+0xcf
+// 0.179966
+0x17
+// -0.521384
+0xbd
+// 0.089449
+0xb
+// 0.148308
+0x13
+// 0.160789
+0x15
+// 0.124677
+0x10
+// -0.095628
+0xf4
+// 0.070655
+0x9
+// -0.282534
+0xdc
+// -0.389992
+0xce
+// 0.163344
+0x15
+// 0.376691
+0x30
+// 0.500943
+0x40
+// -0.715846
+0xa4
+// 0.217007
+0x1c
+// -0.224648
+0xe3
+// 0.206206
+0x1a
+// -0.080096
+0xf6
+// -0.504238
+0xbf
+// 0.496333
+0x40
+// 0.553095
+0x47
+// 0.679750
+0x57
+// -0.313601
+0xd8
+// 0.061413
+0x8
+// 0.168688
+0x16
+// 0.095326
+0xc
+// 0.032262
+0x4
+// -0.114777
+0xf1
+// 0.117657
+0xf
+// 0.142180
+0x12
+// 0.349740
+0x2d
+// -0.276943
+0xdd
+// 0.674227
+0x56
+// -0.242175
+0xe1
+// -0.142684
+0xee
+// -0.132193
+0xef
+// -0.084735
+0xf5
+// -0.311583
+0xd8
+// -0.050415
+0xfa
+// -0.093803
+0xf4
+// -0.203868
+0xe6
+// -0.314829
+0xd8
+// -0.015539
+0xfe
+// -0.008815
+0xff
+// 0.682168
+0x57
+// 0.357830
+0x2e
+// 0.284300
+0x24
+// -0.104741
+0xf3
+// 0.014076
+0x2
+// 0.197456
+0x19
+// -0.181381
+0xe9
+// -0.486587
+0xc2
+// -0.161026
+0xeb
+// -0.658942
+0xac
+// -0.053937
+0xf9
+// -0.438017
+0xc8
+// -0.153078
+0xec
+// 0.235478
+0x1e
+// 0.075720
+0xa
+// -0.444388
+0xc7
+// 0.007679
+0x1
+// 0.340972
+0x2c
+// -0.130875
+0xef
+// 0.072221
+0x9
+// 0.187194
+0x18
+// 0.198225
+0x19
+// -0.414708
+0xcb
+// -0.109977
+0xf2
+// -0.318538
+0xd7
+// -0.474662
+0xc3
+// 0.077455
+0xa
+// -0.608513
+0xb2
+// 0.002285
+0x0
+// 0.229167
+0x1d
+// 0.148435
+0x13
+// 0.174449
+0x16
+// 0.227608
+0x1d
+// -0.536987
+0xbb
+// 0.101283
+0xd
+// -0.042067
+0xfb
+// -0.405882
+0xcc
+// -0.326987
+0xd6
+// 0.125653
+0x10
+// 0.368061
+0x2f
+// -0.244759
+0xe1
+// -0.195598
+0xe7
+// 0.268061
+0x22
+// -0.373218
+0xd0
+// 0.137810
+0x12
+// -0.126452
+0xf0
+// 0.394076
+0x32
+// -0.164163
+0xeb
+// -0.114449
+0xf1
+// 0.005486
+0x1
+// -0.102246
+0xf3
+// -0.106023
+0xf2
+// 0.207056
+0x1b
+// 0.189870
+0x18
+// 0.642369
+0x52
+// 0.290787
+0x25
+// 0.183158
+0x17
+// -0.441170
+0xc8
+// -0.191578
+0xe7
+// -0.125784
+0xf0
+// -0.246704
+0xe0
+// 0.027461
+0x4
+// -0.279555
+0xdc
+// 0.327203
+0x2a
+// 0.098886
+0xd
+// 0.701913
+0x5a
+// -0.295174
+0xda
+// -0.698688
+0xa7
+// -0.065374
+0xf8
+// 0.312152
+0x28
+// -0.320193
+0xd7
+// 0.102977
+0xd
+// 0.308204
+0x27
+// 0.100878
+0xd
+// -0.013304
+0xfe
+// -0.222515
+0xe4
+// 0.129756
+0x11
+// 0.322798
+0x29
+// -0.346646
+0xd4
+// -0.675743
+0xaa
+// -0.162493
+0xeb
+// 0.006879
+0x1
+// -0.208457
+0xe5
+// 0.308487
+0x27
+// 0.276854
+0x23
+// -0.284331
+0xdc
+// -0.269278
+0xde
+// 0.265073
+0x22
+// -0.642689
+0xae
+// 0.418893
+0x36
+// -0.104498
+0xf3
+// 0.655635
+0x54
+// 0.221635
+0x1c
+// 0.386471
+0x31
+// 0.240084
+0x1f
+// -0.204473
+0xe6
+// -0.632469
+0xaf
+// 0.201428
+0x1a
+// -0.064503
+0xf8
+// -0.267304
+0xde
+// 0.593726
+0x4c
+// -0.087484
+0xf5
+// 0.230187
+0x1d
+// 0.058625
+0x8
+// 0.126043
+0x10
+// -0.263154
+0xde
+// 0.363270
+0x2e
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference3_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference3_q7.txt
new file mode 100644
index 0000000..ce679d1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference3_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// 0.275690
+0x23
+// 0.072812
+0x9
+// 0.027282
+0x3
+// 0.022088
+0x3
+// 0.009394
+0x1
+// 0.082900
+0xb
+// 0.043099
+0x6
+// 0.081944
+0xa
+// 0.061791
+0x8
+// 0.000857
+0x0
+// 0.003140
+0x0
+// 0.000402
+0x0
+// 0.000320
+0x0
+// 0.113359
+0xf
+// 0.126869
+0x10
+// 0.000440
+0x0
+// 0.017257
+0x2
+// 0.031281
+0x4
+// 0.049866
+0x6
+// 0.078699
+0xa
+// 0.012289
+0x2
+// 0.089423
+0xb
+// 0.010157
+0x1
+// 0.178773
+0x17
+// 0.062005
+0x8
+// 0.136890
+0x12
+// 0.048669
+0x6
+// 0.103202
+0xd
+// 0.001375
+0x0
+// 0.012528
+0x2
+// 0.005262
+0x1
+// 0.009594
+0x1
+// 0.004103
+0x1
+// 0.008508
+0x1
+// 0.000710
+0x0
+// 0.013519
+0x2
+// 0.060335
+0x8
+// 0.059005
+0x8
+// 0.003649
+0x0
+// 0.049288
+0x6
+// 0.088512
+0xb
+// 0.002656
+0x0
+// 0.072967
+0x9
+// 0.018137
+0x2
+// 0.019555
+0x3
+// 0.097566
+0xc
+// 0.155488
+0x14
+// 0.100129
+0xd
+// 0.052310
+0x7
+// 0.001971
+0x0
+// 0.056683
+0x7
+// 0.024343
+0x3
+// 0.001054
+0x0
+// 0.004890
+0x1
+// 0.073306
+0x9
+// 0.000154
+0x0
+// 0.022356
+0x3
+// 0.072414
+0x9
+// 0.049179
+0x6
+// 0.004567
+0x1
+// 0.078770
+0xa
+// 0.003681
+0x0
+// 0.181230
+0x17
+// 0.006463
+0x1
+// 0.092099
+0xc
+// 0.053097
+0x7
+// 0.019383
+0x2
+// 0.116569
+0xf
+// 0.027866
+0x4
+// 0.001578
+0x0
+// 0.208892
+0x1b
+// 0.004409
+0x1
+// 0.115845
+0xf
+// 0.215309
+0x1c
+// 0.037118
+0x5
+// 0.010381
+0x1
+// 0.020401
+0x3
+// 0.071766
+0x9
+// 0.000899
+0x0
+// 0.202587
+0x1a
+// 0.054406
+0x7
+// 0.068913
+0x9
+// 0.255633
+0x21
+// 0.003954
+0x1
+// 0.111545
+0xe
+// 0.042325
+0x5
+// 0.139951
+0x12
+// 0.018873
+0x2
+// 0.001904
+0x0
+// 0.010370
+0x1
+// 0.024532
+0x3
+// 0.008755
+0x1
+// 0.040454
+0x5
+// 0.316320
+0x28
+// 0.002699
+0x0
+// 0.038841
+0x5
+// 0.103817
+0xd
+// 0.011309
+0x1
+// 0.004297
+0x1
+// 0.161540
+0x15
+// 0.107926
+0xe
+// 0.013984
+0x2
+// 0.000526
+0x0
+// 0.000162
+0x0
+// 0.088187
+0xb
+// 0.019596
+0x3
+// 0.164472
+0x15
+// 0.004841
+0x1
+// 0.013308
+0x2
+// 0.015642
+0x2
+// 0.009405
+0x1
+// 0.005533
+0x1
+// 0.003020
+0x0
+// 0.048297
+0x6
+// 0.092022
+0xc
+// 0.016143
+0x2
+// 0.085851
+0xb
+// 0.151828
+0x13
+// 0.310039
+0x28
+// 0.028492
+0x4
+// 0.030534
+0x4
+// 0.025727
+0x3
+// 0.003881
+0x0
+// 0.153833
+0x14
+// 0.149047
+0x13
+// 0.185087
+0x18
+// 0.279560
+0x24
+// 0.059502
+0x8
+// 0.002282
+0x0
+// 0.017217
+0x2
+// 0.005498
+0x1
+// 0.000630
+0x0
+// 0.007971
+0x1
+// 0.008375
+0x1
+// 0.012231
+0x2
+// 0.074006
+0x9
+// 0.046404
+0x6
+// 0.275035
+0x23
+// 0.035484
+0x5
+// 0.012318
+0x2
+// 0.010573
+0x1
+// 0.004344
+0x1
+// 0.058739
+0x8
+// 0.001538
+0x0
+// 0.005324
+0x1
+// 0.025146
+0x3
+// 0.059969
+0x8
+// 0.000146
+0x0
+// 0.000047
+0x0
+// 0.281553
+0x24
+// 0.077469
+0xa
+// 0.048903
+0x6
+// 0.006638
+0x1
+// 0.000120
+0x0
+// 0.023589
+0x3
+// 0.019905
+0x3
+// 0.143251
+0x12
+// 0.015688
+0x2
+// 0.262707
+0x22
+// 0.001760
+0x0
+// 0.116080
+0xf
+// 0.014178
+0x2
+// 0.033549
+0x4
+// 0.003469
+0x0
+// 0.119482
+0xf
+// 0.000036
+0x0
+// 0.070342
+0x9
+// 0.010363
+0x1
+// 0.003156
+0x0
+// 0.021201
+0x3
+// 0.023773
+0x3
+// 0.104055
+0xd
+// 0.007318
+0x1
+// 0.061390
+0x8
+// 0.136315
+0x11
+// 0.003630
+0x0
+// 0.224035
+0x1d
+// 0.000003
+0x0
+// 0.031775
+0x4
+// 0.013331
+0x2
+// 0.018412
+0x2
+// 0.031344
+0x4
+// 0.174464
+0x16
+// 0.006207
+0x1
+// 0.001071
+0x0
+// 0.099673
+0xd
+// 0.064690
+0x8
+// 0.009553
+0x1
+// 0.081963
+0xa
+// 0.036245
+0x5
+// 0.023148
+0x3
+// 0.043475
+0x6
+// 0.084276
+0xb
+// 0.011491
+0x1
+// 0.009674
+0x1
+// 0.093959
+0xc
+// 0.016305
+0x2
+// 0.007925
+0x1
+// 0.000018
+0x0
+// 0.006325
+0x1
+// 0.006801
+0x1
+// 0.025939
+0x3
+// 0.021812
+0x3
+// 0.249658
+0x20
+// 0.051160
+0x7
+// 0.020297
+0x3
+// 0.117757
+0xf
+// 0.022206
+0x3
+// 0.009573
+0x1
+// 0.036824
+0x5
+// 0.000456
+0x0
+// 0.047284
+0x6
+// 0.064775
+0x8
+// 0.005916
+0x1
+// 0.298087
+0x26
+// 0.052715
+0x7
+// 0.295355
+0x26
+// 0.002586
+0x0
+// 0.058953
+0x8
+// 0.062030
+0x8
+// 0.006416
+0x1
+// 0.057472
+0x7
+// 0.006157
+0x1
+// 0.000107
+0x0
+// 0.029957
+0x4
+// 0.010187
+0x1
+// 0.063043
+0x8
+// 0.072702
+0x9
+// 0.276274
+0x23
+// 0.015975
+0x2
+// 0.000029
+0x0
+// 0.026291
+0x3
+// 0.057577
+0x7
+// 0.046374
+0x6
+// 0.048913
+0x6
+// 0.043871
+0x6
+// 0.042512
+0x5
+// 0.249907
+0x20
+// 0.106165
+0xe
+// 0.006607
+0x1
+// 0.260077
+0x21
+// 0.029720
+0x4
+// 0.090367
+0xc
+// 0.034874
+0x4
+// 0.025296
+0x3
+// 0.242022
+0x1f
+// 0.024548
+0x3
+// 0.002517
+0x0
+// 0.043230
+0x6
+// 0.213279
+0x1b
+// 0.004631
+0x1
+// 0.032058
+0x4
+// 0.002079
+0x0
+// 0.009612
+0x1
+// 0.041898
+0x5
+// 0.079843
+0xa
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference4_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference4_q7.txt
new file mode 100644
index 0000000..52d5d48
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference4_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// 0.961699
+0x7b
+// -0.494232
+0xc1
+// -0.302531
+0xd9
+// 0.272209
+0x23
+// -0.177523
+0xe9
+// -0.527359
+0xbc
+// 0.380243
+0x31
+// -0.524309
+0xbd
+// -0.455291
+0xc6
+// 0.053627
+0x7
+// 0.102640
+0xd
+// -0.036724
+0xfb
+// -0.032748
+0xfc
+// 0.616675
+0x4f
+// -0.652389
+0xac
+// 0.038413
+0x5
+// -0.240609
+0xe1
+// 0.323942
+0x29
+// -0.409005
+0xcc
+// -0.513823
+0xbe
+// -0.203039
+0xe6
+// -0.547714
+0xba
+// 0.184587
+0x18
+// -0.774425
+0x9d
+// 0.456081
+0x3a
+// 0.677663
+0x57
+// 0.404068
+0x34
+// 0.588400
+0x4b
+// -0.067917
+0xf7
+// -0.205010
+0xe6
+// -0.132869
+0xef
+// -0.179398
+0xe9
+// -0.117318
+0xf1
+// 0.168945
+0x16
+// -0.048819
+0xfa
+// 0.212961
+0x1b
+// -0.449898
+0xc6
+// -0.444909
+0xc7
+// -0.110639
+0xf2
+// -0.406630
+0xcc
+// -0.544917
+0xba
+// -0.094393
+0xf4
+// 0.494758
+0x3f
+// 0.246667
+0x20
+// -0.256129
+0xdf
+// 0.572109
+0x49
+// 0.722233
+0x5c
+// -0.579574
+0xb6
+// -0.418908
+0xca
+// 0.081306
+0xa
+// 0.436070
+0x38
+// 0.285771
+0x25
+// -0.059462
+0xf8
+// -0.128085
+0xf0
+// -0.495905
+0xc1
+// 0.022717
+0x3
+// 0.273855
+0x23
+// -0.492878
+0xc1
+// 0.406182
+0x34
+// 0.123781
+0x10
+// 0.514053
+0x42
+// 0.111131
+0xe
+// -0.779729
+0x9c
+// -0.147250
+0xed
+// 0.555848
+0x47
+// 0.422051
+0x36
+// -0.255001
+0xdf
+// -0.625345
+0xb0
+// -0.305747
+0xd9
+// -0.072751
+0xf7
+// -0.837122
+0x95
+// 0.121613
+0x10
+// -0.623400
+0xb0
+// -0.849883
+0x93
+// 0.352876
+0x2d
+// 0.186617
+0x18
+// -0.261612
+0xdf
+// 0.490669
+0x3f
+// 0.054906
+0x7
+// 0.824393
+0x6a
+// -0.427220
+0xc9
+// 0.480818
+0x3e
+// 0.926055
+0x77
+// -0.115167
+0xf1
+// 0.611721
+0x4e
+// -0.376814
+0xd0
+// 0.685199
+0x58
+// 0.251623
+0x20
+// -0.079914
+0xf6
+// 0.186515
+0x18
+// 0.286876
+0x25
+// 0.171382
+0x16
+// 0.368392
+0x2f
+// 1.030129
+0x7f
+// -0.095151
+0xf4
+// -0.360974
+0xd2
+// -0.590151
+0xb4
+// 0.194777
+0x19
+// -0.120058
+0xf1
+// 0.736154
+0x5e
+// 0.601716
+0x4d
+// 0.216590
+0x1c
+// 0.042021
+0x5
+// -0.023300
+0xfd
+// 0.543915
+0x46
+// -0.256394
+0xdf
+// 0.742804
+0x5f
+// -0.127436
+0xf0
+// -0.211292
+0xe5
+// -0.229072
+0xe3
+// -0.177624
+0xe9
+// 0.136239
+0x11
+// -0.100661
+0xf3
+// 0.402520
+0x34
+// 0.555614
+0x47
+// -0.232713
+0xe2
+// -0.536663
+0xbb
+// -0.713682
+0xa5
+// 1.019851
+0x7f
+// -0.309166
+0xd8
+// 0.320051
+0x29
+// -0.293778
+0xda
+// 0.114111
+0xf
+// 0.718378
+0x5c
+// -0.707115
+0xa5
+// -0.787982
+0x9b
+// -0.968425
+0x84
+// 0.446781
+0x39
+// -0.087494
+0xf5
+// -0.240326
+0xe1
+// -0.135808
+0xef
+// -0.045964
+0xfa
+// 0.163520
+0x15
+// -0.167623
+0xeb
+// -0.202561
+0xe6
+// -0.498268
+0xc0
+// 0.394554
+0x33
+// -0.960556
+0x85
+// 0.345021
+0x2c
+// 0.203279
+0x1a
+// 0.188332
+0x18
+// 0.120720
+0xf
+// 0.443905
+0x39
+// 0.071825
+0x9
+// 0.133639
+0x11
+// 0.290447
+0x25
+// 0.448530
+0x39
+// 0.022137
+0x3
+// 0.012559
+0x2
+// -0.971870
+0x84
+// -0.509792
+0xbf
+// -0.405037
+0xcc
+// 0.149223
+0x13
+// -0.020054
+0xfd
+// -0.281311
+0xdc
+// 0.258409
+0x21
+// 0.693230
+0x59
+// 0.229410
+0x1d
+// 0.938781
+0x78
+// 0.076843
+0xa
+// 0.624033
+0x50
+// 0.218088
+0x1c
+// -0.335481
+0xd5
+// -0.107877
+0xf2
+// 0.633110
+0x51
+// -0.010939
+0xff
+// -0.485775
+0xc2
+// 0.186455
+0x18
+// -0.102892
+0xf3
+// -0.266691
+0xde
+// -0.282406
+0xdc
+// 0.590826
+0x4c
+// 0.156682
+0x14
+// 0.453815
+0x3a
+// 0.676240
+0x57
+// -0.110348
+0xf2
+// 0.866935
+0x6f
+// -0.003255
+0x0
+// -0.326490
+0xd6
+// -0.211472
+0xe5
+// -0.248533
+0xe0
+// -0.324268
+0xd6
+// 0.765034
+0x62
+// -0.144296
+0xee
+// 0.059933
+0x8
+// 0.578251
+0x4a
+// 0.465851
+0x3c
+// -0.179015
+0xe9
+// -0.524369
+0xbd
+// 0.348702
+0x2d
+// 0.278665
+0x24
+// -0.381901
+0xcf
+// 0.531716
+0x44
+// -0.196335
+0xe7
+// 0.180153
+0x17
+// -0.561431
+0xb8
+// 0.233879
+0x1e
+// 0.163053
+0x15
+// -0.007816
+0xff
+// 0.145667
+0x13
+// 0.151049
+0x13
+// -0.294988
+0xda
+// -0.270504
+0xdd
+// -0.915169
+0x8b
+// -0.414278
+0xcb
+// -0.260942
+0xdf
+// 0.628525
+0x50
+// 0.272937
+0x23
+// 0.179202
+0x17
+// 0.351474
+0x2d
+// -0.039123
+0xfb
+// 0.398276
+0x33
+// -0.466159
+0xc4
+// -0.140880
+0xee
+// -1.000000
+0x80
+// 0.420527
+0x36
+// 0.995406
+0x7f
+// 0.093137
+0xc
+// -0.444716
+0xc7
+// 0.456172
+0x3a
+// -0.146709
+0xed
+// -0.439091
+0xc8
+// -0.143718
+0xee
+// 0.018954
+0x2
+// 0.317012
+0x29
+// -0.184861
+0xe8
+// -0.459883
+0xc5
+// 0.493859
+0x3f
+// 0.962717
+0x7b
+// 0.231500
+0x1e
+// -0.009801
+0xff
+// 0.296984
+0x26
+// -0.439494
+0xc8
+// -0.394427
+0xce
+// 0.405081
+0x34
+// 0.383634
+0x31
+// -0.377644
+0xd0
+// 0.915626
+0x75
+// -0.596787
+0xb4
+// 0.148876
+0x13
+// -0.934069
+0x88
+// -0.315758
+0xd8
+// -0.550597
+0xba
+// -0.342042
+0xd4
+// 0.291308
+0x25
+// 0.901065
+0x73
+// -0.286970
+0xdb
+// 0.091896
+0xc
+// 0.380823
+0x31
+// -0.845868
+0x94
+// 0.124636
+0x10
+// -0.327943
+0xd6
+// -0.083522
+0xf5
+// -0.179570
+0xe9
+// 0.374909
+0x30
+// -0.517543
+0xbe
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference5_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference5_q7.txt
new file mode 100644
index 0000000..1e23a9a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference5_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// -0.461699
+0xc5
+// 0.994232
+0x7f
+// 0.802531
+0x67
+// 0.227791
+0x1d
+// 0.677523
+0x57
+// 1.027359
+0x7f
+// 0.119757
+0xf
+// 1.024309
+0x7f
+// 0.955291
+0x7a
+// 0.446373
+0x39
+// 0.397360
+0x33
+// 0.536724
+0x45
+// 0.532748
+0x44
+// -0.116675
+0xf1
+// 1.152389
+0x7f
+// 0.461587
+0x3b
+// 0.740609
+0x5f
+// 0.176058
+0x17
+// 0.909005
+0x74
+// 1.013823
+0x7f
+// 0.703039
+0x5a
+// 1.047714
+0x7f
+// 0.315413
+0x28
+// 1.274425
+0x7f
+// 0.043919
+0x6
+// -0.177663
+0xe9
+// 0.095932
+0xc
+// -0.088400
+0xf5
+// 0.567917
+0x49
+// 0.705010
+0x5a
+// 0.632869
+0x51
+// 0.679398
+0x57
+// 0.617318
+0x4f
+// 0.331055
+0x2a
+// 0.548819
+0x46
+// 0.287039
+0x25
+// 0.949898
+0x7a
+// 0.944909
+0x79
+// 0.610639
+0x4e
+// 0.906630
+0x74
+// 1.044917
+0x7f
+// 0.594393
+0x4c
+// 0.005242
+0x1
+// 0.253333
+0x20
+// 0.756129
+0x61
+// -0.072109
+0xf7
+// -0.222233
+0xe4
+// 1.079574
+0x7f
+// 0.918908
+0x76
+// 0.418694
+0x36
+// 0.063930
+0x8
+// 0.214229
+0x1b
+// 0.559462
+0x48
+// 0.628085
+0x50
+// 0.995905
+0x7f
+// 0.477283
+0x3d
+// 0.226145
+0x1d
+// 0.992878
+0x7f
+// 0.093818
+0xc
+// 0.376219
+0x30
+// -0.014053
+0xfe
+// 0.388869
+0x32
+// 1.279729
+0x7f
+// 0.647250
+0x53
+// -0.055848
+0xf9
+// 0.077949
+0xa
+// 0.755001
+0x61
+// 1.125345
+0x7f
+// 0.805747
+0x67
+// 0.572751
+0x49
+// 1.337122
+0x7f
+// 0.378387
+0x30
+// 1.123400
+0x7f
+// 1.349883
+0x7f
+// 0.147124
+0x13
+// 0.313383
+0x28
+// 0.761612
+0x61
+// 0.009331
+0x1
+// 0.445094
+0x39
+// -0.324393
+0xd6
+// 0.927220
+0x77
+// 0.019182
+0x2
+// -0.426055
+0xc9
+// 0.615167
+0x4f
+// -0.111721
+0xf2
+// 0.876814
+0x70
+// -0.185199
+0xe8
+// 0.248377
+0x20
+// 0.579914
+0x4a
+// 0.313485
+0x28
+// 0.213124
+0x1b
+// 0.328618
+0x2a
+// 0.131608
+0x11
+// -0.530129
+0xbc
+// 0.595151
+0x4c
+// 0.860974
+0x6e
+// 1.090151
+0x7f
+// 0.305223
+0x27
+// 0.620058
+0x4f
+// -0.236154
+0xe2
+// -0.101716
+0xf3
+// 0.283410
+0x24
+// 0.457979
+0x3b
+// 0.523300
+0x43
+// -0.043915
+0xfa
+// 0.756394
+0x61
+// -0.242804
+0xe1
+// 0.627436
+0x50
+// 0.711292
+0x5b
+// 0.729072
+0x5d
+// 0.677624
+0x57
+// 0.363761
+0x2f
+// 0.600661
+0x4d
+// 0.097480
+0xc
+// -0.055614
+0xf9
+// 0.732713
+0x5e
+// 1.036663
+0x7f
+// 1.213682
+0x7f
+// -0.519851
+0xbd
+// 0.809166
+0x68
+// 0.179949
+0x17
+// 0.793778
+0x66
+// 0.385889
+0x31
+// -0.218378
+0xe4
+// 1.207115
+0x7f
+// 1.287982
+0x7f
+// 1.468425
+0x7f
+// 0.053219
+0x7
+// 0.587494
+0x4b
+// 0.740326
+0x5f
+// 0.635808
+0x51
+// 0.545964
+0x46
+// 0.336480
+0x2b
+// 0.667623
+0x55
+// 0.702561
+0x5a
+// 0.998268
+0x7f
+// 0.105446
+0xd
+// 1.460556
+0x7f
+// 0.154979
+0x14
+// 0.296721
+0x26
+// 0.311668
+0x28
+// 0.379280
+0x31
+// 0.056095
+0x7
+// 0.428175
+0x37
+// 0.366361
+0x2f
+// 0.209553
+0x1b
+// 0.051470
+0x7
+// 0.477863
+0x3d
+// 0.487441
+0x3e
+// 1.471870
+0x7f
+// 1.009792
+0x7f
+// 0.905037
+0x74
+// 0.350777
+0x2d
+// 0.520054
+0x43
+// 0.781311
+0x64
+// 0.241591
+0x1f
+// -0.193230
+0xe7
+// 0.270590
+0x23
+// -0.438781
+0xc8
+// 0.423157
+0x36
+// -0.124033
+0xf0
+// 0.281912
+0x24
+// 0.835481
+0x6b
+// 0.607877
+0x4e
+// -0.133110
+0xef
+// 0.510939
+0x41
+// 0.985775
+0x7e
+// 0.313545
+0x28
+// 0.602892
+0x4d
+// 0.766691
+0x62
+// 0.782406
+0x64
+// -0.090826
+0xf4
+// 0.343318
+0x2c
+// 0.046185
+0x6
+// -0.176240
+0xe9
+// 0.610348
+0x4e
+// -0.366935
+0xd1
+// 0.503255
+0x40
+// 0.826490
+0x6a
+// 0.711472
+0x5b
+// 0.748533
+0x60
+// 0.824268
+0x6a
+// -0.265034
+0xde
+// 0.644296
+0x52
+// 0.440067
+0x38
+// -0.078251
+0xf6
+// 0.034149
+0x4
+// 0.679015
+0x57
+// 1.024369
+0x7f
+// 0.151298
+0x13
+// 0.221335
+0x1c
+// 0.881901
+0x71
+// -0.031716
+0xfc
+// 0.696335
+0x59
+// 0.319847
+0x29
+// 1.061431
+0x7f
+// 0.266121
+0x22
+// 0.336947
+0x2b
+// 0.507816
+0x41
+// 0.354333
+0x2d
+// 0.348951
+0x2d
+// 0.794988
+0x66
+// 0.770504
+0x63
+// 1.415169
+0x7f
+// 0.914278
+0x75
+// 0.760942
+0x61
+// -0.128525
+0xf0
+// 0.227063
+0x1d
+// 0.320798
+0x29
+// 0.148526
+0x13
+// 0.539123
+0x45
+// 0.101724
+0xd
+// 0.966159
+0x7c
+// 0.640880
+0x52
+// 1.500000
+0x7f
+// 0.079473
+0xa
+// -0.495406
+0xc1
+// 0.406863
+0x34
+// 0.944716
+0x79
+// 0.043828
+0x6
+// 0.646709
+0x53
+// 0.939091
+0x78
+// 0.643718
+0x52
+// 0.481046
+0x3e
+// 0.182988
+0x17
+// 0.684861
+0x58
+// 0.959883
+0x7b
+// 0.006141
+0x1
+// -0.462717
+0xc5
+// 0.268500
+0x22
+// 0.509801
+0x41
+// 0.203016
+0x1a
+// 0.939494
+0x78
+// 0.894427
+0x72
+// 0.094919
+0xc
+// 0.116366
+0xf
+// 0.877644
+0x70
+// -0.415626
+0xcb
+// 1.096787
+0x7f
+// 0.351124
+0x2d
+// 1.434069
+0x7f
+// 0.815758
+0x68
+// 1.050597
+0x7f
+// 0.842042
+0x6c
+// 0.208692
+0x1b
+// -0.401065
+0xcd
+// 0.786970
+0x65
+// 0.408104
+0x34
+// 0.119177
+0xf
+// 1.345868
+0x7f
+// 0.375364
+0x30
+// 0.827943
+0x6a
+// 0.583522
+0x4b
+// 0.679570
+0x57
+// 0.125091
+0x10
+// 1.017543
+0x7f
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference6_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference6_q7.txt
new file mode 100644
index 0000000..edc739e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference6_q7.txt
@@ -0,0 +1,514 @@
+B
+256
+// -0.480850
+0xc2
+// 0.247116
+0x20
+// 0.151265
+0x13
+// -0.136104
+0xef
+// 0.088762
+0xb
+// 0.263679
+0x22
+// -0.190122
+0xe8
+// 0.262155
+0x22
+// 0.227646
+0x1d
+// -0.026814
+0xfd
+// -0.051320
+0xf9
+// 0.018362
+0x2
+// 0.016374
+0x2
+// -0.308338
+0xd9
+// 0.326194
+0x2a
+// -0.019207
+0xfe
+// 0.120305
+0xf
+// -0.161971
+0xeb
+// 0.204503
+0x1a
+// 0.256912
+0x21
+// 0.101520
+0xd
+// 0.273857
+0x23
+// -0.092294
+0xf4
+// 0.387212
+0x32
+// -0.228040
+0xe3
+// -0.338831
+0xd5
+// -0.202034
+0xe6
+// -0.294200
+0xda
+// 0.033958
+0x4
+// 0.102505
+0xd
+// 0.066434
+0x9
+// 0.089699
+0xb
+// 0.058659
+0x8
+// -0.084472
+0xf5
+// 0.024409
+0x3
+// -0.106480
+0xf2
+// 0.224949
+0x1d
+// 0.222454
+0x1c
+// 0.055319
+0x7
+// 0.203315
+0x1a
+// 0.272459
+0x23
+// 0.047197
+0x6
+// -0.247379
+0xe0
+// -0.123333
+0xf0
+// 0.128064
+0x10
+// -0.286054
+0xdb
+// -0.361116
+0xd2
+// 0.289787
+0x25
+// 0.209454
+0x1b
+// -0.040653
+0xfb
+// -0.218035
+0xe4
+// -0.142885
+0xee
+// 0.029731
+0x4
+// 0.064043
+0x8
+// 0.247953
+0x20
+// -0.011359
+0xff
+// -0.136928
+0xee
+// 0.246439
+0x20
+// -0.203091
+0xe6
+// -0.061891
+0xf8
+// -0.257027
+0xdf
+// -0.055565
+0xf9
+// 0.389864
+0x32
+// 0.073625
+0x9
+// -0.277924
+0xdc
+// -0.211025
+0xe5
+// 0.127501
+0x10
+// 0.312672
+0x28
+// 0.152873
+0x14
+// 0.036376
+0x5
+// 0.418561
+0x36
+// -0.060807
+0xf8
+// 0.311700
+0x28
+// 0.424941
+0x36
+// -0.176438
+0xe9
+// -0.093309
+0xf4
+// 0.130806
+0x11
+// -0.245334
+0xe1
+// -0.027453
+0xfc
+// -0.412196
+0xcb
+// 0.213610
+0x1b
+// -0.240409
+0xe1
+// -0.463027
+0xc5
+// 0.057583
+0x7
+// -0.305861
+0xd9
+// 0.188407
+0x18
+// -0.342599
+0xd4
+// -0.125811
+0xf0
+// 0.039957
+0x5
+// -0.093257
+0xf4
+// -0.143438
+0xee
+// -0.085691
+0xf5
+// -0.184196
+0xe8
+// -0.515065
+0xbe
+// 0.047575
+0x6
+// 0.180487
+0x17
+// 0.295076
+0x26
+// -0.097388
+0xf4
+// 0.060029
+0x8
+// -0.368077
+0xd1
+// -0.300858
+0xd9
+// -0.108295
+0xf2
+// -0.021010
+0xfd
+// 0.011650
+0x1
+// -0.271958
+0xdd
+// 0.128197
+0x10
+// -0.371402
+0xd0
+// 0.063718
+0x8
+// 0.105646
+0xe
+// 0.114536
+0xf
+// 0.088812
+0xb
+// -0.068119
+0xf7
+// 0.050331
+0x6
+// -0.201260
+0xe6
+// -0.277807
+0xdc
+// 0.116356
+0xf
+// 0.268332
+0x22
+// 0.356841
+0x2e
+// -0.509925
+0xbf
+// 0.154583
+0x14
+// -0.160026
+0xec
+// 0.146889
+0x13
+// -0.057056
+0xf9
+// -0.359189
+0xd2
+// 0.353558
+0x2d
+// 0.393991
+0x32
+// 0.484212
+0x3e
+// -0.223390
+0xe3
+// 0.043747
+0x6
+// 0.120163
+0xf
+// 0.067904
+0x9
+// 0.022982
+0x3
+// -0.081760
+0xf6
+// 0.083811
+0xb
+// 0.101280
+0xd
+// 0.249134
+0x20
+// -0.197277
+0xe7
+// 0.480278
+0x3d
+// -0.172511
+0xea
+// -0.101640
+0xf3
+// -0.094166
+0xf4
+// -0.060360
+0xf8
+// -0.221953
+0xe4
+// -0.035912
+0xfb
+// -0.066819
+0xf7
+// -0.145223
+0xed
+// -0.224265
+0xe3
+// -0.011069
+0xff
+// -0.006279
+0xff
+// 0.485935
+0x3e
+// 0.254896
+0x21
+// 0.202518
+0x1a
+// -0.074611
+0xf6
+// 0.010027
+0x1
+// 0.140656
+0x12
+// -0.129205
+0xef
+// -0.346615
+0xd4
+// -0.114705
+0xf1
+// -0.469390
+0xc4
+// -0.038422
+0xfb
+// -0.312017
+0xd8
+// -0.109044
+0xf2
+// 0.167741
+0x15
+// 0.053938
+0x7
+// -0.316555
+0xd7
+// 0.005470
+0x1
+// 0.242888
+0x1f
+// -0.093228
+0xf4
+// 0.051446
+0x7
+// 0.133346
+0x11
+// 0.141203
+0x12
+// -0.295413
+0xda
+// -0.078341
+0xf6
+// -0.226907
+0xe3
+// -0.338120
+0xd5
+// 0.055174
+0x7
+// -0.433468
+0xc9
+// 0.001628
+0x0
+// 0.163245
+0x15
+// 0.105736
+0xe
+// 0.124267
+0x10
+// 0.162134
+0x15
+// -0.382517
+0xcf
+// 0.072148
+0x9
+// -0.029966
+0xfc
+// -0.289126
+0xdb
+// -0.232925
+0xe2
+// 0.089507
+0xb
+// 0.262184
+0x22
+// -0.174351
+0xea
+// -0.139332
+0xee
+// 0.190950
+0x18
+// -0.265858
+0xde
+// 0.098168
+0xd
+// -0.090076
+0xf4
+// 0.280716
+0x24
+// -0.116939
+0xf1
+// -0.081527
+0xf6
+// 0.003908
+0x1
+// -0.072833
+0xf7
+// -0.075524
+0xf6
+// 0.147494
+0x13
+// 0.135252
+0x11
+// 0.457584
+0x3b
+// 0.207139
+0x1b
+// 0.130471
+0x11
+// -0.314263
+0xd8
+// -0.136468
+0xef
+// -0.089601
+0xf5
+// -0.175737
+0xea
+// 0.019562
+0x3
+// -0.199138
+0xe7
+// 0.233079
+0x1e
+// 0.070440
+0x9
+// 0.500000
+0x40
+// -0.210264
+0xe5
+// -0.497703
+0xc0
+// -0.046568
+0xfa
+// 0.222358
+0x1c
+// -0.228086
+0xe3
+// 0.073355
+0x9
+// 0.219546
+0x1c
+// 0.071859
+0x9
+// -0.009477
+0xff
+// -0.158506
+0xec
+// 0.092430
+0xc
+// 0.229942
+0x1d
+// -0.246929
+0xe0
+// -0.481358
+0xc2
+// -0.115750
+0xf1
+// 0.004900
+0x1
+// -0.148492
+0xed
+// 0.219747
+0x1c
+// 0.197214
+0x19
+// -0.202540
+0xe6
+// -0.191817
+0xe7
+// 0.188822
+0x18
+// -0.457813
+0xc5
+// 0.298394
+0x26
+// -0.074438
+0xf6
+// 0.467035
+0x3c
+// 0.157879
+0x14
+// 0.275298
+0x23
+// 0.171021
+0x16
+// -0.145654
+0xed
+// -0.450533
+0xc6
+// 0.143485
+0x12
+// -0.045948
+0xfa
+// -0.190411
+0xe8
+// 0.422934
+0x36
+// -0.062318
+0xf8
+// 0.163971
+0x15
+// 0.041761
+0x5
+// 0.089785
+0xb
+// -0.187455
+0xe8
+// 0.258772
+0x21
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference7_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference7_q7.txt
new file mode 100644
index 0000000..c040bac
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference7_q7.txt
@@ -0,0 +1,4 @@
+B
+1
+// 0.375785
+0x30
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference8_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference8_q7.txt
new file mode 100644
index 0000000..75cb527
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference8_q7.txt
@@ -0,0 +1,4 @@
+B
+1
+// 0.615210
+0x4f
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference9_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference9_q7.txt
new file mode 100644
index 0000000..39bdce6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/BasicMaths/BasicMathsQ7/Reference9_q7.txt
@@ -0,0 +1,4 @@
+B
+1
+// 0.677001
+0x57
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_bias_1.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_bias_1.txt
new file mode 100644
index 0000000..fe4aa56
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_bias_1.txt
@@ -0,0 +1,10 @@
+B
+4
+//04
+0x04
+//08
+0x08
+//12
+0x0c
+//16
+0x10
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_bias_3.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_bias_3.txt
new file mode 100755
index 0000000..1c4e16c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_bias_3.txt
@@ -0,0 +1,10 @@
+B
+4
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//-3
+0xfd
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_input_1.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_input_1.txt
new file mode 100644
index 0000000..e8da982
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_input_1.txt
@@ -0,0 +1,22 @@
+B
+10
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_input_3.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_input_3.txt
new file mode 100755
index 0000000..1edf101
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_input_3.txt
@@ -0,0 +1,22 @@
+B
+10
+//-11
+0xf5
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//04
+0x04
+//05
+0x05
+//06
+0x06
+//07
+0x07
+//-10
+0xf6
+//-11
+0xf5
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_output_1.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_output_1.txt
new file mode 100644
index 0000000..3945509
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_output_1.txt
@@ -0,0 +1,10 @@
+B
+4
+//57
+0x39
+//58
+0x3a
+//59
+0x3b
+//60
+0x3c
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_output_3.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_output_3.txt
new file mode 100755
index 0000000..1b38477
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_output_3.txt
@@ -0,0 +1,10 @@
+B
+4
+//25
+0x19
+//-1
+0xff
+//-1
+0xff
+//127
+0x7f
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_weights_1.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_weights_1.txt
new file mode 100644
index 0000000..490ea07
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_weights_1.txt
@@ -0,0 +1,82 @@
+B
+40
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//17
+0x11
+//19
+0x13
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//17
+0x11
+//19
+0x13
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//17
+0x11
+//19
+0x13
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//17
+0x11
+//19
+0x13
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_weights_3.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_weights_3.txt
new file mode 100755
index 0000000..e2e9f6c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_10_4_weights_3.txt
@@ -0,0 +1,82 @@
+B
+40
+//00
+0x00
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//04
+0x04
+//05
+0x05
+//06
+0x06
+//07
+0x07
+//08
+0x08
+//09
+0x09
+//00
+0x00
+//01
+0x01
+//-128
+0x80
+//03
+0x03
+//04
+0x04
+//05
+0x05
+//-8
+0xf8
+//07
+0x07
+//08
+0x08
+//-3
+0xfd
+//127
+0x7f
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//75
+0x4b
+//05
+0x05
+//06
+0x06
+//07
+0x07
+//08
+0x08
+//00
+0x00
+//00
+0x00
+//01
+0x01
+//-2
+0xfe
+//03
+0x03
+//04
+0x04
+//05
+0x05
+//-8
+0xf8
+//07
+0x07
+//08
+0x08
+//-11
+0xf5
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_bias_5.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_bias_5.txt
new file mode 100755
index 0000000..07c9420
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_bias_5.txt
@@ -0,0 +1,18 @@
+B
+8
+//-3
+0xfd
+//01
+0x01
+//-2
+0xfe
+//02
+0x02
+//01
+0x01
+//08
+0x08
+//03
+0x03
+//02
+0x02
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_input_5.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_input_5.txt
new file mode 100755
index 0000000..bd76134
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_input_5.txt
@@ -0,0 +1,18 @@
+B
+8
+//-2
+0xffe
+//00
+0x00
+//-1
+0xfff
+//-6
+0xffa
+//-13
+0xff3
+//21
+0x15
+//-1
+0xfff
+//-10
+0xff6
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_output_5.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_output_5.txt
new file mode 100755
index 0000000..1a3805e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_output_5.txt
@@ -0,0 +1,18 @@
+B
+8
+//103
+0x67
+//102
+0x66
+//-81
+0xaf
+//-128
+0x80
+//-124
+0x84
+//127
+0x7f
+//-128
+0x80
+//-128
+0x80
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_weights_5.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_weights_5.txt
new file mode 100755
index 0000000..c8b1ae5
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_8_weights_5.txt
@@ -0,0 +1,130 @@
+B
+64
+//00
+0x00
+//-3
+0xffd
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//-1
+0xfff
+//00
+0x00
+//01
+0x01
+//-4
+0xffc
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//66
+0x42
+//00
+0x00
+//00
+0x00
+//21
+0x15
+//02
+0x02
+//33
+0x21
+//01
+0x01
+//07
+0x07
+//00
+0x00
+//08
+0x08
+//00
+0x00
+//20
+0x14
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//-8
+0xff8
+//07
+0x07
+//-5
+0xffb
+//00
+0x00
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//-1
+0xfff
+//-4
+0xffc
+//08
+0x08
+//10
+0x0a
+//-3
+0xffd
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//-6
+0xffa
+//08
+0x08
+//-3
+0xffd
+//02
+0x02
+//34
+0x22
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//08
+0x08
+//-8
+0xff8
+//-3
+0xffd
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-8
+0xff8
+//07
+0x07
+//08
+0x08
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_bias_2.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_bias_2.txt
new file mode 100755
index 0000000..6217457
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_bias_2.txt
@@ -0,0 +1,20 @@
+B
+9
+//-3
+0xfd
+//01
+0x01
+//-2
+0xfe
+//02
+0x02
+//01
+0x01
+//08
+0x08
+//03
+0x03
+//02
+0x02
+//-4
+0xfc
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_input_2.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_input_2.txt
new file mode 100755
index 0000000..ab3d81a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_input_2.txt
@@ -0,0 +1,18 @@
+B
+8
+//-2
+0xfe
+//00
+0x00
+//-1
+0xff
+//-6
+0xfa
+//-13
+0xf3
+//21
+0x15
+//-1
+0xff
+//-10
+0xf6
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_output_2.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_output_2.txt
new file mode 100755
index 0000000..73d0dc0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_output_2.txt
@@ -0,0 +1,20 @@
+B
+9
+//103
+0x67
+//102
+0x66
+//-81
+0xaf
+//-128
+0x80
+//-124
+0x84
+//127
+0x7f
+//-128
+0x80
+//-128
+0x80
+//127
+0x7f
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_weights_2.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_weights_2.txt
new file mode 100755
index 0000000..e63a2fe
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_8_9_weights_2.txt
@@ -0,0 +1,146 @@
+B
+72
+//00
+0x00
+//-3
+0xfd
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//-1
+0xff
+//00
+0x00
+//01
+0x01
+//-4
+0xfc
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//66
+0x42
+//00
+0x00
+//00
+0x00
+//21
+0x15
+//02
+0x02
+//33
+0x21
+//01
+0x01
+//07
+0x07
+//00
+0x00
+//08
+0x08
+//00
+0x00
+//20
+0x14
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//-8
+0xf8
+//07
+0x07
+//-5
+0xfb
+//00
+0x00
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//-1
+0xff
+//-4
+0xfc
+//08
+0x08
+//10
+0x0a
+//-3
+0xfd
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//-6
+0xfa
+//08
+0x08
+//-3
+0xfd
+//02
+0x02
+//34
+0x22
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//08
+0x08
+//-8
+0xf8
+//-3
+0xfd
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-8
+0xf8
+//07
+0x07
+//08
+0x08
+//103
+0x67
+//102
+0x66
+//-1
+0xff
+//-1
+0xff
+//-1
+0xff
+//127
+0x7f
+//-1
+0xff
+//-1
+0xff
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_bias_4.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_bias_4.txt
new file mode 100755
index 0000000..6806469
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_bias_4.txt
@@ -0,0 +1,4 @@
+B
+1
+//-3
+0xfd
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_input_4.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_input_4.txt
new file mode 100755
index 0000000..929f5a6
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_input_4.txt
@@ -0,0 +1,20 @@
+B
+9
+//-11
+0xf5
+//00
+0x00
+//00
+0x00
+//-6
+0xfa
+//05
+0x05
+//01
+0x01
+//-1
+0xff
+//-10
+0xf6
+//-1
+0xff
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_output_4.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_output_4.txt
new file mode 100755
index 0000000..dc3d93c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_output_4.txt
@@ -0,0 +1,4 @@
+B
+1
+//-88
+0xa8
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_weights_4.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_weights_4.txt
new file mode 100755
index 0000000..4a24da8
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_1_9_1_weights_4.txt
@@ -0,0 +1,20 @@
+B
+9
+//00
+0x00
+//-3
+0xfd
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//06
+0x06
+//07
+0x07
+//08
+0x08
+//09
+0x09
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_bias_10.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_bias_10.txt
new file mode 100755
index 0000000..4c1055a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_bias_10.txt
@@ -0,0 +1,4 @@
+B
+1
+//04
+0x04
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_bias_8.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_bias_8.txt
new file mode 100755
index 0000000..4c1055a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_bias_8.txt
@@ -0,0 +1,4 @@
+B
+1
+//04
+0x04
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_input_10.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_input_10.txt
new file mode 100755
index 0000000..06a94f3
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_input_10.txt
@@ -0,0 +1,82 @@
+B
+40
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//-19
+0xed
+//-21
+0xeb
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_input_8.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_input_8.txt
new file mode 100755
index 0000000..06a94f3
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_input_8.txt
@@ -0,0 +1,82 @@
+B
+40
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//-19
+0xed
+//-21
+0xeb
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//13
+0x0d
+//-17
+0xef
+//17
+0x11
+//-21
+0xeb
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_output_10.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_output_10.txt
new file mode 100755
index 0000000..89867ec
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_output_10.txt
@@ -0,0 +1,10 @@
+B
+4
+//23
+0x17
+//57
+0x39
+//39
+0x27
+//39
+0x27
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_output_8.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_output_8.txt
new file mode 100755
index 0000000..89867ec
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_output_8.txt
@@ -0,0 +1,10 @@
+B
+4
+//23
+0x17
+//57
+0x39
+//39
+0x27
+//39
+0x27
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_weights_10.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_weights_10.txt
new file mode 100755
index 0000000..7e21d82
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_weights_10.txt
@@ -0,0 +1,22 @@
+B
+10
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//17
+0x11
+//19
+0x13
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_weights_8.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_weights_8.txt
new file mode 100755
index 0000000..7e21d82
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_10_1_weights_8.txt
@@ -0,0 +1,22 @@
+B
+10
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//15
+0x0f
+//17
+0x11
+//19
+0x13
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_bias_14.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_bias_14.txt
new file mode 100755
index 0000000..49e66be
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_bias_14.txt
@@ -0,0 +1,8 @@
+B
+3
+//00
+0x00
+//00
+0x00
+//00
+0x00
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_input_14.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_input_14.txt
new file mode 100755
index 0000000..d319cd2
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_input_14.txt
@@ -0,0 +1,58 @@
+B
+28
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_output_14.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_output_14.txt
new file mode 100755
index 0000000..5dede97
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_output_14.txt
@@ -0,0 +1,26 @@
+B
+12
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
+//06
+0x06
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_weights_14.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_weights_14.txt
new file mode 100755
index 0000000..e613ae2
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_4_7_3_weights_14.txt
@@ -0,0 +1,44 @@
+B
+21
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_bias_15.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_bias_15.txt
new file mode 100755
index 0000000..79734b1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_bias_15.txt
@@ -0,0 +1,10 @@
+B
+4
+//-2
+0xfe
+//01
+0x01
+//-1
+0xff
+//03
+0x03
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_input_15.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_input_15.txt
new file mode 100755
index 0000000..c84d0a3
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_input_15.txt
@@ -0,0 +1,114 @@
+B
+56
+//-2
+0xfe
+//00
+0x00
+//-1
+0xff
+//-6
+0xfa
+//-13
+0xf3
+//01
+0x01
+//-1
+0xff
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//-8
+0xf8
+//-3
+0xfd
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-8
+0xf8
+//07
+0x07
+//-2
+0xfe
+//00
+0x00
+//-1
+0xff
+//-6
+0xfa
+//-13
+0xf3
+//01
+0x01
+//-1
+0xff
+//-8
+0xf8
+//-3
+0xfd
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-8
+0xf8
+//07
+0x07
+//-2
+0xfe
+//00
+0x00
+//-1
+0xff
+//-6
+0xfa
+//-2
+0xfe
+//01
+0x01
+//-1
+0xff
+//-2
+0xfe
+//18
+0x12
+//36
+0x24
+//-6
+0xfa
+//-13
+0xf3
+//01
+0x01
+//08
+0x08
+//-20
+0xec
+//18
+0x12
+//36
+0x24
+//-16
+0xf0
+//-13
+0xf3
+//01
+0x01
+//98
+0x62
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_output_15.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_output_15.txt
new file mode 100755
index 0000000..0591469
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_output_15.txt
@@ -0,0 +1,66 @@
+B
+32
+//-18
+0xee
+//-43
+0xd5
+//127
+0x7f
+//07
+0x07
+//04
+0x04
+//09
+0x09
+//-17
+0xef
+//14
+0x0e
+//-5
+0xfb
+//-18
+0xee
+//-40
+0xd8
+//15
+0x0f
+//-18
+0xee
+//-43
+0xd5
+//127
+0x7f
+//07
+0x07
+//-5
+0xfb
+//-18
+0xee
+//-40
+0xd8
+//15
+0x0f
+//-7
+0xf9
+//-21
+0xeb
+//41
+0x29
+//-15
+0xf1
+//46
+0x2e
+//77
+0x4d
+//127
+0x7f
+//127
+0x7f
+//108
+0x6c
+//-128
+0x80
+//127
+0x7f
+//127
+0x7f
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_weights_15.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_weights_15.txt
new file mode 100755
index 0000000..ce13f7a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_7_4_weights_15.txt
@@ -0,0 +1,58 @@
+B
+28
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//01
+0x01
+//-1
+0xff
+//-4
+0xfc
+//-2
+0xfe
+//00
+0x00
+//-1
+0xff
+//-6
+0xfa
+//-13
+0xf3
+//01
+0x01
+//-1
+0xff
+//-2
+0xfe
+//00
+0x00
+//06
+0x06
+//04
+0x04
+//-3
+0xfd
+//01
+0x01
+//-1
+0xff
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_bias_11.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_bias_11.txt
new file mode 100755
index 0000000..4c1055a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_bias_11.txt
@@ -0,0 +1,4 @@
+B
+1
+//04
+0x04
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_bias_7.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_bias_7.txt
new file mode 100755
index 0000000..4c1055a
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_bias_7.txt
@@ -0,0 +1,4 @@
+B
+1
+//04
+0x04
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_input_11.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_input_11.txt
new file mode 100755
index 0000000..596dd84
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_input_11.txt
@@ -0,0 +1,130 @@
+B
+64
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-3
+0xfd
+//11
+0x0b
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//-19
+0xed
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//-9
+0xf7
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//65
+0x41
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//-3
+0xfd
+//01
+0x01
+//03
+0x03
+//01
+0x01
+//07
+0x07
+//09
+0x09
+//03
+0x03
+//-1
+0xff
+//01
+0x01
+//03
+0x03
+//-7
+0xf9
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//67
+0x43
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_input_7.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_input_7.txt
new file mode 100755
index 0000000..596dd84
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_input_7.txt
@@ -0,0 +1,130 @@
+B
+64
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-3
+0xfd
+//11
+0x0b
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//-19
+0xed
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//-9
+0xf7
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//65
+0x41
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//-3
+0xfd
+//01
+0x01
+//03
+0x03
+//01
+0x01
+//07
+0x07
+//09
+0x09
+//03
+0x03
+//-1
+0xff
+//01
+0x01
+//03
+0x03
+//-7
+0xf9
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//67
+0x43
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_output_11.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_output_11.txt
new file mode 100755
index 0000000..1c31eb0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_output_11.txt
@@ -0,0 +1,18 @@
+B
+8
+//107
+0x6b
+//49
+0x31
+//22
+0x16
+//127
+0x7f
+//48
+0x30
+//58
+0x3a
+//-128
+0x80
+//08
+0x08
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_output_7.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_output_7.txt
new file mode 100755
index 0000000..1c31eb0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_output_7.txt
@@ -0,0 +1,18 @@
+B
+8
+//107
+0x6b
+//49
+0x31
+//22
+0x16
+//127
+0x7f
+//48
+0x30
+//58
+0x3a
+//-128
+0x80
+//08
+0x08
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_weights_11.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_weights_11.txt
new file mode 100755
index 0000000..11ffc58
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_weights_11.txt
@@ -0,0 +1,18 @@
+B
+8
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-1
+0xff
+//11
+0x0b
+//13
+0x0d
+//-17
+0xef
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_weights_7.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_weights_7.txt
new file mode 100755
index 0000000..11ffc58
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_1_weights_7.txt
@@ -0,0 +1,18 @@
+B
+8
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-1
+0xff
+//11
+0x0b
+//13
+0x0d
+//-17
+0xef
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_bias_13.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_bias_13.txt
new file mode 100755
index 0000000..5a6ef86
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_bias_13.txt
@@ -0,0 +1,12 @@
+B
+5
+//-2
+0xfe
+//01
+0x01
+//-1
+0xff
+//03
+0x03
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_input_13.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_input_13.txt
new file mode 100755
index 0000000..beb3f62
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_input_13.txt
@@ -0,0 +1,132 @@
+B
+64
+//-76
+0xb4
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//00
+0x00
+//09
+0x09
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-7
+0xf9
+//-2
+0xfe
+//03
+0x03
+//01
+0x01
+//-12
+0xf4
+//-7
+0xf9
+//08
+0x08
+//-1
+0xff
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-1
+0xff
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-7
+0xf9
+//-2
+0xfe
+//03
+0x03
+//01
+0x01
+//22
+0x16
+//-7
+0xf9
+//08
+0x08
+//03
+0x03
+//-19
+0xed
+//19
+0x13
+//37
+0x25
+//-15
+0xf1
+//-12
+0xf4
+//02
+0x02
+//99
+0x63
+//01
+0x01
+//-1
+0xff
+//19
+0x13
+//37
+0x25
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//09
+0x09
+
+
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_output_13.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_output_13.txt
new file mode 100755
index 0000000..0d9d0cc
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_output_13.txt
@@ -0,0 +1,82 @@
+B
+40
+//-128
+0x80
+//-128
+0x80
+//-128
+0x80
+//-128
+0x80
+//-128
+0x80
+//-29
+0xe3
+//-81
+0xaf
+//127
+0x7f
+//127
+0x7f
+//55
+0x37
+//03
+0x03
+//-65
+0xbf
+//127
+0x7f
+//127
+0x7f
+//87
+0x57
+//-31
+0xe1
+//-87
+0xa9
+//127
+0x7f
+//127
+0x7f
+//37
+0x25
+//-15
+0xf1
+//-41
+0xd7
+//81
+0x51
+//-128
+0x80
+//03
+0x03
+//37
+0x25
+//49
+0x31
+//-128
+0x80
+//127
+0x7f
+//-99
+0x9d
+//127
+0x7f
+//-128
+0x80
+//127
+0x7f
+//127
+0x7f
+//115
+0x73
+//99
+0x63
+//127
+0x7f
+//127
+0x7f
+//127
+0x7f
+//91
+0x5b
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_weights_13.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_weights_13.txt
new file mode 100755
index 0000000..1b2a64b
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_8_8_5_weights_13.txt
@@ -0,0 +1,82 @@
+B
+40
+//02
+0x02
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//04
+0x04
+//02
+0x02
+//00
+0x00
+//-3
+0xfd
+//02
+0x02
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//00
+0x00
+//98
+0x62
+//-1
+0xff
+//01
+0x01
+//07
+0x07
+//05
+0x05
+//-2
+0xfe
+//02
+0x02
+//00
+0x00
+//02
+0x02
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//01
+0x01
+//-2
+0xfe
+//02
+0x02
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_bias_6.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_bias_6.txt
new file mode 100755
index 0000000..0890a32
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_bias_6.txt
@@ -0,0 +1,4 @@
+B
+1
+//04
+0x04
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_bias_9.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_bias_9.txt
new file mode 100755
index 0000000..0890a32
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_bias_9.txt
@@ -0,0 +1,4 @@
+B
+1
+//04
+0x04
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_input_6.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_input_6.txt
new file mode 100755
index 0000000..0bc5d5d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_input_6.txt
@@ -0,0 +1,110 @@
+B
+54
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-3
+0xfd
+//11
+0x0b
+//13
+0x0d
+//03
+0x03
+//-19
+0xed
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//-9
+0xf7
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//65
+0x41
+//13
+0x0d
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//-3
+0xfd
+//03
+0x03
+//01
+0x01
+//07
+0x07
+//09
+0x09
+//03
+0x03
+//-1
+0xff
+//03
+0x03
+//-7
+0xf9
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//67
+0x43
+//03
+0x03
+//-7
+0xf9
+//07
+0x07
+//09
+0x09
+//65
+0x41
+//13
+0x0d
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_input_9.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_input_9.txt
new file mode 100755
index 0000000..0bc5d5d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_input_9.txt
@@ -0,0 +1,110 @@
+B
+54
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-3
+0xfd
+//11
+0x0b
+//13
+0x0d
+//03
+0x03
+//-19
+0xed
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//-9
+0xf7
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//65
+0x41
+//13
+0x0d
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//13
+0x0d
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//09
+0x09
+//11
+0x0b
+//-3
+0xfd
+//03
+0x03
+//01
+0x01
+//07
+0x07
+//09
+0x09
+//03
+0x03
+//-1
+0xff
+//03
+0x03
+//-7
+0xf9
+//07
+0x07
+//09
+0x09
+//05
+0x05
+//67
+0x43
+//03
+0x03
+//-7
+0xf9
+//07
+0x07
+//09
+0x09
+//65
+0x41
+//13
+0x0d
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_output_6.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_output_6.txt
new file mode 100755
index 0000000..1a9c509
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_output_6.txt
@@ -0,0 +1,20 @@
+B
+9
+//82
+0x52
+//58
+0x3a
+//-8
+0xf8
+//82
+0x52
+//82
+0x52
+//34
+0x22
+//36
+0x24
+//127
+0x7f
+//70
+0x46
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_output_9.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_output_9.txt
new file mode 100755
index 0000000..1a9c509
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_output_9.txt
@@ -0,0 +1,20 @@
+B
+9
+//82
+0x52
+//58
+0x3a
+//-8
+0xf8
+//82
+0x52
+//82
+0x52
+//34
+0x22
+//36
+0x24
+//127
+0x7f
+//70
+0x46
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_weights_6.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_weights_6.txt
new file mode 100755
index 0000000..59348e0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_weights_6.txt
@@ -0,0 +1,14 @@
+B
+6
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-1
+0xffffffff
+//11
+0x0b
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_weights_9.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_weights_9.txt
new file mode 100755
index 0000000..59348e0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_6_1_weights_9.txt
@@ -0,0 +1,14 @@
+B
+6
+//01
+0x01
+//03
+0x03
+//05
+0x05
+//07
+0x07
+//-1
+0xffffffff
+//11
+0x0b
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_bias_12.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_bias_12.txt
new file mode 100755
index 0000000..0ed95bb
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_bias_12.txt
@@ -0,0 +1,10 @@
+B
+4
+//-2
+0xfe
+//01
+0x01
+//-1
+0xff
+//00
+0x00
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_input_12.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_input_12.txt
new file mode 100755
index 0000000..ebeefdb
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_input_12.txt
@@ -0,0 +1,146 @@
+B
+72
+//-76
+0xb4
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//14
+0x0e
+//01
+0x01
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//00
+0x00
+//09
+0x09
+//-1
+0xff
+//11
+0x0b
+//00
+0x00
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//00
+0x00
+//01
+0x01
+//-7
+0xf9
+//-2
+0xfe
+//03
+0x03
+//01
+0x01
+//-12
+0xf4
+//-7
+0xf9
+//08
+0x08
+//-1
+0xff
+//-61
+0xc3
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-1
+0xff
+//02
+0x02
+//00
+0x00
+//02
+0x02
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//01
+0x01
+//-2
+0xfe
+//23
+0x17
+//00
+0x00
+//01
+0x01
+//-7
+0xf9
+//-2
+0xfe
+//03
+0x03
+//01
+0x01
+//22
+0x16
+//-7
+0xf9
+//08
+0x08
+//03
+0x03
+//-19
+0xed
+//19
+0x13
+//37
+0x25
+//-15
+0xf1
+//-12
+0xf4
+//02
+0x02
+//99
+0x63
+//01
+0x01
+//-1
+0xff
+//19
+0x13
+//37
+0x25
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//09
+0x09
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_output_12.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_output_12.txt
new file mode 100755
index 0000000..8bd4573
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_output_12.txt
@@ -0,0 +1,74 @@
+B
+36
+//-128
+0x80
+//-105
+0x97
+//-128
+0x80
+//-128
+0x80
+//-15
+0xf1
+//-41
+0xd7
+//127
+0x7f
+//103
+0x67
+//11
+0x0b
+//-13
+0xf3
+//127
+0x7f
+//127
+0x7f
+//-16
+0xf0
+//-44
+0xd4
+//127
+0x7f
+//127
+0x7f
+//-68
+0xbc
+//-81
+0xaf
+//100
+0x64
+//-55
+0xc9
+//24
+0x18
+//04
+0x04
+//70
+0x46
+//127
+0x7f
+//18
+0x12
+//24
+0x18
+//-128
+0x80
+//71
+0x47
+//115
+0x73
+//-128
+0x80
+//127
+0x7f
+//127
+0x7f
+//49
+0x31
+//79
+0x4f
+//127
+0x7f
+//127
+0x7f
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_weights_12.txt b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_weights_12.txt
new file mode 100755
index 0000000..ce487f4
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/NN/FullyConnected/TestCase_9_8_4_weights_12.txt
@@ -0,0 +1,66 @@
+B
+32
+//02
+0x02
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//01
+0x01
+//02
+0x02
+//03
+0x03
+//04
+0x04
+//02
+0x02
+//00
+0x00
+//-3
+0xfd
+//02
+0x02
+//-1
+0xff
+//01
+0x01
+//00
+0x00
+//-5
+0xfb
+//-12
+0xf4
+//02
+0x02
+//00
+0x00
+//98
+0x62
+//-1
+0xff
+//01
+0x01
+//07
+0x07
+//05
+0x05
+//-2
+0xfe
+//02
+0x02
+//00
+0x00
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/README.md b/CMSIS/DSP/Testing/README.md
new file mode 100644
index 0000000..c037f66
--- /dev/null
+++ b/CMSIS/DSP/Testing/README.md
@@ -0,0 +1,497 @@
+# TEST FRAMEWORK
+
+This framework is for our own internal use. We decided to release it but, at least in short term, we won't give any help or support about it.
+
+## REQUIREMENTS
+
+### Test descriptions
+
+#### R1 : The tests shall be described in a file
+We need a source of truth which is describing all the tests and can be used
+to generate code, format output etc ...
+
+#### R2 : The test description should support a hierarchy
+We have lots of tests. We need to be able to organize them in a
+hierarchical way
+
+#### R3 : A test shall be uniquely identified
+We need a way to identify in an unique way each test to ensure traceability and enable to create
+history of test results and benchmark.
+
+#### R4 : The unique identifier shall not change when tests are added or removed.
+It is important to keep traceability.
+
+#### R5 : The test description shall list the test patterns and input patterns required by the tests
+
+#### R6 : It shall be possible to parametrize the tests
+
+For benchmarking, we may need to vary some dimensions of the tests (like input length).
+The tests may depend on several parameters (width, height etc ...)
+We need to be able to specify how those parameters are varied.
+
+#### R7 : It shall be possible to specify a subset of parameters (which could be empty) to compute regression.
+For instance, if our test is dependent on a vector size, we may want to compute a linear regression
+to know how the performances are dependent on the cycle size.
+
+But, our test may also depend on another parameter B which are not interesting us in the regression. In that case, the regression formula should not take into account B. And we would have several regression formula for each value of the parameter B.
+
+The parameters of the tests would be Vector Size and B but the Summary parameter only Vector Size.
+
+#### R8 : The concept of a test suite shall be supported.
+A test suite is a set of tests using the same data.
+
+### Test execution
+
+For following requirements, we define a device under tests (DUT) as the place where the function to test is executed. But the test itself (to check that the execution has been successful could be running on the DUT or on a host like a PC).
+
+
+#### R9 : The memory should be cleaned between 2 tests
+A test should start (as far as possible) in a clean state. There should not be interferences between the tests.
+
+#### R10 : The test may be run on the DUT or on the host
+
+#### R11 : Output of tested functions could be dumped or not
+
+#### R12 : The tested function should not know where are the patterns and how to get them
+
+#### R13 : Control of the tests could run on the DUT but could also be run on a host
+
+#### R14 : Summary of test execution shall support several formats
+(CSV, HTML, Text etc ...)
+
+#### R15 : One should not assume the test environment on the DUT has access to IOs.
+
+
+## DESIGN PRINCIPLES
+
+The design is a consequence of all the requirements.
+
+### Test description
+
+A test description file is defined with a specific syntax to support R1 to R8.
+
+#### Hierachical structure
+
+ group Root {
+ class = Root
+ group DSP Test {
+ class = DSPTest
+ folder = DSP
+ suite Basic Tests {
+ class = BasicTests
+ folder = BasicMaths
+
+The tests are organized in a hierarchy. For each node of thee hierarchy, a C++ class is specified.
+The script processTest.py is generating C++ codee for the group.
+For the test suite, the script is generating a partial implementation since a test suite is containing tests and you need to add the test themselves.
+
+The patterns, output of tests, parameters are also following a hierarchical structure. But they do not need
+to be organized in exactly the same way. So, the folder property of a node is optional.
+
+A folder can be reused for different nodes. For instance, you may have a suite for testing and one for benchmarking and both may use the same pattern folder.
+
+A test suite is more complex since it contains the descriptino of the tests and related information.
+
+#### Test suite
+
+The simplest suite is just containing functions:
+
+ suite Basic Tests {
+ class = BasicTests
+ folder = BasicMaths
+
+ Functions {
+ Test arm_add_f32:test_add_f32
+ }
+ }
+
+A function is described with some text and followed by the name of the function in the C++ class.
+The text is used when reporting the results of the tests.
+
+The same function can be used for different tests in the suite. The tests will be different due to different input data or parameters.
+
+A test is requiring input patterns, reference patterns and outputs (to be compared to the reference).
+Since the test must not know where is the data and how to get it, this information is provided in the test descriptino file.
+
+So, the test suite would be:
+
+ suite Basic Tests {
+ class = BasicTests
+ folder = BasicMaths
+
+ Pattern INPUT1_F32_ID : Input1_f32.txt
+ Pattern INPUT2_F32_ID : Input2_f32.txt
+ Pattern REF_ADD_F32_ID : Reference1_f32.txt
+ Output OUT_SAMPLES_F32_ID : Output
+
+ Functions {
+ Test arm_add_f32:test_add_f32
+ }
+ }
+
+A pattern or output description is an ID (to be used in the code) followed by a filename.
+
+The file is is the folder defined with the folder properties of the group / suites.
+
+The root folder for pattern and output is different.
+
+#### Benchmarks
+
+A benchmark will often have to be run with different length for the input.
+So we need a way to communicate arguments to a function.
+
+We make the assumption that those arguments are integers.
+In the benchmark results, we may want to generate a CSV (or any other format) with different columns for those arguments.
+
+And we may want to compute a regression formula using only a subset of those arguments.
+
+So, we have the possibility in the suite section to add a parameter section to describe all of this.
+
+ suite Complex Tests {
+ class = ComplexTests
+ folder = ComplexMaths
+
+ ParamList {
+ A,B,C
+ Summary A,B
+ Names "Param A", "Param B"
+ Formula "A*B"
+ }
+
+ Pattern INPUT1_F32_ID : Input1_f32.txt
+
+
+In above example we declare that thee functions of the suite are using 3 parameters named A,B and C.
+We declare that a regression formula will use only A and B. So for each C value, we will get a different
+regression formula.
+
+We list the names to use when formatting the output of benchmarks.
+We define a regression formula using R syntax. (We do not write cycles ~ A*B but only A*B)
+
+Once parameters have been described, we need a way to feed parameter values to a test.
+
+There are 2 ways. First is a parameter file. Problem of a parameter file when it has to be included in the test (C array) is that it may be big. So, we also have a parameter generator. It is less felxible but enough for lot of cases.
+
+Those parameters values, when specified with a file, are described with:
+
+ Output OUT_SAMPLES_F32_ID : Output
+ Params PARAM1_ID : Params1.txt
+
+They follow the outputs and use similar syntax.
+
+When the parameter is specified with a generator then the syntax is :
+
+ Params PARAM3_ID = {
+ A = [1,3,5]
+ B = [1,3,5]
+ C = [1,3,5]
+ }
+
+This generator will compute the cartesian product of the 3 lists.
+
+To use parameters with a function the syntax is:
+
+ Functions {
+ Test A:testA -> PARAM3_ID
+ } -> PARAM1_ID
+
+PARAM1_ID is the default applied to all functions.
+In this example we decide to use PARAM3_ID for the testA function.
+
+#### File formats
+Pattern files have the following format:
+
+ W
+ 128
+ // 1.150898
+ 0x3f93509c
+ ...
+
+
+First line if the word size (W,H or B)
+Second line is the number of samples
+Then for each samples we have an human representation of the value:
+// 1.150898
+
+and an hexadecimal representation
+0x3f93509c
+
+Output files are only containing the hexadecimal values.
+
+Parameters files have the following format:
+
+ 81
+ 1
+ 1
+ 1
+ 1
+ 1
+ 3
+ ...
+
+First line is the number of samples. Then the samples.
+
+First line must be a multiple of the number of parameters. In our above example we have 3 parameters A,B,C.
+So, the number of possible run must be a multiple of 3 since we need to specify values for all parameters.
+
+#### disabled
+
+Any node (Group, Suite or Function) can be disabled by using disabled { ...}.
+
+A disabled group/suite/test is not executed (and its code not generated fro group/suite).
+Using disabled for tests is allowing to disable a test without changing the test ID of following tests.
+
+
+### Memory manager
+Memory manager is coming from requirement R9
+Its API is defined by virtual class Memory. An implementation ArrayMemory is provided which is using a buffer.
+The details of the APIs are in Test.h
+
+A memory manager can provide new buffer, free all the already allocated buffers and give a generation number which is incremented each time all buffer are released.
+
+#### Runner
+According to R13 , the test may be controlled on the DUT or from an external host.
+It is implemented with a Runner class. The only implementation provided is IORunner,
+
+A Runner is just an implementation of the visitor pattern. A runner is applied to the tree of tests.
+In case of the IO runner, the IO mechanism and the memory manager must be provided.
+
+#### IO
+According to R12 and R15, tests do not know how to access patterns. It is a responsiblity implemented with the IO, Pattern and PatternMgr.
+
+IO is about loading patterns and dumping output. It is not about IO in general.
+We provide 2 IO implementations : Semihosting and FPGA.
+
+FPGA is when you need to run the tests in a constrained environment where you only have stdout. The inputs of tests are in C array. The script processTest.py will generate those C arrays.
+
+Patterns is the interface to patterns and output from the test point of view.
+They will return NULL when a pattern is still referencing a generation of memory older than the current one.
+
+PatternMgr is the link between IO and Memory and knows how to load a pattern and save it into memory.
+
+#### Dump feature
+According to R10 and R11, one must be able to disable tests done on the DUT and dump the output so that the test itself can be done on the host.
+When instantiating a runner, you can specify the running mode with an enum. For instance Testing::kTestAndDump.
+There are 3 modes, Test only, Dump only, Test and dump.
+
+
+
+#### processResult
+For R14, we have a python script which will process the result of tests and format it into several possible formats like text, CSV, Mathematica dataset.
+
+
+## HOW TO RUN IT
+
+### Needed packages
+
+ pip install pyparsing
+
+If you want to compute summary statistics with regression:
+
+ pip install statsmodels
+ pip install numpy
+ pip install panda
+
+### Generate the test patterns in Patterns folder
+
+ cd Testing
+ python PatternGeneration\BasicMaths.py
+
+
+### Generate the build system
+
+ mkdir build
+ cmake -DCMAKE_PREFIX_PATH="path/to/tools" -DCMAKE_TOOLCHAIN_FILE=../../armcc.cmake -DARM_CPU="cortex-a5" -DPLATFORM="FVP" -G "Unix Makefiles" ..
+
+### Generate the cpp,h and txt files from the desc.txt file
+
+ cd ..
+ python processTests.py -f desc.txt
+
+You can pass a C++ class to specifiy that you want to generate tests only for a specific group or suite.
+
+ python processTests.py -f desc.txt BasicTests
+
+You can add a test ID to specify that you wan to run only a specific test in the suite:
+
+ python processTests.py -f desc.txt BasicTests 4
+
+### Build and run the tests
+
+Folder Output/BasicMaths should exist
+
+ cd build
+ make VERBOSE=1
+ "C:\Program Files\ARM\Development Studio 2019.0\sw\models\bin\FVP_VE_Cortex-A5x1.exe" -a Testing > result.txt
+
+### Parse the results
+
+ cd ..
+ python processResult.py -f desc.txt -r build\result.txt
+
+### Generate summary statistics
+
+The result parsing may have generated some statistics in FullBenchmark folder.
+
+The script summaryBench can parse those results and compute regression formula.
+
+ python summaryBench.py -f desc.txt -r build\result.txt
+
+The output of this script may look like:
+
+ "ID","CATEGORY","Param C","Regression","MAX"
+ 1,"DSP:ComplexMaths",1,"225.3749999999999 + A * 0.7083333333333606 + B * 0.7083333333333641 + A*B * 1.3749999999999876",260
+
+Each test is uniquely identified with the CATEGORY and test ID (ID in the suite).
+The MAX column is the max of cycles computed for all values of A and B which were used for this benchmark.
+
+### FPGA mode
+In FPGA mode, it is slightly different.
+The script processTests and processResult must be used with additional option -e
+
+testmain.cpp must be modified
+
+This line
+```cpp
+Client::Semihosting io("../TestDesc.txt","../Patterns","../Output");
+```
+
+must be replaced with
+
+```cpp
+Client::FPGA io(testDesc,patterns);
+```
+
+testDesc and patterns are char* generated by the script processTests
+
+### Dumping outputs
+
+To dump the output of the tests, the line
+
+```cpp
+Client::IORunner runner(&io,&mgr,Testing::kTestOnly);
+```
+
+Must be replaced by
+
+```cpp
+Client::IORunner runner(&io,&mgr,Testing::DumoOnly);
+```
+
+or
+
+```cpp
+Client::IORunner runner(&io,&mgr,Testing::kTestAndDump);
+```
+
+and of course, the test must have a line to dump the outputs.
+
+## testmain.cpp
+
+To start the tests you need to:
+
+* Allocate a memory manager
+* Choose IO (Semihosting or FPGA)
+* Instantiate a pattern manager (linking IO and memory)
+* Choose a test Runner (IORunner)
+* Instantiate the root object which is containing all tests
+* Apply the runner to the root object
+
+## HOW TO ADD NEW TESTS
+
+For a test suite MyClass, the scripts are generating an include file MyClass_decl.h
+
+You should create another include MyClass.h and another cpp file MyClass.cpp
+
+MyClass.h should contain:
+
+```cpp
+ #include "Test.h"
+ #include "Pattern.h"
+ class MyClass:public Client::Suite
+ {
+ public:
+ MyClass(Testing::testID_t id);
+ void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+ void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "MyClass_decl.h"
+
+ // Definitions of the patterns you have in the test description file
+ // for this test suite
+ Client::Pattern<float32_t> input1;
+ Client::Pattern<float32_t> input2;
+ Client::LocalPattern<float32_t> output;
+ // Reference patterns are not loaded when we are in dump mode
+ Client::RefPattern<float32_t> ref;
+ };
+```
+
+Then, you should provide an implementation of setUp, tearDown and of course your tests.
+
+So, MyClass.cpp could be:
+
+```cpp
+ #include "MyClass.h"
+ #include "Error.h"
+
+
+ // Implementation of your test
+ void MyClass::test_add_f32()
+ {
+ // Ptr to input patterns, references and output.
+ // Input and references have been loaded in setUp
+ const float32_t *inp1=input1.ptr();
+ const float32_t *inp2=input2.ptr();
+ float32_t *refp=ref.ptr();
+ float32_t *outp=output.ptr();
+
+ // Execution of the tests
+ arm_add_f32(inp1,inp2,outp,input1.nbSamples());
+
+
+ // Testing.
+ // Warning : in case of benchmarking this will be taken into account in the
+ // benchmark. So a benchmark should not contain tests.
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+```
+
+Then setUp should load the patterns:
+
+```cpp
+ void MyClass::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+ {
+
+ Testing::nbSamples_t nb=MAX_NB_SAMPLES;
+
+ // We can load different pattern or length according to the test ID
+ switch(id)
+ {
+ case MyClass::TEST_ADD_F32_1:
+ nb = 3;
+ ref.reload(MyClass::REF_ADD_F32_ID,mgr,nb);
+ break;
+ }
+
+ input1.reload(BasicTests::INPUT1_F32_ID,mgr,nb);
+ input2.reload(BasicTests::INPUT2_F32_ID,mgr,nb);
+
+ output.create(input1.nbSamples(),BasicTests::OUT_SAMPLES_F32_ID,mgr);
+ }
+```
+
+In tearDown we have to clean the test. No need to free the buffer since the memory manager will do it
+in an automatic way. But if other allocations were done outside of the memory manager, then the clean up should be done here.
+
+It is also here that you specify what you want to dump if you're in dump mode.
+
+```cpp
+ void MyClass::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+ output.dump(mgr);
+ }
+```
+
+## HOW TO EXTEND IT
\ No newline at end of file
diff --git a/CMSIS/DSP/Examples/ARM/boot/RTE_Components.h b/CMSIS/DSP/Testing/RTE_Components.h
old mode 100755
new mode 100644
similarity index 100%
rename from CMSIS/DSP/Examples/ARM/boot/RTE_Components.h
rename to CMSIS/DSP/Testing/RTE_Components.h
diff --git a/CMSIS/DSP/Testing/Source/BasicMathsBenchmarksF32.cpp b/CMSIS/DSP/Testing/Source/BasicMathsBenchmarksF32.cpp
new file mode 100644
index 0000000..1d2a659
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/BasicMathsBenchmarksF32.cpp
@@ -0,0 +1,119 @@
+#include "BasicMathsBenchmarksF32.h"
+#include "Error.h"
+
+
+ void BasicMathsBenchmarksF32::vec_mult_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_mult_f32(inp1,inp2,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_add_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_add_f32(inp1,inp2,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_sub_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_sub_f32(inp1,inp2,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_abs_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_abs_f32(inp1,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_negate_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_negate_f32(inp1,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_offset_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_offset_f32(inp1,1.0,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_scale_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t *outp=output.ptr();
+
+
+ arm_scale_f32(inp1,1.0,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksF32::vec_dot_f32()
+ {
+
+ float32_t *inp1=input1.ptr();
+ float32_t *inp2=input2.ptr();
+ float32_t result;
+
+
+ arm_dot_prod_f32(inp1,inp2,this->nb,&result);
+
+ }
+
+
+
+ void BasicMathsBenchmarksF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+ {
+
+
+ std::vector<Testing::param_t>::iterator it = params.begin();
+ this->nb = *it;
+
+ input1.reload(BasicMathsBenchmarksF32::INPUT1_F32_ID,mgr,this->nb);
+ input2.reload(BasicMathsBenchmarksF32::INPUT2_F32_ID,mgr,this->nb);
+
+
+ output.create(this->nb,BasicMathsBenchmarksF32::OUT_SAMPLES_F32_ID,mgr);
+
+ }
+
+ void BasicMathsBenchmarksF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+ }
diff --git a/CMSIS/DSP/Testing/Source/BasicMathsBenchmarksQ31.cpp b/CMSIS/DSP/Testing/Source/BasicMathsBenchmarksQ31.cpp
new file mode 100755
index 0000000..9202698
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/BasicMathsBenchmarksQ31.cpp
@@ -0,0 +1,119 @@
+#include "BasicMathsBenchmarksQ31.h"
+#include "Error.h"
+
+
+ void BasicMathsBenchmarksQ31::vec_mult_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_mult_q31(inp1,inp2,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_add_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_add_q31(inp1,inp2,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_sub_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_sub_q31(inp1,inp2,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_abs_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_abs_q31(inp1,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_negate_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_negate_q31(inp1,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_offset_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_offset_q31(inp1,1.0,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_scale_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q31_t *outp=output.ptr();
+
+
+ arm_scale_q31(inp1,0x45,1,outp,this->nb);
+
+ }
+
+ void BasicMathsBenchmarksQ31::vec_dot_q31()
+ {
+
+ q31_t *inp1=input1.ptr();
+ q31_t *inp2=input2.ptr();
+ q63_t result;
+
+
+ arm_dot_prod_q31(inp1,inp2,this->nb,&result);
+
+ }
+
+
+
+ void BasicMathsBenchmarksQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+ {
+
+
+ std::vector<Testing::param_t>::iterator it = params.begin();
+ this->nb = *it;
+
+ input1.reload(BasicMathsBenchmarksQ31::INPUT1_Q31_ID,mgr,this->nb);
+ input2.reload(BasicMathsBenchmarksQ31::INPUT2_Q31_ID,mgr,this->nb);
+
+
+ output.create(this->nb,BasicMathsBenchmarksQ31::OUT_SAMPLES_Q31_ID,mgr);
+
+ }
+
+ void BasicMathsBenchmarksQ31::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+ }
diff --git a/CMSIS/DSP/Testing/Source/BasicTestsF32.cpp b/CMSIS/DSP/Testing/Source/BasicTestsF32.cpp
new file mode 100644
index 0000000..18a12c1
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/BasicTestsF32.cpp
@@ -0,0 +1,222 @@
+#include "BasicTestsF32.h"
+#include "Error.h"
+
+#define FULL 1
+
+#define GET_F32_PTR() \
+const float32_t *inp1=input1.ptr(); \
+const float32_t *inp2=input2.ptr(); \
+float32_t *refp=ref.ptr(); \
+float32_t *outp=output.ptr();
+
+ void BasicTestsF32::test_add_f32()
+ {
+ GET_F32_PTR();
+
+ arm_add_f32(inp1,inp2,outp,input1.nbSamples());
+
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+#ifdef FULL
+ void BasicTestsF32::test_sub_f32()
+ {
+ GET_F32_PTR();
+
+ arm_sub_f32(inp1,inp2,outp,input1.nbSamples());
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+
+ void BasicTestsF32::test_mult_f32()
+ {
+ GET_F32_PTR();
+
+ arm_mult_f32(inp1,inp2,outp,input1.nbSamples());
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+
+ void BasicTestsF32::test_negate_f32()
+ {
+ GET_F32_PTR();
+
+ arm_negate_f32(inp1,outp,input1.nbSamples());
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+
+ void BasicTestsF32::test_offset_f32()
+ {
+ GET_F32_PTR();
+
+ arm_offset_f32(inp1,0.5,outp,input1.nbSamples());
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+
+ void BasicTestsF32::test_scale_f32()
+ {
+ GET_F32_PTR();
+
+ arm_scale_f32(inp1,0.5,outp,input1.nbSamples());
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+
+ void BasicTestsF32::test_dot_prod_f32()
+ {
+ float32_t r;
+
+ GET_F32_PTR();
+
+ arm_dot_prod_f32(inp1,inp2,input1.nbSamples(),&r);
+
+ ASSERT_NEAR_EQ(r,refp[0],(float)1e-6);
+
+ }
+
+ void BasicTestsF32::test_abs_f32()
+ {
+ GET_F32_PTR();
+
+ arm_abs_f32(inp1,outp,input1.nbSamples());
+
+ ASSERT_NEAR_EQ(ref,output,(float)1e-6);
+
+ }
+
+ #endif
+ void BasicTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+ {
+
+ Testing::nbSamples_t nb=MAX_NB_SAMPLES;
+
+
+ switch(id)
+ {
+ case BasicTestsF32::TEST_ADD_F32_1:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
+ break;
+ #ifdef FULL
+ case BasicTestsF32::TEST_ADD_F32_2:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_ADD_F32_3:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_ADD_F32_ID,mgr,nb);
+ break;
+
+
+ case BasicTestsF32::TEST_SUB_F32_4:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_SUB_F32_5:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_SUB_F32_6:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_SUB_F32_ID,mgr,nb);
+ break;
+
+ case BasicTestsF32::TEST_MULT_F32_7:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_MULT_F32_8:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_MULT_F32_9:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_MULT_F32_ID,mgr,nb);
+ break;
+
+ case BasicTestsF32::TEST_NEGATE_F32_10:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_NEGATE_F32_11:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_NEGATE_F32_12:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_NEGATE_F32_ID,mgr,nb);
+ break;
+
+ case BasicTestsF32::TEST_OFFSET_F32_13:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_OFFSET_F32_14:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_OFFSET_F32_15:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_OFFSET_F32_ID,mgr,nb);
+ break;
+
+ case BasicTestsF32::TEST_SCALE_F32_16:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_SCALE_F32_17:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_SCALE_F32_18:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_SCALE_F32_ID,mgr,nb);
+ break;
+
+ case BasicTestsF32::TEST_DOT_PROD_F32_19:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_DOT_3_F32_ID,mgr);
+ break;
+ case BasicTestsF32::TEST_DOT_PROD_F32_20:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_DOT_4N_F32_ID,mgr);
+ break;
+ case BasicTestsF32::TEST_DOT_PROD_F32_21:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_DOT_4N1_F32_ID,mgr);
+ break;
+
+ case BasicTestsF32::TEST_ABS_F32_22:
+ nb = 3;
+ ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_ABS_F32_23:
+ nb = 8;
+ ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
+ break;
+ case BasicTestsF32::TEST_ABS_F32_24:
+ nb = 9;
+ ref.reload(BasicTestsF32::REF_ABS_F32_ID,mgr,nb);
+ break;
+#endif
+ }
+
+
+ input1.reload(BasicTestsF32::INPUT1_F32_ID,mgr,nb);
+ input2.reload(BasicTestsF32::INPUT2_F32_ID,mgr,nb);
+
+ output.create(input1.nbSamples(),BasicTestsF32::OUT_SAMPLES_F32_ID,mgr);
+ }
+
+ void BasicTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+ output.dump(mgr);
+ }
diff --git a/CMSIS/DSP/Testing/Source/FullyConnected.cpp b/CMSIS/DSP/Testing/Source/FullyConnected.cpp
new file mode 100644
index 0000000..4d3dc3c
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/FullyConnected.cpp
@@ -0,0 +1,436 @@
+#include "FullyConnected.h"
+#include "Error.h"
+#include "arm_nnfunctions.h"
+#include "Test.h"
+
+#include <cstdio>
+
+void printPattern(char *s,Client::AnyPattern<q7_t> pat)
+{
+ q7_t *p=pat.ptr();
+ printf("%s\n",s);
+ for(int i=0;i < pat.nbSamples(); i++)
+ {
+ printf("0x%02x\n",p[i]);
+ }
+ printf("----\n");
+}
+
+ void FullyConnected::test_fully_connected_tflite_s8()
+ {
+
+ q7_t *inp=input.ptr();
+ q7_t *biasp=bias.ptr();
+ q7_t *weightp=weight.ptr();
+ q7_t *outp=output.ptr();
+ q7_t *refp=ref.ptr();
+ q15_t *tempp=temp.ptr();
+
+ arm_fully_connected_s8((int8_t*)inp
+ ,(const int8_t*)weightp
+ ,colDim
+ ,rowDim
+ ,nb_batches
+ ,input_offset
+ ,filter_offset
+ ,output_mult
+ ,output_shift
+ ,output_offset
+ ,(const int8_t*)biasp
+ ,(int8_t*)outp
+ ,act_min
+ ,act_max
+ ,tempp
+ );
+
+ ASSERT_EQ(ref,output);
+ }
+
+
+ void FullyConnected::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+ {
+
+
+ nb_batches = 1;
+
+
+ switch(id)
+ {
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_1:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+ input.reload(FullyConnected::INPUT1_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS1_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT1_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF1_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT1_S8_ID,mgr);
+ temp.create(input.nbSamples(),FullyConnected::TEMP1_S16_ID,mgr);
+
+ colDim=input.nbSamples();
+ rowDim=output.nbSamples();
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_2:
+ output_mult = 1073741824;
+ output_shift = 1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+ input.reload(FullyConnected::INPUT19_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS19_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT19_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF19_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT19_S8_ID,mgr);
+ temp.create(input.nbSamples(),FullyConnected::TEMP19_S16_ID,mgr);
+
+ colDim=input.nbSamples();
+ rowDim=output.nbSamples();
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_3:
+ output_mult = 1073741824;
+ output_shift = 2;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-1;
+ act_max= 127;
+
+ input.reload(FullyConnected::INPUT2_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS2_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT2_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF2_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT2_S8_ID,mgr);
+ temp.create(input.nbSamples(),FullyConnected::TEMP2_S16_ID,mgr);
+
+ colDim=input.nbSamples();
+ rowDim=output.nbSamples();
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_4:
+
+ output_mult = 1073741824;
+ output_shift = 1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ input.reload(FullyConnected::INPUT3_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS3_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT3_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF3_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT3_S8_ID,mgr);
+ temp.create(input.nbSamples(),FullyConnected::TEMP3_S16_ID,mgr);
+
+ colDim=input.nbSamples();
+ rowDim=output.nbSamples();
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_5:
+
+ output_mult = 1073741824;
+ output_shift = 1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ input.reload(FullyConnected::INPUT4_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS4_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT4_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF4_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT4_S8_ID,mgr);
+ temp.create(input.nbSamples(),FullyConnected::TEMP4_S16_ID,mgr);
+
+ colDim=input.nbSamples();
+ rowDim=output.nbSamples();
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_6:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=9;
+
+ colDim=6;
+ rowDim=1;
+
+ input.reload(FullyConnected::INPUT5_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS5_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT5_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF5_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT5_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP5_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_7:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=8;
+
+ colDim=8;
+ rowDim=1;
+
+
+ input.reload(FullyConnected::INPUT6_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS6_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT6_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF6_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT6_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP6_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_8:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=4;
+
+ colDim=10;
+ rowDim=1;
+
+
+ input.reload(FullyConnected::INPUT7_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS7_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT7_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF7_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT7_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP7_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_9:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=9;
+
+ colDim=6;
+ rowDim=1;
+
+ input.reload(FullyConnected::INPUT8_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS8_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT8_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF8_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT8_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP8_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_10:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=4;
+
+ colDim=10;
+ rowDim=1;
+
+ input.reload(FullyConnected::INPUT9_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS9_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT9_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF9_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT9_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP9_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_11:
+ output_mult = 1073741824;
+ output_shift = -1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=8;
+
+ colDim=8;
+ rowDim=1;
+
+ input.reload(FullyConnected::INPUT10_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS10_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT10_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF10_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT10_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP10_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_12:
+ output_mult = 1073741824;
+ output_shift = 1;
+ filter_offset = 0;
+ input_offset = 0;
+ output_offset = 0;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=9;
+
+ colDim=8;
+ rowDim=4;
+
+
+ input.reload(FullyConnected::INPUT11_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS11_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT11_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF11_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT11_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP11_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_13:
+ output_mult = 1077969154;
+ output_shift = 2;
+ filter_offset = 0;
+ input_offset = 0;
+ output_offset = 1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=8;
+
+ colDim=8;
+ rowDim=5;
+
+ input.reload(FullyConnected::INPUT12_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS12_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT12_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF12_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT12_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP12_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_14:
+ output_mult = 1073741824;
+ output_shift = 1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=4;
+
+ colDim=7;
+ rowDim=3;
+
+
+ input.reload(FullyConnected::INPUT13_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS13_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT13_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF13_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT13_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP13_S16_ID,mgr);
+ break;
+
+ case FullyConnected::TEST_FULLY_CONNECTED_TFLITE_S8_15:
+ output_mult = 1073741824;
+ output_shift = 1;
+ filter_offset = 1;
+ input_offset = 1;
+ output_offset = -1;
+ act_min =-128;
+ act_max= 127;
+
+
+ nb_batches=8;
+
+ colDim=7;
+ rowDim=4;
+
+
+ input.reload(FullyConnected::INPUT14_S8_ID,mgr);
+ bias.reload(FullyConnected::BIAS14_S8_ID,mgr);
+ weight.reload(FullyConnected::WEIGHT14_S8_ID,mgr);
+
+ ref.reload(FullyConnected::REF14_S8_ID,mgr);
+
+ output.create(ref.nbSamples(),FullyConnected::OUTPUT14_S8_ID,mgr);
+ temp.create(colDim,FullyConnected::TEMP14_S16_ID,mgr);
+ break;
+ }
+
+
+
+ }
+
+ void FullyConnected::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+ output.dump(mgr);
+ }
diff --git a/CMSIS/DSP/Testing/Source/FullyConnectedBench.cpp b/CMSIS/DSP/Testing/Source/FullyConnectedBench.cpp
new file mode 100644
index 0000000..b5c26ae
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/FullyConnectedBench.cpp
@@ -0,0 +1,70 @@
+#include "FullyConnectedBench.h"
+#include "Error.h"
+#include "arm_nnfunctions.h"
+
+ void FullyConnectedBench::test_fully_connected_tflite_s8()
+ {
+
+ q7_t *inp=input.ptr();
+ q7_t *biasp=bias.ptr();
+ q7_t *weightp=weight.ptr();
+ q7_t *outp=output.ptr();
+ q7_t *refp=ref.ptr();
+ q15_t *tempp=temp.ptr();
+
+ int32_t output_mult = 1073741824;
+ int16_t output_shift = -1;
+ int32_t filter_offset = 1;
+ int32_t input_offset = 1;
+ int32_t output_offset = -1;
+
+
+
+ for(int i=0; i < this->repeatNb; i++)
+ {
+ arm_fully_connected_s8((int8_t*)inp
+ ,(const int8_t*)weightp
+ ,input.nbSamples()
+ ,output.nbSamples()
+ ,1
+ ,input_offset
+ ,filter_offset
+ ,output_mult
+ ,output_shift
+ ,output_offset
+ ,(const int8_t*)biasp
+ ,(int8_t*)outp
+ ,-128
+ ,127
+ ,tempp
+ );
+ }
+
+ }
+
+
+ void FullyConnectedBench::setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+ {
+
+
+ std::vector<Testing::param_t>::iterator it = params.begin();
+ this->repeatNb = *it;
+
+
+ input.reload(FullyConnectedBench::INPUT1_S8_ID,mgr);
+ bias.reload(FullyConnectedBench::BIAS_S8_ID,mgr);
+ weight.reload(FullyConnectedBench::WEIGHT_S8_ID,mgr);
+
+ ref.reload(FullyConnectedBench::REF1_S8_ID,mgr);
+
+
+ output.create(ref.nbSamples(),FullyConnectedBench::OUTPUT1_S8_ID,mgr);
+ temp.create(input.nbSamples(),FullyConnectedBench::TEMP1_S16_ID,mgr);
+
+
+ }
+
+ void FullyConnectedBench::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+
+ }
diff --git a/CMSIS/DSP/Testing/TestDesc.txt b/CMSIS/DSP/Testing/TestDesc.txt
new file mode 100644
index 0000000..e37aa46
--- /dev/null
+++ b/CMSIS/DSP/Testing/TestDesc.txt
@@ -0,0 +1,150 @@
+3 1
+n
+n
+3 3
+n
+y
+NN
+2 1
+n
+y
+FullyConnected
+0
+60
+TestCase_1_10_4_input_1.txt
+TestCase_1_10_4_bias_1.txt
+TestCase_1_10_4_weights_1.txt
+TestCase_1_10_4_output_1.txt
+TestCase_1_8_9_input_2.txt
+TestCase_1_8_9_bias_2.txt
+TestCase_1_8_9_weights_2.txt
+TestCase_1_8_9_output_2.txt
+TestCase_1_10_4_input_3.txt
+TestCase_1_10_4_bias_3.txt
+TestCase_1_10_4_weights_3.txt
+TestCase_1_10_4_output_3.txt
+TestCase_1_9_1_input_4.txt
+TestCase_1_9_1_bias_4.txt
+TestCase_1_9_1_weights_4.txt
+TestCase_1_9_1_output_4.txt
+TestCase_1_8_8_input_5.txt
+TestCase_1_8_8_bias_5.txt
+TestCase_1_8_8_weights_5.txt
+TestCase_1_8_8_output_5.txt
+TestCase_9_6_1_input_6.txt
+TestCase_9_6_1_bias_6.txt
+TestCase_9_6_1_weights_6.txt
+TestCase_9_6_1_output_6.txt
+TestCase_8_8_1_input_7.txt
+TestCase_8_8_1_bias_7.txt
+TestCase_8_8_1_weights_7.txt
+TestCase_8_8_1_output_7.txt
+TestCase_4_10_1_input_8.txt
+TestCase_4_10_1_bias_8.txt
+TestCase_4_10_1_weights_8.txt
+TestCase_4_10_1_output_8.txt
+TestCase_9_6_1_input_9.txt
+TestCase_9_6_1_bias_9.txt
+TestCase_9_6_1_weights_9.txt
+TestCase_9_6_1_output_9.txt
+TestCase_4_10_1_input_10.txt
+TestCase_4_10_1_bias_10.txt
+TestCase_4_10_1_weights_10.txt
+TestCase_4_10_1_output_10.txt
+TestCase_8_8_1_input_11.txt
+TestCase_8_8_1_bias_11.txt
+TestCase_8_8_1_weights_11.txt
+TestCase_8_8_1_output_11.txt
+TestCase_9_8_4_input_12.txt
+TestCase_9_8_4_bias_12.txt
+TestCase_9_8_4_weights_12.txt
+TestCase_9_8_4_output_12.txt
+TestCase_8_8_5_input_13.txt
+TestCase_8_8_5_bias_13.txt
+TestCase_8_8_5_weights_13.txt
+TestCase_8_8_5_output_13.txt
+TestCase_4_7_3_input_14.txt
+TestCase_4_7_3_bias_14.txt
+TestCase_4_7_3_weights_14.txt
+TestCase_4_7_3_output_14.txt
+TestCase_8_7_4_input_15.txt
+TestCase_8_7_4_bias_15.txt
+TestCase_8_7_4_weights_15.txt
+TestCase_8_7_4_output_15.txt
+30
+Output1
+Temp1
+Output19
+Temp19
+Output2
+Temp2
+Output3
+Temp3
+Output4
+Temp4
+Output5
+Temp5
+Output6
+Temp6
+Output7
+Temp7
+Output8
+Temp8
+Output9
+Temp9
+Output10
+Temp10
+Output11
+Temp11
+Output12
+Temp12
+Output13
+Temp13
+Output14
+Temp14
+0
+1 1
+n
+n
+1 2
+n
+n
+1 3
+n
+n
+1 4
+n
+n
+1 5
+n
+n
+1 6
+n
+n
+1 7
+n
+n
+1 8
+n
+n
+1 9
+n
+n
+1 10
+n
+n
+1 11
+n
+n
+1 12
+n
+n
+1 13
+n
+n
+1 14
+n
+n
+1 15
+n
+n
diff --git a/CMSIS/DSP/Testing/TestScripts/CodeGen.py b/CMSIS/DSP/Testing/TestScripts/CodeGen.py
new file mode 100644
index 0000000..f77b50a
--- /dev/null
+++ b/CMSIS/DSP/Testing/TestScripts/CodeGen.py
@@ -0,0 +1,847 @@
+import TestScripts.Parser
+import sys
+import os.path
+import math
+
+groupCode="""class %s : public Client::Group
+{
+ public:
+ %s(Testing::testID_t id):Client::Group(id)
+ %s
+ {
+ %s
+ }
+ private:
+ %s;
+};
+"""
+
+suiteCode="""
+#include \"%s.h\"
+ %s::%s(Testing::testID_t id):Client::Suite(id)
+ {
+ %s
+ }
+"""
+
+def decodeHex(hexstr,bits,mask):
+ value = int(hexstr,16) & mask
+ if value & (1 << (bits-1)):
+ value -= 1 << bits
+ return value
+
+def createMissingDir(destPath):
+ theDir=os.path.normpath(os.path.dirname(destPath))
+ if not os.path.exists(theDir):
+ os.makedirs(theDir)
+
+class CodeGen:
+ """ Code generation from the parsed description file
+
+ Generate include files, cpp files, and .txt files for test control
+ Generation depends on the mode (fpga or semihosting)
+ """
+
+ def __init__(self,patternDir,paramDir,fpga):
+ """ Create a CodeGen object
+
+ Args:
+ patternDir (str) : where pattern must be read
+ Used to generate include file in fpag mode
+ fpga (bool) : false in semihosting mode
+ Raises:
+ Nothing
+ Returns:
+ CodeGen : CodeGen object
+ """
+ self._fpga = fpga
+ self._patternDir = patternDir
+ self._paramDir = paramDir
+ self._currentPaths = [self._patternDir]
+ self._currentParamPaths = [self._paramDir]
+ self._alignment=8
+
+ def _genGroup(self,root,fi):
+ """ Generate header definition for a group of tests
+
+ Args:
+ root (TreeElem) : group object to use
+ fi (file) : Header file (TestDesc.h)
+ Where to write include definitions for the classes
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+
+ # Get the CPP class name
+ theClass = root.data["class"]
+ # Get the group ID
+ theId = root.id
+
+ varInit = ""
+ testInit = ""
+ testDecl = ""
+
+ # Generate initializer for the constructors
+ # All the member variables corresponding to the
+ # suites and groups contained in this group.
+ i = 1
+ for c in root:
+ theData = c.data
+ theMemberId = c.id
+ if not theData["deprecated"]:
+ theMemberClass = theData["class"]
+ theMemberVar = theMemberClass + "Var"
+ varInit += (",%s(%d)\n" % (theMemberVar,theMemberId))
+ i = i + 1
+
+ # Generate initialization code for the constructor
+ i = 1
+ for c in root:
+ theData = c.data
+ if theData["deprecated"]:
+ testInit += "this->addContainer(NULL);"
+ else:
+ theMemberClass = theData["class"]
+ theMemberVar = theMemberClass+"Var"
+ testInit += "this->addContainer(&%s);\n" % (theMemberVar)
+ i = i + 1
+
+ # Generate member variables for the groups and the suites
+ # contained in this group.
+ i = 1
+ for c in root:
+ theData = c.data
+ if not theData["deprecated"]:
+ theMemberClass = theData["class"]
+ theMemberVar = theMemberClass+"Var"
+ theMemberId = c.id
+ testDecl += "%s %s;\n" % (theMemberClass,theMemberVar)
+ i = i + 1
+
+ fi.write(groupCode % (theClass,theClass,varInit,testInit,testDecl) )
+
+ def _genSuite(self,root,thedir,sourceFile):
+ """ Generate source definition for suite
+
+ Args:
+ root (TreeElem) : suite object to use
+ fi (file) : Source file (TestDesc.cpp)
+ Where to write source definitions for the classes
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+
+ # Get the CPP class
+ theClass = root.data["class"]
+ testInit = ""
+ testDecl=""
+ declared={}
+
+ # Generate constructor for the class
+ # Test functions are added in the constructor.
+ # Keep track of the list of test functions
+ # (since a test function can be reused by several tests)
+ for c in root:
+ theData = c.data
+ theId = c.id
+ theTestName = theData["class"]
+ if not theData["deprecated"]:
+ testInit += "this->addTest(%d,(Client::test)&%s::%s);\n" % (theId,theClass,theTestName)
+ # To be able to deprecated tests without having to change the code
+ # we dump const declaration even for deprecated functions
+ if theTestName not in declared:
+ testDecl += "void %s();\n" % (theTestName)
+ declared[theTestName] = 1
+
+ # Generate the suite constructor.
+ sourceFile.write(suiteCode % (theClass,theClass,theClass,testInit) )
+
+ # Generate specific header file for this suite
+ with open(os.path.join(thedir,"%s_decl.h" % theClass),"w") as decl:
+ # Use list of test functions to
+ # declare them in the header.
+ # Since we don't want to declare the functino several times,
+ # that's why we needed to keep track of functions in the code above:
+ # to remove redundancies since the function
+ # can appear several time in the root object.
+ decl.write(testDecl)
+ # Generate the pattern ID for patterns
+ # defined in this suite
+ decl.write("\n// Pattern IDs\n")
+ i = 0
+ for p in root.patterns:
+ newId = "static const int %s=%d;\n" % (p[0],i)
+ decl.write(newId)
+ i = i + 1
+
+ # Generate output ID for the output categories
+ # defined in this suite
+ decl.write("\n// Output IDs\n")
+ i = 0
+ for p in root.outputs:
+ newId = "static const int %s=%d;\n" % (p[0],i)
+ decl.write(newId)
+ i = i + 1
+
+ # Generate test ID for the test define din this suite
+ i = 0
+ decl.write("\n// Test IDs\n")
+ for c in root:
+ theData = c.data
+ theId = c.id
+
+ # To be able to deprecated tests without having to change the code
+ # we dump const declaration even for deprecated functions
+ #if not theData["deprecated"]:
+ theTestName = theData["class"]
+ defTestID = "static const int %s_%d=%d;\n" % (theTestName.upper(),theId,theId)
+ decl.write(defTestID)
+ i = i + 1
+
+
+
+ def _genCode(self,root,dir,sourceFile,headerFile):
+ """ Generate code for the tree of tests
+
+ Args:
+ root (TreeElem) : root object containing the tree
+ sourceFile (file) : Source file (TestDesc.cpp)
+ Where to write source definitions for the classes
+ headerFile (file) : Heade5 file (TestDesc.h)
+ Where to write header definitions for the classes
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ deprecated = root.data["deprecated"]
+ if not deprecated:
+ if root.kind == TestScripts.Parser.TreeElem.GROUP:
+ # For a group, first iterate on the children then on the
+ # parent because the parent definitino in the header is
+ # dependent on the children definition (member varaiables)
+ # So children must gbe defined before.
+ for c in root:
+ self._genCode(c,dir,sourceFile,headerFile)
+ self._genGroup(root,headerFile)
+
+ # For a suite, we do not need to recurse since it is a leaf
+ # of the tree of tests and is containing a list of tests to
+ # generate
+ if root.kind == TestScripts.Parser.TreeElem.SUITE:
+ self._genSuite(root,dir,sourceFile)
+
+ def getSuites(self,root,listOfSuites):
+ """ Extract the list of all suites defined in the tree
+
+ Args:
+ root (TreeElem) : root object containing the tree
+ listOfSuites (list) : list of suites
+ Raises:
+ Nothing
+ Returns:
+ list : list of suites
+ """
+ deprecated = root.data["deprecated"]
+ if not deprecated:
+ theClass = root.data["class"]
+ if root.kind == TestScripts.Parser.TreeElem.SUITE:
+ # Append current suite to the list and return the result
+ listOfSuites.append(theClass)
+ return(listOfSuites)
+ elif root.kind == TestScripts.Parser.TreeElem.GROUP:
+ # Recurse on the children to get the listOfSuite.
+ # getSuites is appending to the list argument.
+ # So the line listOfSuites = self.getSuites(c,listOfSuites)
+ # is a fold.
+ for c in root:
+ listOfSuites = self.getSuites(c,listOfSuites)
+ return(listOfSuites)
+ else:
+ return(listOfSuites)
+ else:
+ return(listOfSuites)
+
+ def _genText(self,root,textFile):
+ """ Generate the text file which is driving the tests in semihosting
+
+ Format of file is:
+ node kind (group, suite or test)
+ node id (group id, suite id, test id)
+ y or n to indicate if this node has some parameters
+ if y there is the parameter ID
+ y or n to indicate if entering this node is adding a new
+ folder to the path used to get input files
+ if y, the path for the node is added.
+
+ Then, if node is a suite, description of the suite is generated.
+ Number of parameters or 0
+ It is the number of arguments used by function setUp (arity).
+ It is not the number of samples in a paramater file
+ The number of samples is always a multiple
+ For instance if width and height are the parameters then number
+ of parameters (arity) is 2.
+ But each parameter file may contain several combination of (width,height)
+ So the lenght of those files will be a multiple of 2.
+
+ The number of patterns path is generated
+ The patterns names are generated
+
+ The number of output names is generated
+ The output names are generated
+
+ The number of parameter path is generated
+ The parameter description are generated
+ p
+ path if a path
+ g
+ gen data if a generator
+ If a generator:
+ Generator kind (only 1 = cartesian product generator)
+ Number of samples generated when run
+ Number of dimensions
+ For each dimension
+ Length
+ Samples
+
+ So, for a test (which is also a TreeElement in the structure),
+ only node kind and node id are generated followed by
+ param description and n for folder (since ther is never any folder)
+
+ In the test description file, there is never any way to change the pattern
+ folder for a test.
+
+
+ Args:
+ root (TreeElem) : root object containing the tree
+ textFile (file) : where to write the driving description
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ deprecated = root.data["deprecated"]
+ if not deprecated:
+ textFile.write(str(root.kind))
+ textFile.write(" ")
+ textFile.write(str(root.id))
+ textFile.write("\n")
+
+ if "PARAMID" in root.data:
+ if root.parameterToID:
+ textFile.write("y\n")
+ paramId = root.parameterToID[root.data["PARAMID"]]
+ textFile.write(str(paramId))
+ textFile.write("\n")
+ elif root.parent.parameterToID:
+ textFile.write("y\n")
+ paramId = root.parent.parameterToID[root.data["PARAMID"]]
+ textFile.write(str(paramId))
+ textFile.write("\n")
+ else:
+ textFile.write("n\n")
+ else:
+ textFile.write("n\n")
+
+ # Always dump even if there is no path for a test
+ # so for a test it will always be n
+ # It is done to simplify parsing on C side
+ if root.path:
+ textFile.write("y\n")
+ textFile.write(root.path)
+ textFile.write('\n')
+ else:
+ textFile.write("n\n")
+
+
+ if root.kind == TestScripts.Parser.TreeElem.SUITE:
+ # Here we dump the number of parameters used
+ # for the tests / benchmarks
+ if root.params:
+ textFile.write("%d\n" % len(root.params.full))
+ else:
+ textFile.write("0\n")
+
+ # Generate patterns path
+ textFile.write("%d\n" % len(root.patterns))
+ for (patid,patpath) in root.patterns:
+ #textFile.write(patid)
+ #textFile.write("\n")
+ textFile.write(patpath.strip())
+ textFile.write("\n")
+
+ # Generate output names
+ textFile.write("%d\n" % len(root.outputs))
+ for (outid,outname) in root.outputs:
+ #textFile.write(patid)
+ #textFile.write("\n")
+ textFile.write(outname.strip())
+ textFile.write("\n")
+
+ # Generate parameters path or generator
+ textFile.write("%d\n" % len(root.parameters))
+ for (paramKind,parid,parpath) in root.parameters:
+ if paramKind == TestScripts.Parser.TreeElem.PARAMFILE:
+ textFile.write("p\n")
+ textFile.write(parpath.strip())
+ textFile.write("\n")
+ # Generator kind (only 1 = cartesian product generator)
+ # Number of input samples (dimensions + vectors)
+ # Number of samples generated when run
+ # Number of dimensions
+ # For each dimension
+ # Length
+ # Samples
+ if paramKind == TestScripts.Parser.TreeElem.PARAMGEN:
+ textFile.write("g\n")
+ dimensions = len(parpath)
+ nbOutputSamples = 1
+ nbInputSamples = 0
+ for c in parpath:
+ nbOutputSamples = nbOutputSamples * len(c["INTS"])
+ nbInputSamples = nbInputSamples + len(c["INTS"]) + 1
+ textFile.write("1")
+ textFile.write("\n")
+ textFile.write(str(nbInputSamples))
+ textFile.write("\n")
+ textFile.write(str(nbOutputSamples))
+ textFile.write("\n")
+ textFile.write(str(dimensions))
+ textFile.write("\n")
+ for c in parpath:
+ textFile.write(str(len(c["INTS"])))
+ textFile.write("\n")
+ for d in c["INTS"]:
+ textFile.write(str(d))
+ textFile.write("\n")
+
+ # Iterate on the children
+ for c in root:
+ self._genText(c,textFile)
+
+ def _write32(self,v,f):
+ """ Write four integers into a C char array to represent word32
+
+ It is used to dump input patterns in include files
+ or test drive in include file
+
+ Args:
+ v (int) : The int3 to write
+ f (file) : the opended file
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ a=[0,0,0,0]
+ a[0]= v & 0x0FF
+ v = v >> 8
+ a[1]= v & 0x0FF
+ v = v >> 8
+ a[2]= v & 0x0FF
+ v = v >> 8
+ a[3]= v & 0x0FF
+ v = v >> 8
+ f.write("%d,%d,%d,%d,\n" % (a[0],a[1],a[2],a[3]))
+
+ def _write16(self,v,f):
+ """ Write 2 integers into a C char array to represent word32
+
+ It is used to dump input patterns in include files
+ or test drive in include file
+
+ Args:
+ v (int) : The int3 to write
+ f (file) : the opended file
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ a=[0,0]
+ a[0]= v & 0x0FF
+ v = v >> 8
+ a[1]= v & 0x0FF
+ f.write("%d,%d,\n" % (a[0],a[1]))
+
+ def _write8(self,v,f):
+ """ Write 4 integers into a C char array to represent word8
+
+ It is used to dump input patterns in include files
+ or test drive in include file
+
+ Args:
+ v (int) : The int to write
+ f (file) : the opended file
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ a=[0]
+ a[0]= v & 0x0FF
+ f.write("%d,\n" % (a[0]))
+
+ def _writeString(self,v,f):
+ """ Write a C string into a C char array to represent as a list of int
+
+ It is used to dump input patterns in include files
+ or test drive in include file
+
+ Args:
+ v (str) : The string to write
+ f (file) : the opended file
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ for c in v:
+ f.write("'%c'," % c)
+ f.write("'\\0',\n")
+
+
+
+
+ def convertToInt(self,k,s):
+ v = 0
+ if k == "W":
+ v = decodeHex(s,32,0x0FFFFFFFF)
+ if k == "H":
+ v = decodeHex(s,16,0x0FFFF)
+ if k == "B":
+ v = decodeHex(s,8,0x0FF)
+ return(v)
+
+ def addPattern(self,includeFile,path):
+ """ Add a pattern to the include file
+
+ It is writing sequence of int into a C char array
+ to represent the pattern.
+
+ Assuming the C chr array is aligned, pattern offset are
+ aligned too.
+
+ So, some padding with 0 may also be generated after the patterm
+
+ Args:
+ includeFile (file) : Opened include file
+ path (str) : Path to file containing the data
+ Raises:
+ Nothing
+ Returns:
+ (int,int) : The pattern offset in the array and the number of samples
+ """
+ # Current offset in the array which is the offset for the
+ # pattern being added to this array
+ returnOffset = self._offset
+
+ # Read the pattern for the pattern file
+ with open(path,"r") as pat:
+ # Read pattern word size (B,H or W for 8, 16 or 32 bits)
+ # Patterns are containing data in hex format (big endian for ARM)
+ # So there is no conversion to do.
+ # Hex data is read and copied as it is in the C array
+
+ k =pat.readline().strip()
+ sampleSize=1
+ if k == 'W':
+ sampleSize = 4
+ if k == 'H':
+ sampleSize = 2
+ # Read number of samples
+ nbSamples = int(pat.readline().strip())
+ # Compute new offset based on pattern length only
+ newOffset = self._offset + sampleSize * nbSamples
+ # Compute padding due to alignment constraint
+ pad = self._alignment*math.ceil(newOffset / self._alignment) - newOffset
+ # New offset in the array
+ self._offset=newOffset + pad
+
+ # Generate all samples into the C array
+ for i in range(nbSamples):
+ # In pattern file we have a comment giving the
+ # true value (for instance float)
+ # and then a line giving the hex data
+ # We Ignore comment
+ pat.readline()
+ # Then we read the Value
+ v = self.convertToInt(k,pat.readline())
+ # Depending on the word size, this hex must be writen to
+ # the C array as 4,2 or 1 number.
+ if k == 'W':
+ self._write32(v,includeFile)
+ if k == 'H':
+ self._write16(v,includeFile)
+ if k == 'B':
+ self._write8(v,includeFile)
+ #includeFile.write("%d,\n" % v)
+ # Add the padding to the pattern
+ for i in range(pad):
+ includeFile.write("0,\n")
+
+ return(returnOffset,nbSamples)
+
+ def addParameter(self,includeFile,path):
+ """ Add a parameter array to the include file
+
+ It is writing sequence of int into a C char array
+ to represent the pattern.
+
+ Assuming the C chr array is aligned, pattern offset are
+ aligned too.
+
+ So, some padding with 0 may also be generated after the patterm
+
+ Args:
+ includeFile (file) : Opened include file
+ path (str) : Path to file containing the data
+ Raises:
+ Nothing
+ Returns:
+ (int,int) : The pattern offset in the array and the number of samples
+ """
+ # Current offset in the array which is the offset for the
+ # pattern being added to this array
+ returnOffset = self._offset
+
+ # Read the pattern for the pattern file
+ with open(path,"r") as pat:
+ # Read pattern word size (B,H or W for 8, 16 or 32 bits)
+ # Patterns are containing data in hex format (big endian for ARM)
+ # So there is no conversion to do.
+ # Hex data is read and copied as it is in the C array
+
+ sampleSize = 4
+ # Read number of samples
+ nbSamples = int(pat.readline().strip())
+
+ # Compute new offset based on pattern length only
+ newOffset = self._offset + sampleSize * nbSamples
+ # Compute padding due to alignment constraint
+ pad = self._alignment*math.ceil(newOffset / self._alignment) - newOffset
+ # New offset in the array
+ self._offset=newOffset + pad
+
+ # Generate all samples into the C array
+ for i in range(nbSamples):
+ # In pattern file we have a comment giving the
+ # true value (for instance float)
+ # and then a line giving the hex data
+ # Then we read the Value
+ v = int(pat.readline().strip(),0)
+ # Depending on the word size, this hex must be writen to
+ # the C array as 4,2 or 1 number.
+ self._write32(v,includeFile)
+ # Add the padding to the pattern
+ for i in range(pad):
+ includeFile.write("0,\n")
+
+ return(returnOffset,nbSamples)
+
+ def _genDriver(self,root,driverFile,includeFile):
+ """ Generate the driver file and the pattern file
+
+ Args:
+ root (TreeElement) : Tree of test descriptions
+ driverFile (file) : where to generate C array for test descriptions
+ includeFile (file) : where to generate C array for patterns
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+
+ #if root.parent:
+ # print(root.parent.data["message"])
+ #print(" ",root.data["message"])
+ #print(self._currentPaths)
+
+ deprecated = root.data["deprecated"]
+ # We follow a format quite similar to what is generated in _genText
+ # for the text description
+ # But here we are using an offset into the pattern array
+ # rather than a path to a pattern file.
+ # It is the only difference
+ # But for outputs we still need the path so the logic is the same
+ # Path for output is required to be able to extract data from the stdout file
+ # and know where the data must be written to.
+ # Please refer to comments of _genText for description of the format
+
+ oldPath = self._currentPaths.copy()
+ oldParamPath = self._currentParamPaths.copy()
+ if not deprecated:
+ # We write node kind and node id
+ self._write32(root.kind,driverFile)
+ self._write32(root.id,driverFile)
+
+
+
+ if "PARAMID" in root.data:
+ if root.parameterToID:
+ driverFile.write("'y',")
+ paramId = root.parameterToID[root.data["PARAMID"]]
+ self._write32(int(paramId),driverFile)
+ elif root.parent.parameterToID:
+ driverFile.write("'y',")
+ paramId = root.parent.parameterToID[root.data["PARAMID"]]
+ self._write32(int(paramId),driverFile)
+ else:
+ driverFile.write("'n',")
+ else:
+ driverFile.write("'n',")
+
+ # We write a folder path
+ # if folder changed in test description file
+ # Always dumped for a test even if no path for
+ # a test. So a test will always have n
+ # It is done to simplify parsing on C side
+ if root.path:
+ self._currentPaths.append(root.path)
+ self._currentParamPaths.append(root.path)
+ driverFile.write("'y',")
+ self._writeString(root.path,driverFile)
+ else:
+ driverFile.write("'n',\n")
+
+ if root.kind == TestScripts.Parser.TreeElem.SUITE:
+ # Number of parameters
+ if root.params:
+ self._write32(len(root.params.full),driverFile)
+ else:
+ self._write32(0,driverFile)
+
+ # Patterns offsets are written
+ # and pattern length since the length is not available in a file
+ # like for semihosting version
+ self._write32(len(root.patterns),driverFile)
+ for (patid,patpath) in root.patterns:
+ temp = self._currentPaths.copy()
+ temp.append(patpath)
+
+ includeFile.write("// " + os.path.join(*temp) + "\n")
+ offset,nbSamples=self.addPattern(includeFile,os.path.join(*temp))
+
+ #driverFile.write(patpath)
+ #driverFile.write("\n")
+ self._write32(offset,driverFile)
+ self._write32(nbSamples,driverFile)
+
+ # Generate output names
+ self._write32(len(root.outputs),driverFile)
+ for (outid,outname) in root.outputs:
+ #textFile.write(patid)
+ #textFile.write("\n")
+ self._writeString(outname.strip(),driverFile)
+
+ # Parameters offsets are written
+ # and parameter length since the length is not available in a file
+ # like for semihosting version
+ self._write32(len(root.parameters),driverFile)
+ for (paramKind,parid,parpath) in root.parameters:
+ if paramKind == TestScripts.Parser.TreeElem.PARAMFILE:
+ temp = self._currentParamPaths.copy()
+ temp.append(parpath)
+
+ includeFile.write("// " + os.path.join(*temp) + "\n")
+ offset,nbSamples=self.addParameter(includeFile,os.path.join(*temp))
+
+ #driverFile.write(patpath)
+ #driverFile.write("\n")
+ driverFile.write("'p',")
+ self._write32(offset,driverFile)
+ self._write32(nbSamples,driverFile)
+ # TO DO
+ if paramKind == TestScripts.Parser.TreeElem.PARAMGEN:
+ temp = self._currentParamPaths.copy()
+
+ includeFile.write("// " + os.path.join(*temp) + "\n")
+
+ driverFile.write("'g',")
+ dimensions = len(parpath)
+ nbOutputSamples = 1
+ nbInputSamples = 0
+ for c in parpath:
+ nbOutputSamples = nbOutputSamples * len(c["INTS"])
+ nbInputSamples = nbInputSamples + len(c["INTS"]) + 1
+
+ self._write32(1,driverFile)
+ self._write32(nbInputSamples,driverFile)
+ self._write32(nbOutputSamples,driverFile)
+ self._write32(dimensions,driverFile)
+
+ for c in parpath:
+ self._write32(len(c["INTS"]),driverFile)
+ for d in c["INTS"]:
+ self._write32(d,driverFile)
+
+
+ # Recurse on the children
+ for c in root:
+ self._genDriver(c,driverFile,includeFile)
+
+ self._currentPaths = oldPath.copy()
+ self._currentParamPaths = oldParamPath.copy()
+
+ def genCodeForTree(self,root):
+ """ Generate all files from the trees of tests
+
+ Args:
+ root (TreeElement) : Tree of test descriptions
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ # Get a list of all suites contained in the tree
+ suites = self.getSuites(root,[])
+
+
+ # Generate .cpp and .h files neded to run the tests
+ with open("GeneratedSource/TestDesc.cpp","w") as sourceFile:
+ with open("GeneratedInclude/TestDesc.h","w") as headerFile:
+ headerFile.write("#include \"Test.h\"\n")
+ headerFile.write("#include \"Pattern.h\"\n")
+
+ sourceFile.write("#include \"Test.h\"\n")
+ for s in suites:
+ headerFile.write("#include \"%s.h\"\n" % s)
+ self._genCode(root,"GeneratedInclude",sourceFile,headerFile)
+
+ # Generate a driver file for semihosting
+ # (always generated for debug purpose since it is the reference format)
+ with open("TestDesc.txt","w") as textFile:
+ self._genText(root,textFile)
+
+ # If fpga mode we need to generate
+ # a include file version of the driver file and of
+ # the pattern files.
+ # Driver file is similar in this case but different from semihosting
+ # one.
+ if not self._fpga:
+ with open("GeneratedInclude/TestDrive.h","w") as driverFile:
+ driverFile.write("// Empty driver include in semihosting mode")
+ with open("GeneratedInclude/Patterns.h","w") as includeFile:
+ includeFile.write("// Empty pattern include in semihosting mode")
+ else:
+ with open("GeneratedInclude/TestDrive.h","w") as driverFile:
+ driverFile.write("#ifndef _DRIVER_H_\n")
+ driverFile.write("#define _DRIVER_H_\n")
+ driverFile.write("__ALIGNED(8) const char testDesc[]={\n")
+ self._offset=0
+ with open("GeneratedInclude/Patterns.h","w") as includeFile:
+ includeFile.write("#ifndef _PATTERNS_H_\n")
+ includeFile.write("#define _PATTERNS_H_\n")
+ includeFile.write("__ALIGNED(8) const char patterns[]={\n")
+ self._genDriver(root,driverFile,includeFile)
+ includeFile.write("};\n")
+ includeFile.write("#endif\n")
+ driverFile.write("};\n")
+ driverFile.write("#endif\n")
+
+
+
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/TestScripts/NewParser.py b/CMSIS/DSP/Testing/TestScripts/NewParser.py
new file mode 100644
index 0000000..f3b3ce8
--- /dev/null
+++ b/CMSIS/DSP/Testing/TestScripts/NewParser.py
@@ -0,0 +1,230 @@
+from pyparsing import *
+import TestScripts.Parser as p
+
+
+
+class Params:
+ def __init__(self):
+ self.full = []
+ self.summary=None
+ self.paramNames = None
+ self.formula=""
+
+ def __str__(self):
+ return(str(self.full) + str(self.summary) + str(self.paramNames))
+
+def disabled(a):
+ return((CaselessKeyword("disabled") + "{" + a + "}") ^ a)
+
+def parsedNodeDesc( str, loc, toks ):
+ d={}
+ if "class" in toks:
+ d["class"]=toks["class"]
+ if "folder" in toks:
+ d["folder"]=toks["folder"]
+ return(d)
+
+def parseNodeSuite( str, loc, toks):
+ d={}
+ t = p.TreeElem(0)
+ if "message" in toks:
+ d["message"]=toks["message"]
+ if "class" in toks["desc"]:
+ d["class"] = toks["desc"]["class"]
+ if "folder" in toks["desc"]:
+ t.setPath(toks["desc"]["folder"])
+ d["deprecated"] = False
+ if(toks[0]=="disabled"):
+ d["deprecated"] = True
+
+ if "PARAMID" in toks:
+ d["PARAMID"] = toks["PARAMID"]
+
+ t.writeData(d)
+
+ if "params" in toks:
+ t.params=toks["params"]
+
+ for c in toks["allTests"]:
+ t.addGroup(c)
+ if "allPatterns" in toks:
+ for c in toks["allPatterns"]:
+ t.addPattern(c["ID"],c["path"])
+
+ if "allParams" in toks:
+ for c in toks["allParams"]:
+ if "path" in c:
+ t.addParam(p.TreeElem.PARAMFILE,c["ID"],c["path"])
+ if "numberList" in c:
+ #print(c["numberList"])
+ t.addParam(p.TreeElem.PARAMGEN,c["ID"],c["numberList"])
+
+ if "allOutputs" in toks:
+ for c in toks["allOutputs"]:
+ t.addOutput(c["ID"],c["path"])
+ return(t)
+
+def parseNodeGroup( str, loc, toks):
+ d={}
+ t = p.TreeElem(0)
+ if "message" in toks:
+ d["message"]=toks["message"]
+ if "class" in toks["desc"]:
+ d["class"] = toks["desc"]["class"]
+ if "folder" in toks["desc"]:
+ t.setPath(toks["desc"]["folder"])
+ d["deprecated"] = False
+ if(toks[0]=="disabled"):
+ d["deprecated"] = True
+
+ t.writeData(d)
+
+ #print(t.data["message"])
+ for c in toks["contained"]:
+ #print(" ",c.data["message"])
+ t.addGroup(c)
+ return(t)
+
+def parseTest( str, loc, toks):
+ d={}
+ if "message" in toks:
+ d["message"]=toks["message"]
+ if "class" in toks:
+ d["class"] = toks["class"]
+ d["deprecated"] = False
+ if(toks[0]=="disabled"):
+ d["deprecated"] = True
+ if "PARAMID" in toks:
+ d["PARAMID"] = toks["PARAMID"]
+ if "testData" in toks:
+ d["testData"]=toks["testData"]
+ t = p.TreeElem(0)
+ t.writeData(d)
+ return(t)
+
+def getInteger( str, loc, toks):
+ return(int(toks[0]))
+
+def parseFile( str, loc, toks):
+ d={}
+ d["ID"] = toks["ID"]
+ d["path"] = toks["path"]
+ return(d)
+
+def parseParamDesc( str, loc, toks):
+ d={}
+ d["ID"] = toks["ID"]
+ if "path" in toks:
+ d["path"] = toks["path"]
+ if "numberList" in toks:
+ d["numberList"] = toks["numberList"]
+ return(d)
+
+def parseParams( str, loc, toks):
+ p = Params()
+ p.full = toks["full"]
+ if "summary" in toks:
+ p.summary=toks["summary"]
+ if "names" in toks:
+ p.paramNames=[x.strip("\"") for x in toks["names"]]
+ if "formula" in toks:
+ p.formula=toks["formula"].strip("\"")
+ return(p)
+
+def generatorDesc( str, loc, toks):
+ d={}
+ r = list(toks["ints"])
+ d["NAME"] = toks["PARAM"]
+ d["INTS"] = r
+ return(d)
+
+def parseTestFields( str, loc, toks):
+ if "fields" in toks:
+ fields = toks["fields"]
+ # merge list of dictionnaries into a dictionnary
+ newFields = dict((key,d[key]) for d in fields for key in d)
+ return(newFields)
+
+def parseField( str, loc, toks):
+ if toks[0] == "oldID":
+ return({"oldID" : int(toks[2])})
+ if toks[0] == "truc":
+ return({"truc" : int(toks[2])})
+
+class Parser:
+ def __init__(self):
+ self.id = 0
+
+ def parse(self, filePath):
+ string = Word(alphanums+"_ =+")
+ ident = Word( alphas+"_", alphanums+"_" )
+
+ path = Word(alphanums+"_/.")
+
+ folder = CaselessKeyword("folder") + "=" + path("folder")
+
+ nodeDesc = CaselessKeyword("class") + "=" + ident("class") + Optional(folder)
+ nodeDesc = nodeDesc.setParseAction(parsedNodeDesc)
+
+ patterns = (Keyword("Pattern") + ident("ID") + ":" + path("path")).setParseAction(parseFile)
+ output = (Keyword("Output") + ident("ID") + ":" + path("path")).setParseAction(parseFile)
+
+ integer = Combine( Optional(Word("+-")) + Word(nums) ).setParseAction(getInteger)
+ numberList = (ident("PARAM") + Literal("=") + "[" + delimitedList(integer,",")("ints") + "]").setParseAction(generatorDesc)
+ generator = Literal("=") + "{" + OneOrMore(numberList)("numberList") + "}"
+ fileOrGenerator = (":" + path("path")) | generator
+ params = (Keyword("Params") + ident("ID") + fileOrGenerator).setParseAction(parseParamDesc)
+
+ paramValue = Literal("->") + ident("PARAMID")
+
+ message = string("message")
+
+ testField = ((Keyword("oldID") + "=" + integer("INT")) | (Keyword("truc") + "=" + integer("INT"))).setParseAction(parseField)
+ testData = (Literal("{") + OneOrMore(testField)("fields") + Literal("}")).setParseAction(parseTestFields)
+ test = disabled((string("message") + ":" + ident("class") + Optional(testData("testData")) + Optional(paramValue))).setParseAction(parseTest)
+
+ # paramDescription =
+ # File or
+ # List of int or
+ # Cartesian products of list
+ # Can be applied to global pattern
+ # or on a per test basis
+ paramDescription = ""
+
+ full = delimitedList(ident,",")
+ formula = Keyword("Formula") + dblQuotedString("formula")
+ paramNames = Keyword("Names") + delimitedList(dblQuotedString,",")("names")
+ summary = Keyword("Summary") + delimitedList(ident,",")("summary")
+
+ paramDetails = full("full") + Optional(summary) + Optional(paramNames)+ Optional(formula)
+
+ paramDesc=Keyword("ParamList") + Literal("{") + paramDetails + Literal("}")
+
+ allTests = Keyword("Functions") + "{" + OneOrMore(test)("allTests") + "}" + Optional(paramValue)
+
+ allPatterns = ZeroOrMore(patterns)
+ allOutputs = ZeroOrMore(output)
+ allParams = ZeroOrMore(params)
+ paramList = Optional(paramDesc("params").setParseAction(parseParams))
+
+ suiteDesc = paramList + allPatterns("allPatterns") + allOutputs("allOutputs") + allParams("allParams") + allTests
+
+ suite = disabled(CaselessKeyword("suite") + message + Literal("{") + nodeDesc("desc") + suiteDesc + Literal("}"))
+ suite = suite.setParseAction(parseNodeSuite)
+
+
+ group = Forward()
+ contained = OneOrMore(group | suite)
+
+
+ group << disabled(CaselessKeyword("group") + message + Literal("{") + nodeDesc("desc") + contained("contained") + Literal("}"))
+ group=group.ignore(cStyleComment | ("//" + restOfLine ))
+ group = group.setParseAction(parseNodeGroup)
+
+
+ tree = group.parseFile( filePath )
+ tree[0].classify()
+ # We compute ID of all nodes.
+ tree[0].computeId()
+ tree[0].reident(0)
+ return(tree[0])
diff --git a/CMSIS/DSP/Testing/TestScripts/Parser.py b/CMSIS/DSP/Testing/TestScripts/Parser.py
new file mode 100644
index 0000000..7760ddb
--- /dev/null
+++ b/CMSIS/DSP/Testing/TestScripts/Parser.py
@@ -0,0 +1,351 @@
+import re
+import os
+
+class TreeElem:
+ """ Result of the parsing of the test description.
+
+ It is a tree of objects describing the groups, suites and tests
+
+ Attributes:
+ kind (int) : Node kind
+ ident (int) : Indentation level in the test description.
+ It is used to format output of test results
+ parent (TreeElem) : parent of this node
+ id (int) : Node id
+ patterns (list) : List of pairs
+ Each pair is a pattern ID and pattern path
+ outputs (list) : List of pairs
+ Each pair is an output ID and an output path
+
+ """
+
+ TEST = 1
+ SUITE = 2
+ GROUP = 3
+
+ PARAMFILE = 1
+ PARAMGEN = 2
+
+ def __init__(self,ident):
+ self.kind=TreeElem.TEST
+ self.ident = ident
+ self._children = []
+ self.parent = None
+ self._data = None
+ self.id = 1
+ self._path=""
+ self.patterns=[]
+ self.outputs=[]
+ # List of parameters files
+ self.parameters=[]
+ # List of arguments
+ self.params = None
+
+ def __str__(self):
+ """ Convert the TreeElem into a string for debug purpose
+ """
+ if self.kind == TreeElem.TEST:
+ g="Test"
+ if self.kind == TreeElem.SUITE:
+ g="Suite"
+ if self.kind == TreeElem.GROUP:
+ g="Group"
+ a = str("%s -> %s%s(%d)\n" % (g,' ' * self.ident, str(self.data),self.id))
+ if self.params:
+ a = a + str(self.params.full) + "\n" + str(self.params.summary) + "\n" + str(self.params.paramNames) + "\n"
+ for i in self._children:
+ a = a + str(i)
+ return(a)
+
+ def setData(self,data):
+ """ Set the data property of this node
+
+ Args:
+ data (list) : A list of fields for this node
+ The fields are parsed and a data dictionary is created
+ fpga (bool) : false in semihosting mode
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ d = {}
+
+ # A node OFF in the list is deprecated. It won't be included
+ # or executed in the final tests
+ # but it will be taken into account for ID generation
+ d["deprecated"] = False
+ # Text message to display to the user zhen displaying test result
+ # This text message is never used in any .txt,.cpp or .h
+ # generated. It is only for better display of the test
+ # results
+ d["message"] = data[0].strip()
+ # CPP class or function name to use
+ if len(data) > 1:
+ d["class"] = data[1].strip()
+ if len(data) == 3:
+ if data[2].strip() == "OFF":
+ d["deprecated"] = True
+ else:
+ self._path = data[2].strip()
+ # New path for this node (when we want a new subfolder
+ # for the patterns or output of a group of suite)
+ if len(data) == 4:
+ self._path = data[3].strip()
+
+ self._data = d
+
+ @property
+ def data(self):
+ return(self._data)
+
+ def writeData(self,d):
+ self._data=d
+
+ def setPath(self,p):
+ self._path=p
+
+ @property
+ def path(self):
+ return(self._path)
+
+ @property
+ def children(self):
+ return(self._children)
+
+ def _fullPath(self):
+ if self.parent:
+ return(os.path.join(self.parent._fullPath() , self.path))
+ else:
+ return("")
+
+ def fullPath(self):
+ return(os.path.normpath(self._fullPath()))
+
+ def categoryDesc(self):
+ if self.parent:
+ p = self.parent.categoryDesc()
+ if p and self.path:
+ return(p + ":" + self.path)
+ if p:
+ return(p)
+ if self.path:
+ return(self.path)
+ else:
+ return("")
+
+ def addGroup(self,g):
+ """ Add a group to this node
+
+ Args:
+ g (TreeElem) : group to add
+ Raises:
+ Nothing
+ Returns:
+ Nothing
+ """
+ g.parent = self
+ self._children.append(g)
+
+ def classify(self):
+ """ Compute the node kind recursively
+
+ Node kind is infered from the tree structure and not present
+ in the test description.
+ A suite is basically a leaf of the tree and only contain tests.
+ A group is containing a suite or another group.
+
+ """
+ r = TreeElem.TEST
+ for c in self._children:
+ c.classify()
+
+
+ for c in self._children:
+ if c.kind == TreeElem.TEST and r != TreeElem.GROUP:
+ r = TreeElem.SUITE
+ if c.kind == TreeElem.SUITE:
+ r = TreeElem.GROUP
+ if c.kind == TreeElem.GROUP:
+ r = TreeElem.GROUP
+ self.kind = r
+
+ def computeId(self):
+ """ Compute the node ID and the node param ID
+ """
+ i = 1
+ for c in self._children:
+ c.id = i
+ if not "PARAMID" in c.data and "PARAMID" in self.data:
+ c.data["PARAMID"] = self.data["PARAMID"]
+ c.computeId()
+ i = i + 1
+
+ self.parameterToID={}
+ # PARAM ID is starting at 0
+ paramId=0
+ if self.parameters:
+ for (paramKind,pID,pPath) in self.parameters:
+ self.parameterToID[pID]=paramId
+ paramId = paramId + 1
+
+ def reident(self,current,d=2):
+ """ Recompute identation lebel
+ """
+ self.ident=current
+ for c in self._children:
+ c.reident(current+d)
+
+ def findIdentParent(self,newIdent):
+ """ Find parent of this node based on the new identation level
+
+ Find the node which is the parent of this node with indentation level
+ newIdent.
+
+ Args:
+ newIdent (int) : identation of a new node read in the descriptino file
+
+ """
+ if self.ident < newIdent:
+ return(self)
+ else:
+ return(self.parent.findIdentParent(newIdent))
+
+
+ def __getitem__(self, i):
+ return(self._children[i])
+
+ def __iter__(self):
+ self._currentPos = 0
+ return(self)
+
+ def __next__(self):
+ oldPos = self._currentPos
+ self._currentPos = self._currentPos + 1
+ if (oldPos >= len(self._children)):
+ raise StopIteration
+ return(self._children[oldPos])
+
+ def addPattern(self,theId,thePath):
+ """ Add a new pattern
+
+ Args:
+ theId (int) : pattern ID
+ thePath (str) : pattern path
+
+ """
+ self.patterns.append((theId,thePath))
+ #print(thePath)
+ #print(self.patterns)
+
+ def addParam(self,paramKind,theId,theData):
+ """ Add a new parameter file
+
+ Args:
+ paramKind (int) : parameter kind (path or generator)
+ theId (int) : parameter ID
+ thePath (str or list) : parameter path or generator data
+
+ """
+ self.parameters.append((paramKind,theId,theData))
+ #print(thePath)
+ #print(self.patterns)
+
+ def addOutput(self,theId,thePath):
+ """ Add a new output
+
+ Args:
+ theId (int) : output ID
+ thePath (str) : output path
+
+ """
+ self.outputs.append((theId,thePath))
+
+ def parse(self,filePath):
+ """ Parser the test description file
+
+ Args:
+ filePath (str) : Path to the description file
+ """
+ root = None
+ current = None
+ with open(filePath,"r") as ins:
+ for line in ins:
+ # Compute identation level
+ identLevel = 0
+ if re.match(r'^([ \t]+)[^ \t].*$',line):
+ leftSpaces=re.sub(r'^([ \t]+)[^ \t].*$',r'\1',line.rstrip())
+ #print("-%s-" % leftSpaces)
+ identLevel = len(leftSpaces)
+ # Remove comments
+ line = re.sub(r'^(.*)//.*$',r'\1',line).rstrip()
+ # If line is not just a comment
+ if line:
+ regPat = r'^[ \t]+Pattern[ \t]+([a-zA-Z0-9_]+)[ \t]*:[ \t]*(.+)$'
+ regOutput = r'^[ \t]+Output[ \t]+([a-zA-Z0-9_]+)[ \t]*:[ \t]*(.+)$'
+ # If a pattern line is detected, we record it
+ if re.match(regPat,line):
+ m = re.match(regPat,line)
+ patternID = m.group(1).strip()
+ patternPath = m.group(2).strip()
+ #print(patternID)
+ #print(patternPath)
+ if identLevel > current.ident:
+ current.addPattern(patternID,patternPath)
+ # If an output line is detected, we record it
+ elif re.match(regOutput,line):
+ m = re.match(regOutput,line)
+ outputID = m.group(1).strip()
+ outputPath = m.group(2).strip()
+ #print(patternID)
+ #print(patternPath)
+ if identLevel > current.ident:
+ current.addOutput(outputID,outputPath)
+ else:
+ #if current is None:
+ # print(" -> %d" % (identLevel))
+ #else:
+ # print("%d -> %d" % (current.ident,identLevel))
+ # Separate line into components
+ data = line.split(':')
+ # Remove empty strings
+ data = [item for item in data if item]
+ # If it is the first node we detect, it is the root node
+ if root is None:
+ root = TreeElem(identLevel)
+ root.setData(data)
+ current = root
+ else:
+ # We analyse and set the data
+ newItem = TreeElem(identLevel)
+ newItem.setData(data)
+ # New identation then it is a group (or suite)
+ if identLevel > current.ident:
+ #print( ">")
+ current.addGroup(newItem)
+ current = newItem
+ # Same identation, we add to parent
+ elif identLevel == current.ident:
+ #print( "==")
+ current.parent.addGroup(newItem)
+ else:
+ #print("<")
+ #print("--")
+ #print(identLevel)
+ # Smaller identation we need to find the parent where to
+ # attach this node.
+ current = current.findIdentParent(identLevel)
+ current.addGroup(newItem)
+ current = newItem
+
+ #print(identLevel)
+ #print(data)
+
+ # Identify suites, groups and tests
+ # Above we are just adding TreeElement but we don't yet know their
+ # kind. So we classify them to now if we have group, suite or test
+ root.classify()
+ # We compute ID of all nodes.
+ root.computeId()
+ return(root)
+
diff --git a/CMSIS/DSP/Testing/cmake_examples/create_cmake.bat b/CMSIS/DSP/Testing/cmake_examples/create_cmake.bat
new file mode 100644
index 0000000..eb0fc8b
--- /dev/null
+++ b/CMSIS/DSP/Testing/cmake_examples/create_cmake.bat
@@ -0,0 +1,27 @@
+cmake -DLOOPUNROLL=ON ^
+-DBASICMATH=ON ^
+-DCOMPLEXMATH=OFF ^
+-DCONTROLLER=OFF ^
+-DFASTMATH=OFF ^
+-DFILTERING=OFF ^
+-DMATRIX=OFF ^
+-DSTATISTICS=OFF ^
+-DSUPPORT=OFF ^
+-DTRANSFORM=OFF ^
+-DCONFIGTABLE=ON ^
+-DCONVOLUTION=OFF ^
+-DACTIVATION=OFF ^
+-DPOOLING=OFF ^
+-DSOFTMAX=OFF ^
+-DNEON=ON ^
+-DCMAKE_PREFIX_PATH="C:/PROGRA~1/ARM/DEVELO~1.0/sw/ARMCOM~1.12" ^
+-DCMAKE_TOOLCHAIN_FILE=../../armcc.cmake ^
+-DARM_CPU="cortex-a5" ^
+-DPLATFORM="FVP" ^
+-G "Unix Makefiles" ..
+
+REM cmake -DLOOPUNROLL=OFF ^
+REM -DCMAKE_TOOLCHAIN_FILE=../../armcc.cmake ^
+REM -DARM_CPU="cortex-a5" ^
+REM -DPLATFORM="FVP" ^
+REM -G "Unix Makefiles" ..
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/currentConfig.csv b/CMSIS/DSP/Testing/currentConfig.csv
new file mode 100644
index 0000000..0878d54
--- /dev/null
+++ b/CMSIS/DSP/Testing/currentConfig.csv
@@ -0,0 +1,2 @@
+OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION
+1,1,1,1,1,0,YaminFVP,ARMCM33_DSP_FP,AC6,6120001
diff --git a/CMSIS/DSP/Testing/desc.txt b/CMSIS/DSP/Testing/desc.txt
new file mode 100644
index 0000000..209c23a
--- /dev/null
+++ b/CMSIS/DSP/Testing/desc.txt
@@ -0,0 +1,329 @@
+group Root {
+ class = Root
+
+ group DSP Tests {
+ class = DSPTests
+ folder = DSP
+
+ group Basic Tests {
+ class = BasicTests
+ folder = BasicMaths
+
+ suite Basic Tests F32{
+ class = BasicTestsF32
+ folder = BasicMathsF32
+
+ Pattern INPUT1_F32_ID : Input1_f32.txt
+ Pattern INPUT2_F32_ID : Input2_f32.txt
+
+ Pattern REF_ADD_F32_ID : Reference1_f32.txt
+ Pattern REF_SUB_F32_ID : Reference2_f32.txt
+ Pattern REF_MULT_F32_ID : Reference3_f32.txt
+ Pattern REF_NEGATE_F32_ID : Reference4_f32.txt
+ Pattern REF_OFFSET_F32_ID : Reference5_f32.txt
+ Pattern REF_SCALE_F32_ID : Reference6_f32.txt
+ Pattern REF_DOT_3_F32_ID : Reference7_f32.txt
+ Pattern REF_DOT_4N_F32_ID : Reference8_f32.txt
+ Pattern REF_DOT_4N1_F32_ID : Reference9_f32.txt
+ Pattern REF_ABS_F32_ID : Reference10_f32.txt
+
+ Output OUT_SAMPLES_F32_ID : Output
+ Output OUT_STATE_F32_ID : State
+
+ Functions {
+ Test nb=3 arm_add_f32:test_add_f32
+ Test nb=4n arm_add_f32:test_add_f32
+ Test nb=4n+1 arm_add_f32:test_add_f32
+
+ Test nb=3 arm_sub_f32:test_sub_f32
+ Test nb=4n arm_sub_f32:test_sub_f32
+ Test nb=4n+1 arm_sub_f32:test_sub_f32
+
+ Test nb=3 arm_mult_f32:test_mult_f32
+ Test nb=4n arm_mult_f32:test_mult_f32
+ Test nb=4n+1 arm_mult_f32:test_mult_f32
+
+ Test nb=3 arm_negate_f32:test_negate_f32
+ Test nb=4n arm_negate_f32:test_negate_f32
+ Test nb=4n+1 arm_negate_f32:test_negate_f32
+
+ Test nb=3 arm_offset_f32:test_offset_f32
+ Test nb=4n arm_offset_f32:test_offset_f32
+ Test nb=4n+1 arm_offset_f32:test_offset_f32
+
+ Test nb=3 arm_scale_f32:test_scale_f32
+ Test nb=4n arm_scale_f32:test_scale_f32
+ Test nb=4n+1 arm_scale_f32:test_scale_f32
+
+ Test nb=3 arm_dot_prod_f32:test_dot_prod_f32
+ Test nb=4n arm_dot_prod_f32:test_dot_prod_f32
+ Test nb=4n+1 arm_dot_prod_f32:test_dot_prod_f32
+
+ Test nb=3 arm_abs_f32:test_abs_f32
+ Test nb=4n arm_abs_f32:test_abs_f32
+ Test nb=4n+1 arm_abs_f32:test_abs_f32
+ }
+ }
+ }
+ }
+
+ group DSP Benchmarks {
+ class = DSPBenchmarks
+ folder = DSP
+
+ group Basic Maths Benchmarks {
+ class = BasicBenchmarks
+ folder = BasicMaths
+
+ suite BasicMaths Benchmarks F32 {
+ class = BasicMathsBenchmarksF32
+ folder = BasicMathsF32
+
+ ParamList {
+ NB
+ Summary NB
+ Names "NB Samples"
+ Formula "NB"
+ }
+
+ Pattern INPUT1_F32_ID : Input1_f32.txt
+ Pattern INPUT2_F32_ID : Input2_f32.txt
+ Output OUT_SAMPLES_F32_ID : Output
+ Params PARAM1_ID = {
+ A = [16,32,64,128,256]
+ }
+
+ Functions {
+ vec_mult_f32:vec_mult_f32
+ vec_add_f32:vec_add_f32
+ vec_sub_f32:vec_sub_f32
+ vec_abs_f32:vec_abs_f32
+ vec_negate_f32:vec_negate_f32
+ vec_offset_f32:vec_offset_f32
+ vec_scale_f32:vec_scale_f32
+ vec_dot_f32:vec_dot_f32
+ } -> PARAM1_ID
+ }
+
+ suite BasicMaths Benchmarks Q31 {
+ class = BasicMathsBenchmarksQ31
+ folder = BasicMathsQ31
+
+ ParamList {
+ NB
+ Summary NB
+ Names "NB Samples"
+ Formula "NB"
+ }
+
+ Pattern INPUT1_Q31_ID : Input1_q31.txt
+ Pattern INPUT2_Q31_ID : Input2_q31.txt
+ Output OUT_SAMPLES_Q31_ID : Output
+ Params PARAM1_ID = {
+ A = [16,32,64,128,256]
+ }
+
+ Functions {
+ vec_mult_q31:vec_mult_q31
+ vec_add_q31:vec_add_q31
+ vec_sub_q31:vec_sub_q31
+ vec_abs_q31:vec_abs_q31
+ vec_negate_q31:vec_negate_q31
+ vec_offset_q31:vec_offset_q31
+ vec_scale_q31:vec_scale_q31
+ vec_dot_q31:vec_dot_q31
+ } -> PARAM1_ID
+ }
+ }
+ }
+
+ group NN Tests
+ {
+ class = NNTests
+ folder = NN
+
+ suite Fully Connected {
+ class = FullyConnected
+ folder = FullyConnected
+
+ // TestCase_[nbBatches]_[colDim]_[rowDim]_xxx_[testNb].txt
+ // 1
+ Pattern INPUT1_S8_ID : TestCase_1_10_4_input_1.txt
+ Pattern BIAS1_S8_ID : TestCase_1_10_4_bias_1.txt
+ Pattern WEIGHT1_S8_ID : TestCase_1_10_4_weights_1.txt
+ Pattern REF1_S8_ID : TestCase_1_10_4_output_1.txt
+
+ // 2
+ Pattern INPUT19_S8_ID : TestCase_1_8_9_input_2.txt
+ Pattern BIAS19_S8_ID : TestCase_1_8_9_bias_2.txt
+ Pattern WEIGHT19_S8_ID : TestCase_1_8_9_weights_2.txt
+ Pattern REF19_S8_ID : TestCase_1_8_9_output_2.txt
+
+ // 3
+ Pattern INPUT2_S8_ID : TestCase_1_10_4_input_3.txt
+ Pattern BIAS2_S8_ID : TestCase_1_10_4_bias_3.txt
+ Pattern WEIGHT2_S8_ID : TestCase_1_10_4_weights_3.txt
+ Pattern REF2_S8_ID : TestCase_1_10_4_output_3.txt
+
+ // 4
+ Pattern INPUT3_S8_ID : TestCase_1_9_1_input_4.txt
+ Pattern BIAS3_S8_ID : TestCase_1_9_1_bias_4.txt
+ Pattern WEIGHT3_S8_ID : TestCase_1_9_1_weights_4.txt
+ Pattern REF3_S8_ID : TestCase_1_9_1_output_4.txt
+
+ // 5
+ Pattern INPUT4_S8_ID : TestCase_1_8_8_input_5.txt
+ Pattern BIAS4_S8_ID : TestCase_1_8_8_bias_5.txt
+ Pattern WEIGHT4_S8_ID : TestCase_1_8_8_weights_5.txt
+ Pattern REF4_S8_ID : TestCase_1_8_8_output_5.txt
+
+ // 6
+ Pattern INPUT5_S8_ID : TestCase_9_6_1_input_6.txt
+ Pattern BIAS5_S8_ID : TestCase_9_6_1_bias_6.txt
+ Pattern WEIGHT5_S8_ID : TestCase_9_6_1_weights_6.txt
+ Pattern REF5_S8_ID : TestCase_9_6_1_output_6.txt
+
+ // 7
+ Pattern INPUT6_S8_ID : TestCase_8_8_1_input_7.txt
+ Pattern BIAS6_S8_ID : TestCase_8_8_1_bias_7.txt
+ Pattern WEIGHT6_S8_ID : TestCase_8_8_1_weights_7.txt
+ Pattern REF6_S8_ID : TestCase_8_8_1_output_7.txt
+
+ // 8
+ Pattern INPUT7_S8_ID : TestCase_4_10_1_input_8.txt
+ Pattern BIAS7_S8_ID : TestCase_4_10_1_bias_8.txt
+ Pattern WEIGHT7_S8_ID : TestCase_4_10_1_weights_8.txt
+ Pattern REF7_S8_ID : TestCase_4_10_1_output_8.txt
+
+ // 9
+ Pattern INPUT8_S8_ID : TestCase_9_6_1_input_9.txt
+ Pattern BIAS8_S8_ID : TestCase_9_6_1_bias_9.txt
+ Pattern WEIGHT8_S8_ID : TestCase_9_6_1_weights_9.txt
+ Pattern REF8_S8_ID : TestCase_9_6_1_output_9.txt
+
+ // 10
+ Pattern INPUT9_S8_ID : TestCase_4_10_1_input_10.txt
+ Pattern BIAS9_S8_ID : TestCase_4_10_1_bias_10.txt
+ Pattern WEIGHT9_S8_ID : TestCase_4_10_1_weights_10.txt
+ Pattern REF9_S8_ID : TestCase_4_10_1_output_10.txt
+
+ // 11
+ Pattern INPUT10_S8_ID : TestCase_8_8_1_input_11.txt
+ Pattern BIAS10_S8_ID : TestCase_8_8_1_bias_11.txt
+ Pattern WEIGHT10_S8_ID : TestCase_8_8_1_weights_11.txt
+ Pattern REF10_S8_ID : TestCase_8_8_1_output_11.txt
+
+ // 12
+ Pattern INPUT11_S8_ID : TestCase_9_8_4_input_12.txt
+ Pattern BIAS11_S8_ID : TestCase_9_8_4_bias_12.txt
+ Pattern WEIGHT11_S8_ID : TestCase_9_8_4_weights_12.txt
+ Pattern REF11_S8_ID : TestCase_9_8_4_output_12.txt
+
+ // 13
+ Pattern INPUT12_S8_ID : TestCase_8_8_5_input_13.txt
+ Pattern BIAS12_S8_ID : TestCase_8_8_5_bias_13.txt
+ Pattern WEIGHT12_S8_ID : TestCase_8_8_5_weights_13.txt
+ Pattern REF12_S8_ID : TestCase_8_8_5_output_13.txt
+
+ // 14
+ Pattern INPUT13_S8_ID : TestCase_4_7_3_input_14.txt
+ Pattern BIAS13_S8_ID : TestCase_4_7_3_bias_14.txt
+ Pattern WEIGHT13_S8_ID : TestCase_4_7_3_weights_14.txt
+ Pattern REF13_S8_ID : TestCase_4_7_3_output_14.txt
+
+ // 15
+ Pattern INPUT14_S8_ID : TestCase_8_7_4_input_15.txt
+ Pattern BIAS14_S8_ID : TestCase_8_7_4_bias_15.txt
+ Pattern WEIGHT14_S8_ID : TestCase_8_7_4_weights_15.txt
+ Pattern REF14_S8_ID : TestCase_8_7_4_output_15.txt
+
+ Output OUTPUT1_S8_ID : Output1
+ Output TEMP1_S16_ID : Temp1
+ Output OUTPUT19_S8_ID : Output19
+ Output TEMP19_S16_ID : Temp19
+ Output OUTPUT2_S8_ID : Output2
+ Output TEMP2_S16_ID : Temp2
+ Output OUTPUT3_S8_ID : Output3
+ Output TEMP3_S16_ID : Temp3
+ Output OUTPUT4_S8_ID : Output4
+ Output TEMP4_S16_ID : Temp4
+ Output OUTPUT5_S8_ID : Output5
+ Output TEMP5_S16_ID : Temp5
+ Output OUTPUT6_S8_ID : Output6
+ Output TEMP6_S16_ID : Temp6
+ Output OUTPUT7_S8_ID : Output7
+ Output TEMP7_S16_ID : Temp7
+ Output OUTPUT8_S8_ID : Output8
+ Output TEMP8_S16_ID : Temp8
+ Output OUTPUT9_S8_ID : Output9
+ Output TEMP9_S16_ID : Temp9
+ Output OUTPUT10_S8_ID : Output10
+ Output TEMP10_S16_ID : Temp10
+
+ Output OUTPUT11_S8_ID : Output11
+ Output TEMP11_S16_ID : Temp11
+
+ Output OUTPUT12_S8_ID : Output12
+ Output TEMP12_S16_ID : Temp12
+
+ Output OUTPUT13_S8_ID : Output13
+ Output TEMP13_S16_ID : Temp13
+
+ Output OUTPUT14_S8_ID : Output14
+ Output TEMP14_S16_ID : Temp14
+
+ Functions {
+ fully_connected_tflite_s8 test1:test_fully_connected_tflite_s8
+ fully_connected_tflite_s8 test19:test_fully_connected_tflite_s8
+ fully_connected_tflite_s8 test5:test_fully_connected_tflite_s8
+ fully_connected_tflite_s8 test6:test_fully_connected_tflite_s8
+ fully_connected_tflite_s8 test7:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test9:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test5:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test4:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test9B:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test4B:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test5B:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test_4_9:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test_5_8:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test_3_4:test_fully_connected_tflite_s8
+ matmul_tflite_s8 test_4_8:test_fully_connected_tflite_s8
+ }
+ }
+ }
+
+ group NN Benchmarks
+ {
+ class = NNBenchmarks
+ folder = NN
+
+ suite Fully Connected Benchmarks {
+ class = FullyConnectedBench
+ folder = FullyConnected
+
+ ParamList {
+ REPEAT
+ Summary REPEAT
+ Names "Repetition"
+ Formula "REPEAT"
+ }
+
+ Pattern INPUT1_S8_ID : TestCase_1_input.txt
+ Pattern BIAS_S8_ID : TestCase_1_bias.txt
+ Pattern WEIGHT_S8_ID : TestCase_1_weights_1.txt
+
+ Pattern REF1_S8_ID : TestCase_1_output_1.txt
+
+ Output OUTPUT1_S8_ID : Output
+ Output TEMP1_S16_ID : Temp1
+
+ Params PARAM1_ID = {
+ NB = [10,20,100,200]
+ }
+
+ Functions {
+ arm_fully_connected_tflite_s8:test_fully_connected_tflite_s8 -> PARAM1_ID
+ }
+ }
+ }
+}
diff --git a/CMSIS/DSP/Testing/main.cpp b/CMSIS/DSP/Testing/main.cpp
new file mode 100644
index 0000000..ece7321
--- /dev/null
+++ b/CMSIS/DSP/Testing/main.cpp
@@ -0,0 +1,6 @@
+extern int testmain();
+
+int main()
+{
+ return(testmain());
+}
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/processResult.py b/CMSIS/DSP/Testing/processResult.py
new file mode 100644
index 0000000..d186eb6
--- /dev/null
+++ b/CMSIS/DSP/Testing/processResult.py
@@ -0,0 +1,419 @@
+# Process the test results
+# Test status (like passed, or failed with error code)
+
+import argparse
+import re
+import TestScripts.NewParser as parse
+import TestScripts.CodeGen
+from collections import deque
+import os.path
+import csv
+
+def findItem(root,path):
+ """ Find a node in a tree
+
+ Args:
+ path (list) : A list of node ID
+ This list is describing a path in the tree.
+ By starting from the root and following this path,
+ we can find the node in the tree.
+ Raises:
+ Nothing
+ Returns:
+ TreeItem : A node
+ """
+ # The list is converted into a queue.
+ q = deque(path)
+ q.popleft()
+ c = root
+ while q:
+ n = q.popleft()
+ # We get the children based on its ID and continue
+ c = c[n-1]
+ return(c)
+
+def joinit(iterable, delimiter):
+ # Intersperse a delimiter between element of a list
+ it = iter(iterable)
+ yield next(it)
+ for x in it:
+ yield delimiter
+ yield x
+
+# Return test result as a text tree
+class TextFormatter:
+ def start(self):
+ None
+
+ def printGroup(self,elem,theId):
+ if elem is None:
+ elem = root
+ message=elem.data["message"]
+ if not elem.data["deprecated"]:
+ kind = "Suite"
+ ident = " " * elem.ident
+ if elem.kind == TestScripts.Parser.TreeElem.GROUP:
+ kind = "Group"
+ #print(elem.path)
+ print("%s%s : %s (%d)" % (ident,kind,message,theId))
+
+ def printTest(self,elem, theId, theError,theLine,passed,cycles,params):
+ message=elem.data["message"]
+ if not elem.data["deprecated"]:
+ kind = "Test"
+ ident = " " * elem.ident
+ p="FAILED"
+ if passed == 1:
+ p="PASSED"
+ print("%s%s (%d) : %s (cycles = %d)" % (ident,message,theId,p,cycles))
+ if params:
+ print("%s %s" % (ident,params))
+ if passed != 1:
+ print("%s Error = %d at line %d" % (ident, theError, theLine))
+
+ def pop(self):
+ None
+
+ def end(self):
+ None
+
+# Return test result as a CSV
+class CSVFormatter:
+
+ def __init__(self):
+ self.name=[]
+ self._start=True
+
+ def start(self):
+ print("CATEGORY,NAME,ID,STATUS,CYCLES,PARAMS")
+
+ def printGroup(self,elem,theId):
+ if elem is None:
+ elem = root
+ # Remove Root from category name in CSV file.
+ if not self._start:
+ self.name.append(elem.data["class"])
+ else:
+ self._start=False
+ message=elem.data["message"]
+ if not elem.data["deprecated"]:
+ kind = "Suite"
+ ident = " " * elem.ident
+ if elem.kind == TestScripts.Parser.TreeElem.GROUP:
+ kind = "Group"
+
+ def printTest(self,elem, theId, theError, theLine,passed,cycles,params):
+ message=elem.data["message"]
+ if not elem.data["deprecated"]:
+ kind = "Test"
+ name=elem.data["class"]
+ category= "".join(list(joinit(self.name,":")))
+ print("%s,%s,%d,%d,%d,\"%s\"" % (category,name,theId,passed,cycles,params))
+
+ def pop(self):
+ if self.name:
+ self.name.pop()
+
+ def end(self):
+ None
+
+class MathematicaFormatter:
+
+ def __init__(self):
+ self._hasContent=[False]
+ self._toPop=[]
+
+ def start(self):
+ None
+
+ def printGroup(self,elem,theId):
+ if self._hasContent[len(self._hasContent)-1]:
+ print(",",end="")
+
+ print("<|")
+ self._hasContent[len(self._hasContent)-1] = True
+ self._hasContent.append(False)
+ if elem is None:
+ elem = root
+ message=elem.data["message"]
+ if not elem.data["deprecated"]:
+
+ kind = "Suite"
+ ident = " " * elem.ident
+ if elem.kind == TestScripts.Parser.TreeElem.GROUP:
+ kind = "Group"
+ print("\"%s\" ->" % (message))
+ #if kind == "Suite":
+ print("{",end="")
+ self._toPop.append("}")
+ #else:
+ # self._toPop.append("")
+
+ def printTest(self,elem, theId, theError,theLine,passed,cycles,params):
+ message=elem.data["message"]
+ if not elem.data["deprecated"]:
+ kind = "Test"
+ ident = " " * elem.ident
+ p="FAILED"
+ if passed == 1:
+ p="PASSED"
+ parameters=""
+ if params:
+ parameters = "%s" % params
+ if self._hasContent[len(self._hasContent)-1]:
+ print(",",end="")
+ print("<|\"NAME\" -> \"%s\",\"ID\" -> %d,\"STATUS\" -> \"%s\",\"CYCLES\" -> %d,\"PARAMS\" -> \"%s\"|>" % (message,theId,p,cycles,parameters))
+ self._hasContent[len(self._hasContent)-1] = True
+ #if passed != 1:
+ # print("%s Error = %d at line %d" % (ident, theError, theLine))
+
+ def pop(self):
+ print(self._toPop.pop(),end="")
+ print("|>")
+ self._hasContent.pop()
+
+ def end(self):
+ None
+
+NORMAL = 1
+INTEST = 2
+TESTPARAM = 3
+
+def createMissingDir(destPath):
+ theDir=os.path.normpath(os.path.dirname(destPath))
+ if not os.path.exists(theDir):
+ os.makedirs(theDir)
+
+def correctPath(path):
+ while (path[0]=="/") or (path[0] == "\\"):
+ path = path[1:]
+ return(path)
+
+def extractDataFiles(results,outputDir):
+ infile = False
+ f = None
+ for l in results:
+ if re.match(r'^.*D:[ ].*$',l):
+ if infile:
+ if re.match(r'^.*D:[ ]END$',l):
+ infile = False
+ if f:
+ f.close()
+ else:
+ if f:
+ m = re.match(r'^.*D:[ ](.*)$',l)
+ data = m.group(1)
+ f.write(data)
+ f.write("\n")
+
+ else:
+ m = re.match(r'^.*D:[ ](.*)$',l)
+ path = str(m.group(1))
+ infile = True
+ destPath = os.path.join(outputDir,correctPath(path))
+ createMissingDir(destPath)
+ f = open(destPath,"w")
+
+
+
+def writeBenchmark(elem,benchFile,theId,theError,passed,cycles,params,config):
+ if benchFile:
+ name=elem.data["class"]
+ category= elem.categoryDesc()
+ benchFile.write("\"%s\",\"%s\",%d,%s,%d,%s\n" % (category,name,theId,params,cycles,config))
+
+def analyseResult(root,results,embedded,benchmark,formatter):
+ formatter.start()
+ path = []
+ state = NORMAL
+ prefix=""
+ elem=None
+ theId=None
+ theError=None
+ theLine=None
+ passed=0
+ cycles=None
+ benchFile = None
+ config=""
+ if embedded:
+ prefix = ".*S:[ ]"
+
+ # Parse the result file.
+ # NORMAL mode is when we are parsing suite or group.
+ # Otherwise we are parsing a test and we need to analyse the
+ # test result.
+ # TESTPARAM is used to read parameters of the test.
+ # Format of output is:
+ #node ident : s id or g id or t or u
+ #test status : id error linenb status Y or N (Y when passing)
+ #param for this test b x,x,x,x or b alone if not param
+ #node end : p
+ # In FPGA mode:
+ #Prefix S:[ ] before driver dump
+ # D:[ ] before data dump (output patterns)
+
+ for l in results:
+ l = l.strip()
+ if not re.match(r'^.*D:[ ].*$',l):
+ if state == NORMAL:
+ if len(l) > 0:
+ # Line starting with g or s is a suite or group.
+ # In FPGA mode, those line are prefixed with 'S: '
+ # and data file with 'D: '
+ if re.match(r'^%s[gs][ ]+[0-9]+.*$' % prefix,l):
+ # Extract the test id
+ theId=re.sub(r'^%s[gs][ ]+([0-9]+).*$' % prefix,r'\1',l)
+ theId=int(theId)
+ path.append(theId)
+ # From a list of id, find the TreeElem in the Parsed tree
+ # to know what is the node.
+ elem = findItem(root,path)
+ # Display formatted output for this node
+ if elem.params:
+ #print(elem.params.full)
+ benchPath = os.path.join(benchmark,elem.fullPath(),"fullBenchmark.csv")
+ createMissingDir(benchPath)
+ if benchFile:
+ printf("ERROR BENCH FILE %s ALREADY OPEN" % benchPath)
+ benchFile.close()
+ benchFile=None
+ benchFile=open(benchPath,"w")
+ header = "".join(list(joinit(elem.params.full,",")))
+ # A test and a benchmark are different
+ # so we don't dump a status and error
+ # A status and error in a benchmark would
+ # impact the cycles since the test
+ # would be taken into account in the measurement
+ # So benchmark are always passing and contain no test
+ #benchFile.write("ID,%s,PASSED,ERROR,CYCLES\n" % header)
+ csvheaders = ""
+
+ with open('currentConfig.csv', 'r') as f:
+ reader = csv.reader(f)
+ csvheaders = next(reader, None)
+ configList = list(reader)
+ #print(configList)
+ config = "".join(list(joinit(configList[0],",")))
+ configHeaders = "".join(list(joinit(csvheaders,",")))
+ benchFile.write("CATEGORY,NAME,ID,%s,CYCLES,%s\n" % (header,configHeaders))
+
+ formatter.printGroup(elem,theId)
+
+ # If we have detected a test, we switch to test mode
+ if re.match(r'^%s[t][ ]*$' % prefix,l):
+ state = INTEST
+
+
+ # Pop
+ # End of suite or group
+ if re.match(r'^%sp.*$' % prefix,l):
+ if benchFile:
+ benchFile.close()
+ benchFile=None
+ path.pop()
+ formatter.pop()
+ elif state == INTEST:
+ if len(l) > 0:
+ # In test mode, we are looking for test status.
+ # A line starting with S
+ # (There may be empty lines or line for data files)
+ passRe = r'^%s([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)[ ]+([YN]).*$' % prefix
+ if re.match(passRe,l):
+ # If we have found a test status then we will start again
+ # in normal mode after this.
+
+ m = re.match(passRe,l)
+
+ # Extract test ID, test error code, line number and status
+ theId=m.group(1)
+ theId=int(theId)
+
+ theError=m.group(2)
+ theError=int(theError)
+
+ theLine=m.group(3)
+ theLine=int(theLine)
+
+ cycles = int(m.group(4))
+
+ status=m.group(5)
+ passed=0
+
+ # Convert status to number as used by formatter.
+ if status=="Y":
+ passed = 1
+ if status=="N":
+ passed = 0
+ # Compute path to this node
+ newPath=path.copy()
+ newPath.append(theId)
+ # Find the node in the Tree
+ elem = findItem(root,newPath)
+
+
+ state = TESTPARAM
+ else:
+ if re.match(r'^%sp.*$' % prefix,l):
+ if benchFile:
+ benchFile.close()
+ benchFile=None
+ path.pop()
+ formatter.pop()
+ if re.match(r'^%s[t][ ]*$' % prefix,l):
+ state = INTEST
+ else:
+ state = NORMAL
+ else:
+ if len(l) > 0:
+ state = INTEST
+ params=""
+ if re.match(r'^.*b[ ]+([0-9,]+)$',l):
+ m=re.match(r'^.*b[ ]+([0-9,]+)$',l)
+ params=m.group(1).strip()
+ # Format the node
+ #print(elem.fullPath())
+ #createMissingDir(destPath)
+ writeBenchmark(elem,benchFile,theId,theError,passed,cycles,params,config)
+ else:
+ params=""
+ writeBenchmark(elem,benchFile,theId,theError,passed,cycles,params,config)
+ # Format the node
+ formatter.printTest(elem,theId,theError,theLine,passed,cycles,params)
+
+
+ formatter.end()
+
+
+parser = argparse.ArgumentParser(description='Parse test description')
+
+parser.add_argument('-f', nargs='?',type = str, default=None, help="Test description file path")
+# Where the result file can be found
+parser.add_argument('-r', nargs='?',type = str, default=None, help="Result file path")
+parser.add_argument('-c', action='store_true', help="CSV output")
+parser.add_argument('-e', action='store_true', help="Embedded test")
+# -o needed when -e is true to know where to extract the output files
+parser.add_argument('-o', nargs='?',type = str, default="Output", help="Output dir path")
+
+parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path")
+parser.add_argument('-m', action='store_true', help="Mathematica output")
+
+args = parser.parse_args()
+
+if args.f is not None:
+ p = parse.Parser()
+ # Parse the test description file
+ root = p.parse(args.f)
+ with open(args.r,"r") as results:
+ if args.c:
+ analyseResult(root,results,args.e,args.b,CSVFormatter())
+ elif args.m:
+ analyseResult(root,results,args.e,args.b,MathematicaFormatter())
+ else:
+ analyseResult(root,results,args.e,args.b,TextFormatter())
+ if args.e:
+ # In FPGA mode, extract output files from stdout (result file)
+ with open(args.r,"r") as results:
+ extractDataFiles(results,args.o)
+
+else:
+ parser.print_help()
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/processTests.py b/CMSIS/DSP/Testing/processTests.py
new file mode 100644
index 0000000..d2caba8
--- /dev/null
+++ b/CMSIS/DSP/Testing/processTests.py
@@ -0,0 +1,73 @@
+import argparse
+import TestScripts.NewParser as parse
+import TestScripts.CodeGen
+from collections import deque
+
+# When deprecation is forced on some nodes
+# we ensure that a parent of a valid node is also valid
+def correctDeprecation(node):
+ current = node.data["deprecated"]
+ for c in node.children:
+ if not correctDeprecation(c):
+ current = False
+ node.data["deprecated"] = current
+ return(current)
+
+def deprecateRec(root,others,deprecated):
+ if others:
+ newOthers=others.copy()
+ newOthers.popleft()
+ if root.kind == TestScripts.Parser.TreeElem.TEST:
+ if others[0].isdigit() and int(root.id) == int(others[0]):
+ root.data["deprecated"]=False
+ for c in root.children:
+ deprecateRec(c,newOthers,False)
+ else:
+ root.data["deprecated"]=True
+ for c in root.children:
+ deprecateRec(c,others,deprecated)
+ else:
+ if root.data["class"] == others[0]:
+ root.data["deprecated"]=False
+ for c in root.children:
+ deprecateRec(c,newOthers,False)
+ else:
+ root.data["deprecated"]=deprecated
+ for c in root.children:
+ deprecateRec(c,others,deprecated)
+
+def deprecate(root,others):
+ if others:
+ deprecateRec(root,deque(others),True)
+ correctDeprecation(root)
+
+parser = argparse.ArgumentParser(description='Parse test description')
+parser.add_argument('-f', nargs='?',type = str, default="test.txt", help="File path")
+
+parser.add_argument('-p', nargs='?',type = str, default="Patterns", help="Pattern dir path")
+parser.add_argument('-d', nargs='?',type = str, default="Parameters", help="Parameter dir path")
+
+# -e true when no semihosting
+# Input is include files
+# Output is only one stdout
+# So the .h for include files need to be generated.
+parser.add_argument('-e', action='store_true', help="Embedded test")
+
+parser.add_argument('others', nargs=argparse.REMAINDER)
+
+args = parser.parse_args()
+
+
+if args.f is not None:
+ # Create a treeelemt object
+ p = parse.Parser()
+ # Create a codegen object
+ c = TestScripts.CodeGen.CodeGen(args.p,args.d, args.e)
+ # Parse the test description.
+ root = p.parse(args.f)
+ deprecate(root,args.others)
+ print(root)
+ # Generate code with the tree of tests
+ c.genCodeForTree(root)
+else:
+ parser.print_help()
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/results.nb b/CMSIS/DSP/Testing/results.nb
new file mode 100644
index 0000000..050e71b
--- /dev/null
+++ b/CMSIS/DSP/Testing/results.nb
@@ -0,0 +1,1831 @@
+(* Content-type: application/vnd.wolfram.mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 12.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[ 158, 7]
+NotebookDataLength[ 92374, 1823]
+NotebookOptionsPosition[ 91854, 1806]
+NotebookOutlinePosition[ 92198, 1821]
+CellTagsIndexPosition[ 92155, 1818]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[
+ RowBox[{
+ RowBox[{"m", "=",
+ RowBox[{"Dataset", "[",
+ RowBox[{
+ RowBox[{"Get", "[",
+ RowBox[{"FileNameJoin", "[",
+ RowBox[{"{",
+ RowBox[{
+ RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<test.txt\>\""}],
+ "}"}], "]"}], "]"}], "[", "\"\<Root \>\"", "]"}], "]"}]}],
+ ";"}]], "Input",
+ CellChangeTimes->{{3.7717360240194063`*^9, 3.771736045131504*^9}, {
+ 3.771736686569442*^9, 3.771736690261133*^9}, {3.7717512765989704`*^9,
+ 3.7717513417302694`*^9}, {3.771751417685506*^9, 3.7717514233643456`*^9}, {
+ 3.7719129941602864`*^9, 3.7719130089901433`*^9}, 3.7719133429206567`*^9},
+ CellLabel->"In[1]:=",ExpressionUUID->"a3ff6af3-d397-4a63-9a0c-239444d6be9a"],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"Column", "[",
+ RowBox[{"Table", "[",
+ RowBox[{
+ RowBox[{"m", "[",
+ RowBox[{"[", "i", "]"}], "]"}], ",",
+ RowBox[{"{",
+ RowBox[{"i", ",", "1", ",",
+ RowBox[{
+ RowBox[{"Dimensions", "[", "m", "]"}], "[",
+ RowBox[{"[", "1", "]"}], "]"}]}], "}"}]}], "]"}], "]"}]], "Input",
+ CellChangeTimes->{{3.771913348787628*^9, 3.771913473780173*^9}},
+ CellLabel->"In[14]:=",ExpressionUUID->"6cdbb696-26f9-45b5-88dc-77262be1f94d"],
+
+Cell[BoxData[
+ TagBox[GridBox[{
+ {
+ TemplateBox[{TagBox[
+ DynamicModuleBox[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$ =
+ Data`UnorderedAssociation[
+ "RowCount" -> 1, "Length" -> 1, "InitialType" -> TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+ TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+
+ TypeSystem`Struct[{
+ "NAME", "ID", "STATUS", "CYCLES", "PARAMS"}, {
+ TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType}],
+ TypeSystem`AnyLength], 1], 2], 1], "Shape" ->
+ TypeSystem`PackageScope`HeaderShape[
+ Association[{All, All, All, All,
+ TypeSystem`PackageScope`KeyDummy[22]} ->
+ 1, {All, All, All, All,
+ TypeSystem`PackageScope`KeyDummy[21]} ->
+ 1, {All, All, All, All, "NAME"} ->
+ 1, {All, All, All, All, "ID"} ->
+ 1, {All, All, All, All, "STATUS"} ->
+ 1, {All, All, All, All, "CYCLES"} ->
+ 1, {All, All, All, All, "PARAMS"} -> 1],
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`KeyValueShape[
+ TypeSystem`PackageScope`AtomShape[86.4],
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`KeyValueShape[
+ TypeSystem`PackageScope`AtomShape[134.40000000000003`],
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`RowShape[
+ Association[
+ "NAME" -> TypeSystem`PackageScope`UnknownShape, "ID" ->
+ TypeSystem`PackageScope`AtomShape[34], "STATUS" ->
+ TypeSystem`PackageScope`UnknownShape, "CYCLES" ->
+ TypeSystem`PackageScope`AtomShape[34], "PARAMS" ->
+ TypeSystem`PackageScope`UnknownShape]]], 3, {
+ All, All, All}]]], 1, {All, All}]], 2, {All}]]], 1, {}]],
+ "InitialData" -> TypeSystem`PackageScope`CacheHandle[884124392],
+ "Type" -> TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+ TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+
+ TypeSystem`Struct[{
+ "NAME", "ID", "STATUS", "CYCLES", "PARAMS"}, {
+ TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType}],
+ TypeSystem`AnyLength], 1], 2], 1], "HandleQ" -> True,
+ "RowTarget" -> 20, "Data" ->
+ TypeSystem`PackageScope`CacheHandle[884124392]],
+ TypeSystem`NestedGrid`PackagePrivate`$path$$ = {},
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$ = 1,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$ =
+ DynamicModule[{
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid = Deploy[
+ Style[
+ Grid[{{
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox["\"\"", FontColor -> GrayLevel[0.4]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}],
+ Style[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox[
+ "\"\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, Keys}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, Keys]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox["\"\"", FontColor -> GrayLevel[0.4]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}],
+ Style[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox[
+ "\"\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, Keys}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, Keys]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"NAME\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"NAME\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, "NAME"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, "NAME"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"ID\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"ID\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, "ID"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, "ID"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"STATUS\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"STATUS\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, "STATUS"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, "STATUS"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"CYCLES\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"CYCLES\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, "CYCLES"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, "CYCLES"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"PARAMS\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"PARAMS\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+ All, All, All, All, "PARAMS"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[All, All, All, All, "PARAMS"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}]}, {
+ Item[
+ Pane[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover["DSP Test ",
+ Style[
+ "DSP Test ", FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+
+ Key["DSP Test "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "]]], "Mouse"],
+ ImageSize -> {{86.4, Full}, Automatic}], Background ->
+ GrayLevel[0.95], Alignment -> {Left, Baseline}],
+ Item[
+ Pane[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover["Basic Tests ",
+ Style[
+ "Basic Tests ", FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+
+ Key["DSP Test "], 1,
+ Key["Basic Tests "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "]]], "Mouse"],
+ ImageSize -> {{134.40000000000003`, Full}, Automatic}],
+ Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["Test nb=3 arm_add_f32",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 1,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{230.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 1,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 1,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["604"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 1,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 1,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{0., Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Pane[
+ Annotation["Test nb=4n arm_add_f32",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 2,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{230.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["2"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 2,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 2,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["814"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 2,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 2,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{0., Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Pane[
+ Annotation["Test nb=4n+1 arm_add_f32",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 3,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{230.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["3"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 3,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 3,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["864"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 3,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "], 3,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{0., Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Superscript["24 total \:203a ", ""],
+ Style[
+ Superscript["24 total \:203a ", ""], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+
+ Key["DSP Test "], 1,
+ Key["Basic Tests "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 1,
+ Key["Basic Tests "]]], "Mouse"], BaseStyle -> {{
+ RGBColor[
+ 0.5098039215686274, 0.5098039215686274,
+ 0.5098039215686274], 8}, ContextMenu -> {
+ MenuItem["Show 1 more row at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#,
+ 1]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ MenuItem["Show 5 more rows at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#,
+ 5]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ Delimiter,
+ MenuItem["Show 1 fewer row at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#, -1]& \
+, {All, All, All}]], MenuEvaluator -> Automatic],
+ MenuItem["Show 5 fewer rows at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#, -5]& \
+, {All, All, All}]], MenuEvaluator -> Automatic]}},
+ Alignment -> {Left, Baseline}, Background ->
+ GrayLevel[0.98]], SpanFromLeft, SpanFromLeft,
+ SpanFromLeft, SpanFromLeft}, {SpanFromAbove,
+ Item[
+ Pane[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover["Complex Tests ",
+ Style[
+ "Complex Tests ", FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+
+ Key["DSP Test "], 2,
+ Key["Complex Tests "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "]]], "Mouse"],
+ ImageSize -> {{134.40000000000003`, Full}, Automatic}],
+ Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["Test A",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 1,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 1,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 1,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["229"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 1,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["1,1,1",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 1,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{48.00000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Pane[
+ Annotation["Test A",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 2,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 2,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 2,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["238"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 2,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["1,1,3",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 2,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{48.00000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Pane[
+ Annotation["Test A",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 3,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 3,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 3,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["257"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 3,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["1,1,5",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "], 3,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{48.00000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Superscript["54 total \:203a ", ""],
+ Style[
+ Superscript["54 total \:203a ", ""], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][{
+
+ Key["DSP Test "], 2,
+ Key["Complex Tests "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 976585783][
+ GeneralUtilities`Slice[
+ Key["DSP Test "], 2,
+ Key["Complex Tests "]]], "Mouse"], BaseStyle -> {{
+ RGBColor[
+ 0.5098039215686274, 0.5098039215686274,
+ 0.5098039215686274], 8}, ContextMenu -> {
+ MenuItem["Show 1 more row at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#,
+ 1]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ MenuItem["Show 5 more rows at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#,
+ 5]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ Delimiter,
+ MenuItem["Show 1 fewer row at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#, -1]& \
+, {All, All, All}]], MenuEvaluator -> Automatic],
+ MenuItem["Show 5 fewer rows at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#, -5]& \
+, {All, All, All}]], MenuEvaluator -> Automatic]}},
+ Alignment -> {Left, Baseline}, Background ->
+ GrayLevel[0.98]], SpanFromLeft, SpanFromLeft,
+ SpanFromLeft, SpanFromLeft}}, BaseStyle -> {ContextMenu -> {
+ MenuItem["Copy position to clipboard",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentPosition[
+ TypeSystem`NestedGrid`PackagePrivate`copyClip]],
+ MenuEvaluator -> Automatic],
+ MenuItem["Copy data to clipboard",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentData[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`copyClip]],
+ MenuEvaluator -> Automatic], Delimiter,
+ MenuItem["Paste position in new cell",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentPosition[
+ TypeSystem`NestedGrid`PackagePrivate`cellPaste]],
+ MenuEvaluator -> Automatic],
+ MenuItem["Paste data in new cell",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentData[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`cellPaste]],
+ MenuEvaluator -> Automatic]}, FontFamily -> "Verdana",
+ FontSize -> 12}, Alignment -> Left, RowMinHeight -> 1.5,
+ Dividers -> All, FrameStyle -> GrayLevel[0.85],
+ BaseStyle -> {FontFamily -> "Verdana", FontSize -> 12}],
+ LineBreakWithin -> False, ContextMenu -> {}, NumberMarks ->
+ False, ShowAutoStyles -> False]],
+ TypeSystem`NestedGrid`PackagePrivate`initialQ = True,
+ TypeSystem`NestedGrid`PackagePrivate`self = BoxObject[13889]},
+ Dynamic[
+ TypeSystem`NestedGrid`PackagePrivate`setupViewPath[
+ TypeSystem`NestedGrid`PackagePrivate`$path$$, If[
+ Not[TypeSystem`NestedGrid`PackagePrivate`initialQ],
+
+ Module[{
+ TypeSystem`NestedGrid`PackagePrivate`tmpGrid$ = $Failed,
+ TypeSystem`NestedGrid`PackagePrivate`tmpData$ =
+ TypeSystem`NestedGrid`PackagePrivate`LookupCacheValue[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$["Data"]]},
+ TypeSystem`NestedGrid`PackagePrivate`tmpGrid$ =
+ If[TypeSystem`NestedGrid`PackagePrivate`tmpData$ ===
+ TypeSystem`NestedGrid`PackagePrivate`$NotCached,
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid,
+ TypeSystem`NestedGrid`PackagePrivate`renderGrid[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783][
+ TypeSystem`NestedGrid`PackagePrivate`tmpData$]]; If[
+ Not[
+ FailureQ[TypeSystem`NestedGrid`PackagePrivate`tmpGrid$]],
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid =
+ TypeSystem`NestedGrid`PackagePrivate`tmpGrid$]; Null]];
+ TypeSystem`NestedGrid`PackagePrivate`initialQ = False;
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$; If[
+ FailureQ[TypeSystem`NestedGrid`PackagePrivate`renderedGrid],
+ TypeSystem`SparseGrid[
+ TypeSystem`H["(data no longer present)"]],
+ If[GeneralUtilities`$DebugMode,
+ Row[{TypeSystem`NestedGrid`PackagePrivate`renderedGrid, " ",
+ TypeSystem`NestedGrid`PackagePrivate`formatState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$]}],
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid]]],
+ TrackedSymbols :> {TypeSystem`NestedGrid`PackagePrivate`$pos$$}],
+ DynamicModuleValues :> {}],
+ TypeSystem`NestedGrid`PackagePrivate`$posCell$$,
+ TypeSystem`NestedGrid`PackagePrivate`$topBar$$ = Dynamic[
+ TypeSystem`NestedGrid`PackagePrivate`alignBar[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$][
+ TypeSystem`NestedGrid`PackagePrivate`makeFramedBar[
+ TypeSystem`PackageScope`Pathbar[
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 976585783]]]],
+ TrackedSymbols :> {TypeSystem`NestedGrid`PackagePrivate`$path$$}],
+ TypeSystem`NestedGrid`PackagePrivate`$bottomBar$$ = Framed[
+ Dynamic[
+ Replace[
+ MouseAnnotation[Null], {
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[976585783][
+ Null] -> "",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[976585783][
+ Pattern[TypeSystem`NestedGrid`PackagePrivate`path,
+ Blank[]]] :> (
+ TypeSystem`NestedGrid`PackagePrivate`$lastPath =
+ TypeSystem`NestedGrid`PackagePrivate`path;
+ TypeSystem`NestedGrid`PackagePrivate`makePathTrail[
+ TypeSystem`NestedGrid`PackagePrivate`path,
+ TypeSystem`NestedGrid`PackagePrivate`makePathElements]),
+ Null :> Spacer[10], Blank[] :> Spacer[10]}],
+ TrackedSymbols :> {}], FrameStyle -> None, ImageMargins -> 0,
+ FrameMargins -> 0, Alignment -> Top,
+ ImageSize -> {Automatic, 14}]},
+ DynamicBox[
+ ToBoxes[
+ Column[
+ If[TypeSystem`NestedGrid`PackagePrivate`$path$$ == {}, {
+ TypeSystem`NestedGrid`PackagePrivate`displayScrollBar[
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$],
+ TypeSystem`NestedGrid`PackagePrivate`onDesktopShow[
+ TypeSystem`NestedGrid`PackagePrivate`alignBar[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$][
+ TypeSystem`NestedGrid`PackagePrivate`$bottomBar$$]]}, {
+ TypeSystem`NestedGrid`PackagePrivate`$topBar$$,
+ TypeSystem`NestedGrid`PackagePrivate`displayScrollBar[
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$],
+ TypeSystem`NestedGrid`PackagePrivate`onDesktopShow[
+ TypeSystem`NestedGrid`PackagePrivate`alignBar[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$][
+ TypeSystem`NestedGrid`PackagePrivate`$bottomBar$$]]}],
+ Spacings ->
+ If[TypeSystem`NestedGrid`PackagePrivate`$path$$ == {},
+ 0, {{}, {0, 0.05, 0}}]], StandardForm],
+ ImageSizeCache -> {708., {116., 122.}},
+ TrackedSymbols :> {
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$}],
+ BaseStyle -> {LineBreakWithin -> False}, Deinitialization :>
+ TypeSystem`NestedGrid`PackagePrivate`deleteState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$],
+ DynamicModuleValues :> {}, Initialization :>
+ Block[{$ContextPath = $ContextPath},
+ Needs["TypeSystem`"]]], Deploy, DefaultBaseStyle -> "Deploy"]},
+ "CopyTag",
+ DisplayFunction->(#& ),
+ InterpretationFunction->("Dataset[<>]"& )]},
+ {
+ TemplateBox[{TagBox[
+ DynamicModuleBox[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$ =
+ Data`UnorderedAssociation[
+ "RowCount" -> 1, "Length" -> 1, "InitialType" -> TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+ TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+
+ TypeSystem`Struct[{
+ "NAME", "ID", "STATUS", "CYCLES", "PARAMS"}, {
+ TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType}],
+ TypeSystem`AnyLength], 1], 2], 1], "Shape" ->
+ TypeSystem`PackageScope`HeaderShape[
+ Association[{All, All, All, All,
+ TypeSystem`PackageScope`KeyDummy[20]} ->
+ 1, {All, All, All, All,
+ TypeSystem`PackageScope`KeyDummy[19]} ->
+ 1, {All, All, All, All, "NAME"} ->
+ 1, {All, All, All, All, "ID"} ->
+ 1, {All, All, All, All, "STATUS"} ->
+ 1, {All, All, All, All, "CYCLES"} ->
+ 1, {All, All, All, All, "PARAMS"} -> 1],
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`KeyValueShape[
+ TypeSystem`PackageScope`AtomShape[76.80000000000001],
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`KeyValueShape[
+ TypeSystem`PackageScope`AtomShape[259.20000000000005`],
+ TypeSystem`PackageScope`Limited[
+ TypeSystem`PackageScope`ColumnShape[
+ TypeSystem`PackageScope`RowShape[
+ Association[
+ "NAME" -> TypeSystem`PackageScope`UnknownShape, "ID" ->
+ TypeSystem`PackageScope`AtomShape[34], "STATUS" ->
+ TypeSystem`PackageScope`UnknownShape, "CYCLES" ->
+ TypeSystem`PackageScope`AtomShape[34], "PARAMS" ->
+ TypeSystem`PackageScope`UnknownShape]]], 3, {
+ All, All, All}]]], 1, {All, All}]], 2, {All}]]], 1, {}]],
+ "InitialData" -> TypeSystem`PackageScope`CacheHandle[682915723],
+ "Type" -> TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+ TypeSystem`Assoc[
+ TypeSystem`Atom[String],
+ TypeSystem`Vector[
+
+ TypeSystem`Struct[{
+ "NAME", "ID", "STATUS", "CYCLES", "PARAMS"}, {
+ TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType,
+ TypeSystem`Atom[Integer], TypeSystem`AnyType}],
+ TypeSystem`AnyLength], 1], 2], 1], "HandleQ" -> True,
+ "RowTarget" -> 20, "Data" ->
+ TypeSystem`PackageScope`CacheHandle[682915723]],
+ TypeSystem`NestedGrid`PackagePrivate`$path$$ = {},
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$ = 1,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$ =
+ DynamicModule[{
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid = Deploy[
+ Style[
+ Grid[{{
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox["\"\"", FontColor -> GrayLevel[0.4]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}],
+ Style[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox[
+ "\"\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, Keys}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, Keys]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox["\"\"", FontColor -> GrayLevel[0.4]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}],
+ Style[
+ Pane[
+ Style[
+ RawBoxes[
+ StyleBox[
+ "\"\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], Italic,
+ GrayLevel[0.7]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, Keys}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, Keys]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"NAME\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"NAME\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, "NAME"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, "NAME"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"ID\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"ID\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, "ID"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, "ID"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"STATUS\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"STATUS\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, "STATUS"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, "STATUS"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"CYCLES\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"CYCLES\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, "CYCLES"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, "CYCLES"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Pane[
+ RawBoxes[
+ StyleBox["\"PARAMS\"", FontColor -> GrayLevel[0.4]]], {{
+ 20, Full}, 15}],
+ Style[
+ Pane[
+ RawBoxes[
+ StyleBox[
+ "\"PARAMS\"", FontColor ->
+ RGBColor[0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], {{20, Full}, 15}], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ 1049895395][{All, All, All, All, "PARAMS"}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[All, All, All, All, "PARAMS"]],
+ "Mouse"], Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}]}, {
+ Item[
+ Pane[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover["NN Tests",
+ Style[
+ "NN Tests", FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395][{
+ Key["NN Tests"]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"]]], "Mouse"],
+ ImageSize -> {{76.80000000000001, Full}, Automatic}],
+ Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Item[
+ Pane[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover["Fully Connected ",
+ Style[
+ "Fully Connected ", FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395][{
+ Key["NN Tests"], 1,
+ Key["Fully Connected "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 1,
+ Key["Fully Connected "]]], "Mouse"],
+ ImageSize -> {{259.20000000000005`, Full}, Automatic}],
+ Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["arm_fully_connected_tflite_s8",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 1,
+ Key["Fully Connected "], 1,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{278.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 1,
+ Key["Fully Connected "], 1,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 1,
+ Key["Fully Connected "], 1,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1330"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 1,
+ Key["Fully Connected "], 1,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 1,
+ Key["Fully Connected "], 1,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{0., Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {SpanFromAbove,
+ Item[
+ Pane[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover["Fully Connected Benchmarks ",
+ Style[
+ "Fully Connected Benchmarks ", FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395][{
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "]]], "Mouse"],
+ ImageSize -> {{259.20000000000005`, Full}, Automatic}],
+ Background -> GrayLevel[0.95],
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["arm_fully_connected_tflite_s8",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 1,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{278.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 1,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 1,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["6415"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 1,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["10",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 1,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{19.200000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Pane[
+ Annotation["arm_fully_connected_tflite_s8",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 2,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{278.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 2,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 2,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["12445"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 2,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["20",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 2,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{19.200000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Pane[
+ Annotation["arm_fully_connected_tflite_s8",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 3,
+ Key["NAME"]]], "Mouse"],
+ ImageSize -> {{278.40000000000003`, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["1"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 3,
+ Key["ID"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["PASSED",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 3,
+ Key["STATUS"]]], "Mouse"],
+ ImageSize -> {{57.60000000000001, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation[
+ RawBoxes["60685"],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 3,
+ Key["CYCLES"]]], "Mouse"],
+ ImageSize -> {{34, Full}, Automatic},
+ Alignment -> {Left, Baseline}],
+ Pane[
+ Annotation["100",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "], 3,
+ Key["PARAMS"]]], "Mouse"],
+ ImageSize -> {{28.800000000000004`, Full}, Automatic},
+ Alignment -> {Left, Baseline}]}, {
+ SpanFromAbove, SpanFromAbove,
+ Item[
+ Annotation[
+ EventHandler[
+ MouseAppearance[
+ Mouseover[
+ Superscript["4 total \:203a ", ""],
+ Style[
+ Superscript["4 total \:203a ", ""], FontColor ->
+ RGBColor[
+ 0.27450980392156865`, 0.5372549019607843,
+ 0.792156862745098]]], "LinkHand"], {"MouseClicked", 1} :>
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395][{
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "]}]],
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[
+ 1049895395][
+ GeneralUtilities`Slice[
+ Key["NN Tests"], 2,
+ Key["Fully Connected Benchmarks "]]], "Mouse"],
+ BaseStyle -> {{
+ RGBColor[
+ 0.5098039215686274, 0.5098039215686274,
+ 0.5098039215686274], 8}, ContextMenu -> {
+ MenuItem["Show 1 more row at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#,
+ 1]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ MenuItem["Show 5 more rows at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#,
+ 5]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ Delimiter,
+ MenuItem["Show 1 fewer row at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#, \
+-1]& , {All, All, All}]], MenuEvaluator -> Automatic],
+ MenuItem["Show 5 fewer rows at this level",
+ KernelExecute[
+
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimits[{
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395},
+ TypeSystem`NestedGrid`PackagePrivate`adjustLimitBy[#, \
+-5]& , {All, All, All}]], MenuEvaluator -> Automatic]}},
+ Alignment -> {Left, Baseline}, Background ->
+ GrayLevel[0.98]], SpanFromLeft, SpanFromLeft,
+ SpanFromLeft, SpanFromLeft}}, BaseStyle -> {ContextMenu -> {
+ MenuItem["Copy position to clipboard",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentPosition[
+ TypeSystem`NestedGrid`PackagePrivate`copyClip]],
+ MenuEvaluator -> Automatic],
+ MenuItem["Copy data to clipboard",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentData[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`copyClip]],
+ MenuEvaluator -> Automatic], Delimiter,
+ MenuItem["Paste position in new cell",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentPosition[
+ TypeSystem`NestedGrid`PackagePrivate`cellPaste]],
+ MenuEvaluator -> Automatic],
+ MenuItem["Paste data in new cell",
+ KernelExecute[
+ TypeSystem`NestedGrid`PackagePrivate`toCurrentData[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`cellPaste]],
+ MenuEvaluator -> Automatic]}, FontFamily -> "Verdana",
+ FontSize -> 12}, Alignment -> Left, RowMinHeight -> 1.5,
+ Dividers -> All, FrameStyle -> GrayLevel[0.85],
+ BaseStyle -> {FontFamily -> "Verdana", FontSize -> 12}],
+ LineBreakWithin -> False, ContextMenu -> {}, NumberMarks ->
+ False, ShowAutoStyles -> False]],
+ TypeSystem`NestedGrid`PackagePrivate`initialQ = True,
+ TypeSystem`NestedGrid`PackagePrivate`self = $Failed},
+ Dynamic[
+ TypeSystem`NestedGrid`PackagePrivate`setupViewPath[
+ TypeSystem`NestedGrid`PackagePrivate`$path$$, If[
+ Not[TypeSystem`NestedGrid`PackagePrivate`initialQ],
+
+ Module[{
+ TypeSystem`NestedGrid`PackagePrivate`tmpGrid$ = $Failed,
+ TypeSystem`NestedGrid`PackagePrivate`tmpData$ =
+ TypeSystem`NestedGrid`PackagePrivate`LookupCacheValue[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$["Data"]]},
+ TypeSystem`NestedGrid`PackagePrivate`tmpGrid$ =
+ If[TypeSystem`NestedGrid`PackagePrivate`tmpData$ ===
+ TypeSystem`NestedGrid`PackagePrivate`$NotCached,
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid,
+ TypeSystem`NestedGrid`PackagePrivate`renderGrid[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395][
+ TypeSystem`NestedGrid`PackagePrivate`tmpData$]]; If[
+ Not[
+ FailureQ[TypeSystem`NestedGrid`PackagePrivate`tmpGrid$]],
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid =
+ TypeSystem`NestedGrid`PackagePrivate`tmpGrid$]; Null]];
+ TypeSystem`NestedGrid`PackagePrivate`initialQ = False;
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$; If[
+ FailureQ[TypeSystem`NestedGrid`PackagePrivate`renderedGrid],
+ TypeSystem`SparseGrid[
+ TypeSystem`H["(data no longer present)"]],
+ If[GeneralUtilities`$DebugMode,
+ Row[{TypeSystem`NestedGrid`PackagePrivate`renderedGrid, " ",
+ TypeSystem`NestedGrid`PackagePrivate`formatState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$]}],
+ TypeSystem`NestedGrid`PackagePrivate`renderedGrid]]],
+ TrackedSymbols :> {TypeSystem`NestedGrid`PackagePrivate`$pos$$}],
+ DynamicModuleValues :> {}],
+ TypeSystem`NestedGrid`PackagePrivate`$posCell$$,
+ TypeSystem`NestedGrid`PackagePrivate`$topBar$$ = Dynamic[
+ TypeSystem`NestedGrid`PackagePrivate`alignBar[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$][
+ TypeSystem`NestedGrid`PackagePrivate`makeFramedBar[
+ TypeSystem`PackageScope`Pathbar[
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`updateState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$path$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$, 1049895395]]]],
+ TrackedSymbols :> {TypeSystem`NestedGrid`PackagePrivate`$path$$}],
+ TypeSystem`NestedGrid`PackagePrivate`$bottomBar$$ = Framed[
+ Dynamic[
+ Replace[
+ MouseAnnotation[Null], {
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[1049895395][
+ Null] -> "",
+ TypeSystem`NestedGrid`PackagePrivate`$SliceMarker[1049895395][
+ Pattern[TypeSystem`NestedGrid`PackagePrivate`path,
+ Blank[]]] :> (
+ TypeSystem`NestedGrid`PackagePrivate`$lastPath =
+ TypeSystem`NestedGrid`PackagePrivate`path;
+ TypeSystem`NestedGrid`PackagePrivate`makePathTrail[
+ TypeSystem`NestedGrid`PackagePrivate`path,
+ TypeSystem`NestedGrid`PackagePrivate`makePathElements]),
+ Null :> Spacer[10], Blank[] :> Spacer[10]}],
+ TrackedSymbols :> {}], FrameStyle -> None, ImageMargins -> 0,
+ FrameMargins -> 0, Alignment -> Top,
+ ImageSize -> {Automatic, 14}]},
+ DynamicBox[
+ ToBoxes[
+ Column[
+ If[TypeSystem`NestedGrid`PackagePrivate`$path$$ == {}, {
+ TypeSystem`NestedGrid`PackagePrivate`displayScrollBar[
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$],
+ TypeSystem`NestedGrid`PackagePrivate`onDesktopShow[
+ TypeSystem`NestedGrid`PackagePrivate`alignBar[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$][
+ TypeSystem`NestedGrid`PackagePrivate`$bottomBar$$]]}, {
+ TypeSystem`NestedGrid`PackagePrivate`$topBar$$,
+ TypeSystem`NestedGrid`PackagePrivate`displayScrollBar[
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$,
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$pos$$],
+ TypeSystem`NestedGrid`PackagePrivate`onDesktopShow[
+ TypeSystem`NestedGrid`PackagePrivate`alignBar[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$][
+ TypeSystem`NestedGrid`PackagePrivate`$bottomBar$$]]}],
+ Spacings ->
+ If[TypeSystem`NestedGrid`PackagePrivate`$path$$ == {},
+ 0, {{}, {0, 0.05, 0}}]], StandardForm],
+ ImageSizeCache -> {871., {79., 85.}},
+ TrackedSymbols :> {
+ TypeSystem`NestedGrid`PackagePrivate`$state$$,
+ TypeSystem`NestedGrid`PackagePrivate`$grid$$}],
+ BaseStyle -> {LineBreakWithin -> False}, Deinitialization :>
+ TypeSystem`NestedGrid`PackagePrivate`deleteState[
+ TypeSystem`NestedGrid`PackagePrivate`$state$$],
+ DynamicModuleValues :> {}, Initialization :>
+ Block[{$ContextPath = $ContextPath},
+ Needs["TypeSystem`"]]], Deploy, DefaultBaseStyle -> "Deploy"]},
+ "CopyTag",
+ DisplayFunction->(#& ),
+ InterpretationFunction->("Dataset[<>]"& )]}
+ },
+ DefaultBaseStyle->"Column",
+ GridBoxAlignment->{"Columns" -> {{Left}}},
+ GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
+ "Column"]], "Output",
+ CellChangeTimes->{{3.7719133518877954`*^9, 3.7719133732451773`*^9}, {
+ 3.771913410417641*^9, 3.7719134746548405`*^9}},
+ CellLabel->"Out[14]=",ExpressionUUID->"23978ef7-fbad-411b-bd34-bbf885ca40b3"]
+}, Open ]]
+},
+WindowSize->{1063, 641},
+WindowMargins->{{Automatic, 191}, {32, Automatic}},
+FrontEndVersion->"12.0 for Microsoft Windows (64-bit) (April 8, 2019)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[558, 20, 726, 16, 28, "Input",ExpressionUUID->"a3ff6af3-d397-4a63-9a0c-239444d6be9a"],
+Cell[CellGroupData[{
+Cell[1309, 40, 479, 12, 28, "Input",ExpressionUUID->"6cdbb696-26f9-45b5-88dc-77262be1f94d"],
+Cell[1791, 54, 90047, 1749, 459, "Output",ExpressionUUID->"23978ef7-fbad-411b-bd34-bbf885ca40b3"]
+}, Open ]]
+}
+]
+*)
+
diff --git a/CMSIS/DSP/Testing/summaryBench.py b/CMSIS/DSP/Testing/summaryBench.py
new file mode 100644
index 0000000..18b4e8c
--- /dev/null
+++ b/CMSIS/DSP/Testing/summaryBench.py
@@ -0,0 +1,216 @@
+# Process the test results
+# Test status (like passed, or failed with error code)
+
+import argparse
+import re
+import TestScripts.NewParser as parse
+import TestScripts.CodeGen
+from collections import deque
+import os.path
+import numpy as np
+import pandas as pd
+import statsmodels.api as sm
+import statsmodels.formula.api as smf
+import csv
+
+def findItem(root,path):
+ """ Find a node in a tree
+
+ Args:
+ path (list) : A list of node ID
+ This list is describing a path in the tree.
+ By starting from the root and following this path,
+ we can find the node in the tree.
+ Raises:
+ Nothing
+ Returns:
+ TreeItem : A node
+ """
+ # The list is converted into a queue.
+ q = deque(path)
+ q.popleft()
+ c = root
+ while q:
+ n = q.popleft()
+ # We get the children based on its ID and continue
+ c = c[n-1]
+ return(c)
+
+
+
+NORMAL = 1
+INTEST = 2
+TESTPARAM = 3
+
+def joinit(iterable, delimiter):
+ it = iter(iterable)
+ yield next(it)
+ for x in it:
+ yield delimiter
+ yield x
+
+def formatProd(a,b):
+ if a == "Intercept":
+ return(str(b))
+ return("%s * %s" % (a,b))
+
+def summaryBenchmark(elem,path):
+ regressionPath=os.path.join(os.path.dirname(path),"regression.csv")
+ full=pd.read_csv(path)
+
+ csvheaders = []
+ with open('currentConfig.csv', 'r') as f:
+ reader = csv.reader(f)
+ csvheaders = next(reader, None)
+
+ groupList = list(set(elem.params.full) - set(elem.params.summary))
+ #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
+ #grouped.reset_index(level=grouped.index.names, inplace=True)
+ #print(grouped)
+ #print(grouped.columns)
+
+
+ def reg(d):
+ m=d["CYCLES"].max()
+ results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
+ f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
+ f="".join(f)
+ f = re.sub(r':','*',f)
+ #print(results.summary())
+ return(pd.Series({'Regression':"%s" % f,'MAX' : m}))
+
+ regList = ['ID','CATEGORY','NAME'] + csvheaders + groupList
+
+ regression=full.groupby(regList).apply(reg)
+ regression.reset_index(level=regression.index.names, inplace=True)
+ renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
+ regression = regression.rename(columns=renamingDict)
+ regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
+
+
+
+def analyseResult(root,results,embedded,benchmark):
+ path = []
+ state = NORMAL
+ prefix=""
+ elem=None
+ theId=None
+ theError=None
+ theLine=None
+ passed=0
+ cycles=None
+ benchFile = None
+ if embedded:
+ prefix = ".*S:[ ]"
+
+ # Parse the result file.
+ # NORMAL mode is when we are parsing suite or group.
+ # Otherwise we are parsing a test and we need to analyse the
+ # test result.
+ # TESTPARAM is used to read parameters of the test.
+ # Format of output is:
+ #node ident : s id or g id or t or u
+ #test status : id error linenb status Y or N (Y when passing)
+ #param for this test b x,x,x,x or b alone if not param
+ #node end : p
+ # In FPGA mode:
+ #Prefix S:[ ] before driver dump
+ # D:[ ] before data dump (output patterns)
+
+ for l in results:
+ l = l.strip()
+ if not re.match(r'^.*D:[ ].*$',l):
+ if state == NORMAL:
+ if len(l) > 0:
+ # Line starting with g or s is a suite or group.
+ # In FPGA mode, those line are prefixed with 'S: '
+ # and data file with 'D: '
+ if re.match(r'^%s[gs][ ]+[0-9]+.*$' % prefix,l):
+ # Extract the test id
+ theId=re.sub(r'^%s[gs][ ]+([0-9]+).*$' % prefix,r'\1',l)
+ theId=int(theId)
+ path.append(theId)
+ # From a list of id, find the TreeElem in the Parsed tree
+ # to know what is the node.
+ elem = findItem(root,path)
+ # Display formatted output for this node
+ if elem.params:
+ #print(elem.params.full)
+ benchPath = os.path.join(benchmark,elem.fullPath(),"fullBenchmark.csv")
+ summaryBenchmark(elem,benchPath)
+
+
+ # If we have detected a test, we switch to test mode
+ if re.match(r'^%s[t][ ]*$' % prefix,l):
+ state = INTEST
+
+
+ # Pop
+ # End of suite or group
+ if re.match(r'^%sp.*$' % prefix,l):
+ path.pop()
+ elif state == INTEST:
+ if len(l) > 0:
+ # In test mode, we are looking for test status.
+ # A line starting with S
+ # (There may be empty lines or line for data files)
+ passRe = r'^%s([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)[ ]+([YN]).*$' % prefix
+ if re.match(passRe,l):
+ # If we have found a test status then we will start again
+ # in normal mode after this.
+
+ m = re.match(passRe,l)
+
+ # Extract test ID, test error code, line number and status
+ theId=m.group(1)
+ theId=int(theId)
+
+ status=m.group(5)
+ passed=0
+
+ # Convert status to number as used by formatter.
+ if status=="Y":
+ passed = 1
+ if status=="N":
+ passed = 0
+ # Compute path to this node
+ newPath=path.copy()
+ newPath.append(theId)
+ # Find the node in the Tree
+ elem = findItem(root,newPath)
+
+
+ state = TESTPARAM
+ else:
+ if re.match(r'^%sp.*$' % prefix,l):
+ path.pop()
+ if re.match(r'^%s[t][ ]*$' % prefix,l):
+ state = INTEST
+ else:
+ state = NORMAL
+ else:
+ if len(l) > 0:
+ state = INTEST
+ params=""
+
+
+parser = argparse.ArgumentParser(description='Generate summary benchmarks')
+
+parser.add_argument('-f', nargs='?',type = str, default=None, help="Test description file path")
+# Where the result file can be found
+parser.add_argument('-r', nargs='?',type = str, default=None, help="Result file path")
+
+parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path")
+parser.add_argument('-e', action='store_true', help="Embedded test")
+
+args = parser.parse_args()
+
+if args.f is not None:
+ p = parse.Parser()
+ # Parse the test description file
+ root = p.parse(args.f)
+ with open(args.r,"r") as results:
+ analyseResult(root,results,args.e,args.b)
+
+else:
+ parser.print_help()
\ No newline at end of file
diff --git a/CMSIS/DSP/Testing/test.txt b/CMSIS/DSP/Testing/test.txt
new file mode 100644
index 0000000..d43ff93
--- /dev/null
+++ b/CMSIS/DSP/Testing/test.txt
@@ -0,0 +1,104 @@
+<|
+"Root " ->
+{<|
+"DSP Test " ->
+{<|
+"Basic Tests " ->
+{<|"NAME" -> "Test nb=3 arm_add_f32","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 604,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_add_f32","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 814,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_add_f32","ID" -> 3,"STATUS" -> "PASSED","CYCLES" -> 864,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_sub_f32","ID" -> 4,"STATUS" -> "PASSED","CYCLES" -> 604,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_sub_f32","ID" -> 5,"STATUS" -> "PASSED","CYCLES" -> 814,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_sub_f32","ID" -> 6,"STATUS" -> "PASSED","CYCLES" -> 864,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_mult_f32","ID" -> 7,"STATUS" -> "PASSED","CYCLES" -> 604,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_mult_f32","ID" -> 8,"STATUS" -> "PASSED","CYCLES" -> 814,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_mult_f32","ID" -> 9,"STATUS" -> "PASSED","CYCLES" -> 864,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_negate_f32","ID" -> 10,"STATUS" -> "PASSED","CYCLES" -> 597,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_negate_f32","ID" -> 11,"STATUS" -> "PASSED","CYCLES" -> 802,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_negate_f32","ID" -> 12,"STATUS" -> "PASSED","CYCLES" -> 850,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_offset_f32","ID" -> 13,"STATUS" -> "PASSED","CYCLES" -> 598,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_offset_f32","ID" -> 14,"STATUS" -> "PASSED","CYCLES" -> 803,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_offset_f32","ID" -> 15,"STATUS" -> "PASSED","CYCLES" -> 851,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_scale_f32","ID" -> 16,"STATUS" -> "PASSED","CYCLES" -> 598,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_scale_f32","ID" -> 17,"STATUS" -> "PASSED","CYCLES" -> 803,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_scale_f32","ID" -> 18,"STATUS" -> "PASSED","CYCLES" -> 851,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_dot_prod_f32","ID" -> 19,"STATUS" -> "PASSED","CYCLES" -> 343,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_dot_prod_f32","ID" -> 20,"STATUS" -> "PASSED","CYCLES" -> 369,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_dot_prod_f32","ID" -> 21,"STATUS" -> "PASSED","CYCLES" -> 380,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=3 arm_abs_f32","ID" -> 22,"STATUS" -> "PASSED","CYCLES" -> 597,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n arm_abs_f32","ID" -> 23,"STATUS" -> "PASSED","CYCLES" -> 802,"PARAMS" -> ""|>
+,<|"NAME" -> "Test nb=4n+1 arm_abs_f32","ID" -> 24,"STATUS" -> "PASSED","CYCLES" -> 850,"PARAMS" -> ""|>
+}|>
+,<|
+"Complex Tests " ->
+{<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 229,"PARAMS" -> "1,1,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 238,"PARAMS" -> "1,1,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 257,"PARAMS" -> "1,1,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 238,"PARAMS" -> "1,3,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 276,"PARAMS" -> "1,3,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 302,"PARAMS" -> "1,3,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 257,"PARAMS" -> "1,5,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 302,"PARAMS" -> "1,5,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 350,"PARAMS" -> "1,5,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 238,"PARAMS" -> "3,1,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 276,"PARAMS" -> "3,1,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 302,"PARAMS" -> "3,1,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 276,"PARAMS" -> "3,3,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 359,"PARAMS" -> "3,3,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 439,"PARAMS" -> "3,3,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 302,"PARAMS" -> "3,5,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 439,"PARAMS" -> "3,5,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 575,"PARAMS" -> "3,5,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 257,"PARAMS" -> "5,1,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 302,"PARAMS" -> "5,1,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 350,"PARAMS" -> "5,1,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 302,"PARAMS" -> "5,3,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 439,"PARAMS" -> "5,3,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 575,"PARAMS" -> "5,3,5"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 350,"PARAMS" -> "5,5,1"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 575,"PARAMS" -> "5,5,3"|>
+,<|"NAME" -> "Test A","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 799,"PARAMS" -> "5,5,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 234,"PARAMS" -> "1,1,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 262,"PARAMS" -> "1,1,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 281,"PARAMS" -> "1,1,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 262,"PARAMS" -> "1,3,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 315,"PARAMS" -> "1,3,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 372,"PARAMS" -> "1,3,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 281,"PARAMS" -> "1,5,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 372,"PARAMS" -> "1,5,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 459,"PARAMS" -> "1,5,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 262,"PARAMS" -> "3,1,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 315,"PARAMS" -> "3,1,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 372,"PARAMS" -> "3,1,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 315,"PARAMS" -> "3,3,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 481,"PARAMS" -> "3,3,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 643,"PARAMS" -> "3,3,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 372,"PARAMS" -> "3,5,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 643,"PARAMS" -> "3,5,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 913,"PARAMS" -> "3,5,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 281,"PARAMS" -> "5,1,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 372,"PARAMS" -> "5,1,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 459,"PARAMS" -> "5,1,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 372,"PARAMS" -> "5,3,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 643,"PARAMS" -> "5,3,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 913,"PARAMS" -> "5,3,5"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 459,"PARAMS" -> "5,5,1"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 913,"PARAMS" -> "5,5,3"|>
+,<|"NAME" -> "Test B","ID" -> 2,"STATUS" -> "PASSED","CYCLES" -> 1363,"PARAMS" -> "5,5,5"|>
+}|>
+}|>
+,<|
+"NN Tests" ->
+{<|
+"Fully Connected " ->
+{<|"NAME" -> "arm_fully_connected_tflite_s8","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 1330,"PARAMS" -> ""|>
+}|>
+,<|
+"Fully Connected Benchmarks " ->
+{<|"NAME" -> "arm_fully_connected_tflite_s8","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 6415,"PARAMS" -> "10"|>
+,<|"NAME" -> "arm_fully_connected_tflite_s8","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 12445,"PARAMS" -> "20"|>
+,<|"NAME" -> "arm_fully_connected_tflite_s8","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 60685,"PARAMS" -> "100"|>
+,<|"NAME" -> "arm_fully_connected_tflite_s8","ID" -> 1,"STATUS" -> "PASSED","CYCLES" -> 120985,"PARAMS" -> "200"|>
+}|>
+}|>
+}|>
diff --git a/CMSIS/DSP/Testing/testmain.cpp b/CMSIS/DSP/Testing/testmain.cpp
new file mode 100644
index 0000000..eb5014a
--- /dev/null
+++ b/CMSIS/DSP/Testing/testmain.cpp
@@ -0,0 +1,72 @@
+#include <cstdlib>
+#include <cstdio>
+#include <iostream>
+#include "TestDesc.h"
+#include "Semihosting.h"
+#include "FPGA.h"
+#include "IORunner.h"
+#include "ArrayMemory.h"
+#include <stdlib.h>
+using namespace std;
+
+#define MEMSIZE 64000
+
+// Dummy (will be generated by python scripts)
+// char* array describing the tests and the input patterns.
+// Reference patterns are ignored in this case.
+#include "TestDrive.h"
+#include "Patterns.h"
+
+
+int testmain()
+{
+ char *memoryBuf=NULL;
+
+ memoryBuf = (char*)malloc(MEMSIZE);
+ if (memoryBuf !=NULL)
+ {
+ try
+ {
+ // Choice of a memory manager.
+ // Here we choose the Array one (only implemented one)
+ Client::ArrayMemory memory(memoryBuf,MEMSIZE);
+
+ // There is also possibility of using "FPGA" io
+ //Client::Semihosting io("../TestDesc.txt","../Patterns","../Output","../Parameters");
+ Client::FPGA io(testDesc,patterns);
+
+
+ // Pattern Manager making the link between IO and Memory
+ Client::PatternMgr mgr(&io,&memory);
+
+
+ // A Runner to run the test.
+ // An IO runner is driven by some IO
+ // In future one may have a client/server runner driven
+ // by a server running on a host.
+ Client::IORunner runner(&io,&mgr,Testing::kTestAndDump);
+
+
+ // Root object containing all the tests
+ Root d(1);
+
+ // Runner applied to the tree of tests
+ d.accept(&runner);
+
+ }
+ catch(...)
+ {
+ printf("Exception\n");
+ }
+
+
+ free(memoryBuf);
+ }
+ else
+ {
+ printf("NOT ENOUGH MEMORY\n");
+ }
+
+ /* code */
+ return 0;
+}
diff --git a/CMSIS/DSP/Toolchain/AC6.cmake b/CMSIS/DSP/Toolchain/AC6.cmake
new file mode 100644
index 0000000..83de49e
--- /dev/null
+++ b/CMSIS/DSP/Toolchain/AC6.cmake
@@ -0,0 +1,108 @@
+#include(CMakePrintHelpers)
+include(AddFileDependencies)
+
+function(compilerVersion)
+ execute_process(COMMAND "${CMAKE_C_COMPILER}" --version_number
+ OUTPUT_VARIABLE CVERSION
+ ERROR_VARIABLE CVERSION
+ )
+ SET(COMPILERVERSION ${CVERSION} PARENT_SCOPE)
+ #cmake_print_variables(CVERSION)
+ #cmake_print_variables(CMAKE_C_COMPILER)
+ #MESSAGE( STATUS "CMD_OUTPUT:" ${CVERSION})
+endfunction()
+
+function(compilerSpecificCompileOptions PROJECTNAME ROOT)
+ #cmake_print_properties(TARGETS ${PROJECTNAME} PROPERTIES DISABLEOPTIMIZATION)
+ get_target_property(DISABLEOPTIM ${PROJECTNAME} DISABLEOPTIMIZATION)
+ if ((OPTIMIZED) AND (NOT DISABLEOPTIM))
+ #cmake_print_variables(DISABLEOPTIM)
+ target_compile_options(${PROJECTNAME} PRIVATE "-O2")
+ endif()
+
+ if (FASTMATHCOMPUTATIONS)
+ target_compile_options(${PROJECTNAME} PUBLIC "-ffast-math")
+ endif()
+
+ if (HARDFP)
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfloat-abi=hard")
+ endif()
+
+ if (LITTLEENDIAN)
+ target_compile_options(${PROJECTNAME} PUBLIC "-mlittle-endian")
+ endif()
+
+ # Core specific config
+
+ if (ARM_CPU STREQUAL "cortex-m33" )
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=fpv5-sp-d16")
+ #target_compile_options(${PROJECTNAME} PUBLIC -funsigned-char;-fshort-enums;-fshort-wchar;-ffunction-sections)
+ endif()
+
+ if (ARM_CPU STREQUAL "cortex-a9" )
+ if (NOT (NEON OR NEONEXPERIMENTAL))
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=vfpv3-d16-fp16")
+ endif()
+ endif()
+
+ if (ARM_CPU STREQUAL "cortex-a7" )
+ if (NOT (NEON OR NEONEXPERIMENTAL))
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=vfpv4-d16")
+ endif()
+ endif()
+
+ if (ARM_CPU STREQUAL "cortex-a5" )
+ if ((NEON OR NEONEXPERIMENTAL))
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=neon-vfpv4")
+ else()
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=vfpv4-d16")
+ endif()
+ endif()
+endfunction()
+
+
+function(toolchainSpecificLinkForCortexM PROJECTNAME ROOT CORE PLATFORMFOLDER)
+ # A specific library is created for ASM file
+ # since we do not want standard compile flags (for C) to be applied to
+ # ASM files.
+ target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/AC6/startup_${CORE}.s)
+ target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/AC6)
+
+ set(SCATTERFILE "${PLATFORMFOLDER}/${CORE}/LinkScripts/AC6/lnk.sct")
+
+ set_target_properties(${PROJECTNAME} PROPERTIES LINK_DEPENDS "${SCATTERFILE};${PLATFORMFOLDER}/${CORE}/LinkScripts/AC6/mem_${CORE}.h")
+
+ #target_link_options(${PROJECTNAME} PRIVATE "--info=sizes")
+ target_link_options(${PROJECTNAME} PRIVATE "--entry=Reset_Handler;--scatter=${SCATTERFILE}")
+
+endfunction()
+
+function(toolchainSpecificLinkForCortexA PROJECTNAME ROOT CORE PLATFORMFOLDER)
+ target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/AC6/startup_${CORE}.c)
+
+
+ # RTE Components.h
+ target_include_directories(${PROJECTNAME} PRIVATE ${ROOT}/CMSIS/DSP/Testing)
+
+ set(SCATTERFILE "${PLATFORMFOLDER}/${CORE}/LinkScripts/AC6/lnk.sct")
+
+ set_target_properties(${PROJECTNAME} PROPERTIES LINK_DEPENDS "${SCATTERFILE};${PLATFORMFOLDER}/${CORE}/LinkScripts/AC6/mem_${CORE}.h")
+
+ target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/AC6)
+
+ #target_link_options(${PROJECTNAME} PRIVATE "--info=sizes")
+ target_link_options(${PROJECTNAME} PRIVATE "--entry=Vectors;--scatter=${SCATTERFILE}")
+
+endfunction()
+
+function(compilerSpecificPlatformConfigLibForM PROJECTNAME ROOT)
+endfunction()
+
+function(compilerSpecificPlatformConfigLibForA PROJECTNAME ROOT)
+endfunction()
+
+function(compilerSpecificPlatformConfigAppForM PROJECTNAME ROOT)
+endfunction()
+
+function(compilerSpecificPlatformConfigAppForA PROJECTNAME ROOT)
+endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/Toolchain/GCC.cmake b/CMSIS/DSP/Toolchain/GCC.cmake
new file mode 100644
index 0000000..00b3766
--- /dev/null
+++ b/CMSIS/DSP/Toolchain/GCC.cmake
@@ -0,0 +1,165 @@
+function(compilerVersion)
+ execute_process(COMMAND "${CMAKE_C_COMPILER}" -dumpversion
+ OUTPUT_VARIABLE CVERSION
+ ERROR_VARIABLE CVERSION
+ )
+ SET(COMPILERVERSION ${CVERSION} PARENT_SCOPE)
+ #cmake_print_variables(CVERSION)
+ #cmake_print_variables(CMAKE_C_COMPILER)
+ #MESSAGE( STATUS "CMD_OUTPUT:" ${CVERSION})
+endfunction()
+
+function(compilerSpecificCompileOptions PROJECTNAME)
+ get_target_property(DISABLEOPTIM ${PROJECTNAME} DISABLEOPTIMIZATION)
+ if ((OPTIMIZED) AND (NOT DISABLEOPTIM))
+ target_compile_options(${PROJECTNAME} PUBLIC "-O2")
+ endif()
+
+ if (FASTMATHCOMPUTATIONS)
+ target_compile_options(${PROJECTNAME} PUBLIC "-ffast-math")
+ endif()
+
+ if (HARDFP)
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfloat-abi=hard")
+ target_link_options(${PROJECTNAME} PUBLIC "-mfloat-abi=hard")
+ endif()
+
+ if (LITTLEENDIAN)
+ target_compile_options(${PROJECTNAME} PUBLIC "-mlittle-endian")
+ endif()
+
+ if (CORTEXM)
+ target_compile_options(${PROJECTNAME} PUBLIC "-mthumb")
+ endif()
+
+ # Need to add other gcc config for other cortex-m cores
+ if (ARM_CPU STREQUAL "cortex-m7" )
+ target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7e-m;-mfpu=fpv5-d16")
+ target_link_options(${PROJECTNAME} PUBLIC "-march=armv7e-m;-mfpu=fpv5-d16")
+ endif()
+
+
+ if (ARM_CPU STREQUAL "cortex-a9" )
+ if (NOT (NEON OR NEONEXPERIMENTAL))
+ target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ endif()
+ endif()
+
+ if (ARM_CPU STREQUAL "cortex-a7" )
+ if (NOT (NEON OR NEONEXPERIMENTAL))
+ target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ endif()
+ endif()
+
+ if (ARM_CPU STREQUAL "cortex-a5" )
+ if ((NEON OR NEONEXPERIMENTAL))
+ target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ else()
+ target_compile_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ target_link_options(${PROJECTNAME} PUBLIC "-march=armv7-a;-mfpu=vfpv3-d16")
+ endif()
+ endif()
+
+endfunction()
+
+function(preprocessScatter CORE PLATFORMFOLDER SCATTERFILE)
+
+
+ file(REMOVE ${SCATTERFILE})
+
+ # Copy the mem file to the build directory
+ # so that it can be find when preprocessing the scatter file
+ # since we cannot pass an include path to armlink
+ add_custom_command(
+ OUTPUT
+ ${SCATTERFILE}
+ COMMAND
+ ${CMAKE_C_COMPILER} -E -x c -I${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC -o ${SCATTERFILE} ${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC/lnk.ld
+ COMMAND
+ python ${ROOT}/CMSIS/DSP/filterLinkScript.py ${SCATTERFILE}
+ DEPENDS
+ "${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC/lnk.ld;${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC/mem_${CORE}.h"
+ )
+
+ add_custom_target(
+ scatter ALL
+ DEPENDS "${SCATTERFILE};${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC/mem_${CORE}.h"
+ )
+
+ add_dependencies(${PROJECTNAME} scatter)
+endfunction()
+
+function(toolchainSpecificLinkForCortexM PROJECTNAME ROOT CORE PLATFORMFOLDER)
+ target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/GCC/startup_${CORE}.S)
+ target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/GCC/support.c)
+
+ target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC)
+
+ set(SCATTERFILE ${CMAKE_CURRENT_BINARY_DIR}/tempLink/lnk.ld)
+ preprocessScatter(${CORE} ${PLATFORMFOLDER} ${SCATTERFILE})
+
+ set_target_properties(${PROJECTNAME} PROPERTIES LINK_DEPENDS "${SCATTERFILE}")
+
+ target_link_options(${PROJECTNAME} PRIVATE "--entry=Reset_Handler;-T${SCATTERFILE}")
+endfunction()
+
+function(toolchainSpecificLinkForCortexA PROJECTNAME ROOT CORE PLATFORMFOLDER)
+ target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/GCC/startup_${CORE}.c)
+ target_sources(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/Startup/GCC/support.c)
+
+ # RTE Components
+ target_include_directories(${PROJECTNAME} PRIVATE ${ROOT}/CMSIS/DSP/Testing)
+
+ # Using the mem file which is included.
+ # Since meme file in same temp directory, it is found by linker
+ # when processing the scatter file
+ set(SCATTERFILE ${CMAKE_CURRENT_BINARY_DIR}/tempLink/lnk.ld)
+ preprocessScatter(${CORE} ${PLATFORMFOLDER} ${SCATTERFILE})
+
+ target_include_directories(${PROJECTNAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/LinkScripts/GCC)
+
+ target_link_options(${PROJECTNAME} PRIVATE "--entry=Reset_Handler;-T${SCATTERFILE}")
+endfunction()
+
+function(compilerSpecificPlatformConfigLibForM PROJECTNAME ROOT)
+ if (SEMIHOSTING)
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ else()
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ endif()
+endfunction()
+
+function(compilerSpecificPlatformConfigLibForA PROJECTNAME ROOT)
+ if (SEMIHOSTING)
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ else()
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ endif()
+endfunction()
+
+function(compilerSpecificPlatformConfigAppForM PROJECTNAME ROOT)
+ if (SEMIHOSTING)
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ else()
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ endif()
+endfunction()
+
+function(compilerSpecificPlatformConfigAppForA PROJECTNAME ROOT)
+ if (SEMIHOSTING)
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=rdimon.specs")
+ else()
+ target_link_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ target_compile_options(${PROJECTNAME} PRIVATE "--specs=nosys.specs")
+ endif()
+endfunction()
diff --git a/CMSIS/DSP/Toolchain/Tools.cmake b/CMSIS/DSP/Toolchain/Tools.cmake
new file mode 100644
index 0000000..8097219
--- /dev/null
+++ b/CMSIS/DSP/Toolchain/Tools.cmake
@@ -0,0 +1,8 @@
+SET(COMPILERVERSION "")
+if (ARMAC6)
+ include(Toolchain/AC6)
+endif()
+
+if (GCC)
+ include(Toolchain/GCC)
+endif()
\ No newline at end of file
diff --git a/CMSIS/DSP/armcc.cmake b/CMSIS/DSP/armcc.cmake
index 544a834..f24c7a4 100755
--- a/CMSIS/DSP/armcc.cmake
+++ b/CMSIS/DSP/armcc.cmake
@@ -6,23 +6,40 @@
-SET(tools "C:/PROGRA~1/ARM/DEVELO~1.0/sw/ARMCOM~1.12")
+#SET(tools "C:/PROGRA~1/ARM/DEVELO~1.0/sw/ARMCOM~1.12")
-SET(CMAKE_C_COMPILER "${tools}/bin/armclang.exe")
-SET(CMAKE_CXX_COMPILER "${tools}/bin/armclang.exe")
+find_program(CMAKE_C_COMPILER NAMES armclang armclang.exe)
+find_program(CMAKE_CXX_COMPILER NAMES armclang armclang.exe)
+find_program(CMAKE_ASM_COMPILER NAMES armclang armclang.exe)
-SET(CMAKE_AR "${tools}/bin/armar.exe")
-SET(CMAKE_CXX_COMPILER_AR "${tools}/bin/armar.exe")
-SET(CMAKE_C_COMPILER_AR "${tools}/bin/armar.exe")
-SET(CMAKE_LINKER "${tools}/bin/armlink.exe")
+#SET(CMAKE_C_COMPILER "${tools}/bin/armclang.exe")
+#SET(CMAKE_CXX_COMPILER "${tools}/bin/armclang.exe")
+#SET(CMAKE_ASM_COMPILER "${tools}/bin/armclang.exe")
+
+find_program(CMAKE_AR NAMES armar armar.exe)
+
+#SET(CMAKE_AR "${tools}/bin/armar.exe")
+find_program(CMAKE_CXX_COMPILER_AR NAMES armar armar.exe)
+find_program(CMAKE_C_COMPILER_AR NAMES armar armar.exe)
+
+find_program(CMAKE_LINKER NAMES armlink armlink.exe)
+#SET(CMAKE_LINKER "${tools}/bin/armlink.exe")
+
SET(CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> -o <TARGET> <LINK_LIBRARIES> <OBJECTS>")
-set(CMAKE_C_RESPONSE_FILE_LINK_FLAG "--via ")
+SET(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> -o <TARGET> <LINK_LIBRARIES> <OBJECTS>")
+
+SET(CMAKE_C_RESPONSE_FILE_LINK_FLAG "--via ")
SET(CMAKE_C_OUTPUT_EXTENSION .o)
SET(CMAKE_CXX_OUTPUT_EXTENSION .o)
SET(CMAKE_ASM_OUTPUT_EXTENSION .o)
# When library defined as STATIC, this line is needed to describe how the .a file must be
# create. Some changes to the line may be needed.
-SET(CMAKE_C_CREATE_STATIC_LIBRARY "${tools}/bin/armar.exe -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+SET(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+
+#SET(CMAKE_ASM_CREATE_STATIC_LIBRARY "${tools}/bin/armar.exe -r -s --create <TARGET> <LINK_FLAGS> <OBJECTS>" )
+
+
set(ARMAC6 ON)
# default core
@@ -36,13 +53,16 @@
SET(CMAKE_C_FLAGS "-mcpu=${ARM_CPU} --target=arm-arm-none-eabi" CACHE INTERNAL "C compiler common flags")
SET(CMAKE_CXX_FLAGS "-mcpu=${ARM_CPU} --target=arm-arm-none-eabi" CACHE INTERNAL "C compiler common flags")
SET(CMAKE_ASM_FLAGS "-g -x assembler-with-cpp -masm=auto -mcpu=${ARM_CPU} --target=arm-arm-none-eabi" CACHE INTERNAL "ASM compiler common flags")
+#SET(CMAKE_ASM_FLAGS "--cpu=${ARM_CPU}" CACHE INTERNAL "ASM compiler common flags")
#SET(CMAKE_EXE_LINKER_FLAGS "-flto" CACHE INTERNAL "linker flags")
# Where is the target environment
-SET(CMAKE_FIND_ROOT_PATH "${tools}")
+#SET(CMAKE_FIND_ROOT_PATH "${tools}")
# Search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# For libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+#include(CMakePrintHelpers)
+#cmake_print_variables(${ASM_DIALECT})
diff --git a/CMSIS/DSP/config.cmake b/CMSIS/DSP/config.cmake
index b6c84be..284200c 100755
--- a/CMSIS/DSP/config.cmake
+++ b/CMSIS/DSP/config.cmake
@@ -1,141 +1,35 @@
-include(CMakePrintHelpers)
-cmake_policy(SET CMP0077 NEW)
+include(Toolchain/Tools)
+SET(PLATFORMFOLDER "FVP")
+option(OPTIMIZED "Compile for speed" ON)
+include(configPlatform)
+include(configBoot)
+include(configCore)
-SET(CORTEXM ON)
-option(FASTMATHCOMPUTATIONS "Fast Math enabled" ON)
-option(NEON "Neon acceleration" OFF)
-option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF)
-option(LOOPUNROLL "Loop unrolling" ON)
-option(ROUNDING "Rounding" OFF)
-option(MATRIXCHECK "Matrix Checks" OFF)
+define_property(TARGET
+ PROPERTY DISABLEOPTIMIZATION
+ BRIEF_DOCS "Force disabling of optimizations"
+ FULL_DOCS "Force disabling of optimizations")
-###################
-#
-# ALL CORTEX
-#
+# Config core settings
+# Configure platform (semihosting etc ...)
+# May be required for some compiler
+function(disableOptimization project)
+ set_target_properties(${project} PROPERTIES DISABLEOPTIMIZATION ON)
+endfunction()
-function(configdsp PROJECTNAME DSP)
- target_compile_options(${PROJECTNAME} PUBLIC "-mfloat-abi=hard;-mlittle-endian")
- if (CONFIGTABLE)
- # Public because initialization for FFT may be defined in client code
- # and needs access to the table.
- target_compile_definitions(${PROJECTNAME} PUBLIC ARM_DSP_CONFIG_TABLES)
- endif()
-
- if (FASTMATHCOMPUTATIONS)
- target_compile_options(${PROJECTNAME} PUBLIC "-ffast-math")
- endif()
-
- if (LOOPUNROLL)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_LOOPUNROLL)
- endif()
-
- if (ROUNDING)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_ROUNDING)
- endif()
-
- if (MATRIXCHECK)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MATRIX_CHECK)
- endif()
-
-
- ###################
- #
- # CORTEX-A
- #
-
- # CORTEX-A9
- if (ARM_CPU STREQUAL "cortex-a9" )
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core_A/Include")
- SET(CORTEXM OFF)
-
- if (NOT (NEON OR NEONEXPERIMENTAL))
- target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=vfpv3-d16-fp16")
- endif()
-
- endif()
-
- # CORTEX-A7
- if (ARM_CPU STREQUAL "cortex-a7" )
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core_A/Include")
- SET(CORTEXM OFF)
-
- if (NOT (NEON OR NEONEXPERIMENTAL))
- target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=vfpv4-d16")
- endif()
-
- endif()
-
- # CORTEX-A5
- if (ARM_CPU STREQUAL "cortex-a5" )
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core_A/Include")
- SET(CORTEXM OFF)
-
- if ((NEON OR NEONEXPERIMENTAL))
- target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=neon-vfpv4")
- else()
- target_compile_options(${PROJECTNAME} PUBLIC "-mfpu=vfpv4-d16")
- endif()
- endif()
-
-
- ###################
- #
- # CORTEX-M
- #
-
- # CORTEX-M35
- if (ARM_CPU STREQUAL "cortex-m35")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- # CORTEX-M33
- if (ARM_CPU STREQUAL "cortex-m33")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- # CORTEX-M23
- if (ARM_CPU STREQUAL "cortex-m23")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- # CORTEX-M7
- if (ARM_CPU STREQUAL "cortex-m7")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- # CORTEX-M4
- if (ARM_CPU STREQUAL "cortex-m4")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
-
- endif()
-
- # CORTEX-M3
- if (ARM_CPU STREQUAL "cortex-m3")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- # CORTEX-M0plus
- if (ARM_CPU STREQUAL "cortex-m0p")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- # CORTEX-M0
- if (ARM_CPU STREQUAL "cortex-m0")
- target_include_directories(${PROJECTNAME} PUBLIC "${DSP}/../../Core/Include")
- endif()
-
- ###################
- #
- # FEATURES
- #
-
- if (NEON AND NOT CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON __FPU_PRESENT)
- endif()
-
- if (NEONEXPERIMENTAL AND NOT CORTEXM)
- target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL __FPU_PRESENT)
- endif()
+function(configLib project cmsisRoot)
+ configcore(${project} ${cmsisRoot})
+ configplatformForLib(${project} ${cmsisRoot})
+ SET(COREID ${COREID} PARENT_SCOPE)
+endfunction()
+
+# Config app
+function (configApp project cmsisRoot)
+ configcore(${project} ${cmsisRoot})
+ configboot(${project} ${cmsisRoot} ${cmsisRoot}/CMSIS/DSP/Platforms/${PLATFORMFOLDER})
+ set_platform_core()
+ core_includes(${project})
+ SET(PLATFORMID ${PLATFORMID} PARENT_SCOPE)
+ SET(COREID ${COREID} PARENT_SCOPE)
endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/configBoot.cmake b/CMSIS/DSP/configBoot.cmake
index 68a364c..a85cfe8 100755
--- a/CMSIS/DSP/configBoot.cmake
+++ b/CMSIS/DSP/configBoot.cmake
@@ -1,9 +1,7 @@
include(CMakePrintHelpers)
-include(configUtils)
-enable_language(C ASM)
+enable_language(CXX C ASM)
-option(FILEIO "Test trace using printf" ON)
# Otherwise there is a .obj on windows and it creates problems
# with armlink.
@@ -16,19 +14,47 @@
cmake_print_variables(PROJECT_NAME)
-#set(ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../../..)
-if (ARMAC6)
+function(cortexm CORE PROJECT_NAME ROOT PLATFORMFOLDER)
+
+ target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/CMSIS/Core/Include)
+
+ target_sources(${PROJECT_NAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/system_${CORE}.c)
+
+ toolchainSpecificLinkForCortexM(${PROJECT_NAME} ${ROOT} ${CORE} ${PLATFORMFOLDER})
+
+ configplatformForApp(${PROJECT_NAME} ${ROOT} ${CORE} ${PLATFORMFOLDER})
+ SET(PLATFORMID ${PLATFORMID} PARENT_SCOPE)
+
+endfunction()
+
+function(cortexa CORE PROJECT_NAME ROOT PLATFORMFOLDER)
+ target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/CMSIS/Core_A/Include)
+
+ target_sources(${PROJECT_NAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/irq_ctrl_gic.c)
+ target_sources(${PROJECT_NAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/mmu_${CORE}.c)
+ target_sources(${PROJECT_NAME} PRIVATE ${PLATFORMFOLDER}/${CORE}/system_${CORE}.c)
+
+
+ target_compile_definitions(${PROJECT_NAME} PRIVATE -DCMSIS_device_header="${CORE}.h")
+
+ toolchainSpecificLinkForCortexA(${PROJECT_NAME} ${ROOT} ${CORE} ${PLATFORMFOLDER})
+
+ configplatformForApp(${PROJECT_NAME} ${ROOT} ${CORE} ${PLATFORMFOLDER})
+ SET(PLATFORMID ${PLATFORMID} PARENT_SCOPE)
+endfunction()
+
+function(configboot PROJECT_NAME ROOT PLATFORMFOLDER)
+
+ target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/CMSIS/DSP/Include)
+ set_platform_core()
###################
#
# Cortex cortex-m7
#
if (ARM_CPU STREQUAL "cortex-m7")
- cortexm(ARMCM7)
-
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMCM7_DP)
-
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
endif()
@@ -37,8 +63,7 @@
# Cortex cortex-m4
#
if (ARM_CPU STREQUAL "cortex-m4")
- cortexm(ARMCM4)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMCM4_FP)
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
endif()
###################
@@ -46,8 +71,8 @@
# Cortex cortex-m35p
#
if (ARM_CPU STREQUAL "cortex-m35")
- cortexm(ARMCM35P)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMCM35P)
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -55,8 +80,8 @@
# Cortex cortex-m33
#
if (ARM_CPU STREQUAL "cortex-m33")
- cortexm(ARMCM33)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMCM33)
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -64,8 +89,8 @@
# Cortex cortex-m23
#
if (ARM_CPU STREQUAL "cortex-m23")
- cortexm(ARMCM23)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMCM23)
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -73,7 +98,8 @@
# Cortex cortex-m0+
#
if (ARM_CPU STREQUAL "cortex-m0p")
- cortexm(ARMCM0plus)
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -81,7 +107,8 @@
# Cortex cortex-m0
#
if (ARM_CPU STREQUAL "cortex-m0")
- cortexm(ARMCM0)
+ cortexm(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -89,8 +116,8 @@
# Cortex cortex-a5
#
if (ARM_CPU STREQUAL "cortex-a5")
- cortexa(ARMCA5)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMv7A)
+ cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -98,8 +125,8 @@
# Cortex cortex-a7
#
if (ARM_CPU STREQUAL "cortex-a7")
- cortexa(ARMCA7)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMv7A)
+ cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
###################
@@ -107,12 +134,20 @@
# Cortex cortex-a9
#
if (ARM_CPU STREQUAL "cortex-a9")
- cortexa(ARMCA9)
- target_compile_definitions(${PROJECT_NAME} PRIVATE ARMv7A)
+ cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
endif()
-
-endif()
-if (FILEIO)
- target_compile_definitions(${PROJECT_NAME} PRIVATE FILEIO)
-endif()
\ No newline at end of file
+ ###################
+ #
+ # Cortex cortex-a15
+ #
+ if (ARM_CPU STREQUAL "cortex-a15")
+ cortexa(${CORE} ${PROJECT_NAME} ${ROOT} ${PLATFORMFOLDER})
+
+ endif()
+
+ SET(PLATFORMID ${PLATFORMID} PARENT_SCOPE)
+
+endfunction()
+
diff --git a/CMSIS/DSP/configCore.cmake b/CMSIS/DSP/configCore.cmake
new file mode 100644
index 0000000..b23c520
--- /dev/null
+++ b/CMSIS/DSP/configCore.cmake
@@ -0,0 +1,189 @@
+include(CMakePrintHelpers)
+cmake_policy(SET CMP0077 NEW)
+
+# Config core
+SET(CORTEXM ON)
+
+option(HARDFP "Hard floating point" ON)
+option(LITTLEENDIAN "Little endian" ON)
+
+# More detailed identification for benchmark results
+SET(COREID ARMCM7)
+
+###################
+#
+# ALL CORTEX
+#
+
+function(configcore PROJECTNAME ROOT)
+
+
+ ###################
+ #
+ # CORTEX-A
+ #
+
+ # CORTEX-A15
+ if (ARM_CPU STREQUAL "cortex-a15" )
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
+ SET(CORTEXM OFF)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
+
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCA15 PARENT_SCOPE)
+ endif()
+
+ # CORTEX-A9
+ if (ARM_CPU STREQUAL "cortex-a9" )
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
+ SET(CORTEXM OFF)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
+
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCA9 PARENT_SCOPE)
+
+ endif()
+
+ # CORTEX-A7
+ if (ARM_CPU STREQUAL "cortex-a7" )
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
+ SET(CORTEXM OFF)
+
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
+
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCA7 PARENT_SCOPE)
+
+ endif()
+
+ # CORTEX-A5
+ if (ARM_CPU STREQUAL "cortex-a5" )
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core_A/Include")
+ SET(CORTEXM OFF)
+
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXA)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMv7A)
+
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCA5 PARENT_SCOPE)
+ endif()
+
+
+ ###################
+ #
+ # CORTEX-M
+ #
+
+ # CORTEX-M35
+ if (ARM_CPU STREQUAL "cortex-m35")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM35P_DSP_FP)
+
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM35P_DSP_FP PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M33
+ if (ARM_CPU STREQUAL "cortex-m33")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM33_DSP_FP)
+
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM33_DSP_FP PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M23
+ if (ARM_CPU STREQUAL "cortex-m23")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM23)
+
+ SET(HARDFP OFF)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM23 PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M7
+ if (ARM_CPU STREQUAL "cortex-m7")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM7_DP)
+
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM7_DP PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M4
+ if (ARM_CPU STREQUAL "cortex-m4")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM4_FP)
+
+ SET(HARDFP ON)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM4_FP PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M3
+ if (ARM_CPU STREQUAL "cortex-m3")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM3)
+
+ SET(HARDFP OFF)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM3 PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M0plus
+ if (ARM_CPU STREQUAL "cortex-m0p")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0P)
+
+ SET(HARDFP OFF)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM0P PARENT_SCOPE)
+ endif()
+
+ # CORTEX-M0
+ if (ARM_CPU STREQUAL "cortex-m0")
+ target_include_directories(${PROJECTNAME} PUBLIC "${ROOT}/CMSIS/Core/Include")
+ target_compile_definitions(${PROJECTNAME} PUBLIC CORTEXM)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARMCM0)
+
+ SET(HARDFP OFF)
+ SET(LITTLEENDIAN ON)
+ SET(COREID ARMCM0 PARENT_SCOPE)
+ endif()
+
+ ###################
+ #
+ # FEATURES
+ #
+
+ if (NEON AND NOT CORTEXM)
+ #target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON __FPU_PRESENT)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON)
+ endif()
+
+ if (NEONEXPERIMENTAL AND NOT CORTEXM)
+ #target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL __FPU_PRESENT)
+ target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL)
+ endif()
+
+ compilerSpecificCompileOptions(${PROJECTNAME} ${ROOT})
+
+endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/configPlatform.cmake b/CMSIS/DSP/configPlatform.cmake
new file mode 100644
index 0000000..b1e589f
--- /dev/null
+++ b/CMSIS/DSP/configPlatform.cmake
@@ -0,0 +1,149 @@
+option(SEMIHOSTING "Test trace using printf" ON)
+option(PLATFORM "Platform" "FVP")
+
+
+if (PLATFORM STREQUAL "FVP")
+SET(PLATFORMFOLDER "FVP")
+SET(PLATFORMID "FVP")
+list(APPEND CMAKE_MODULE_PATH ${ROOT}/CMSIS/DSP/Platforms/FVP)
+endif()
+
+if (PLATFORM STREQUAL "SDSIM")
+SET(PLATFORMFOLDER "SDSIM")
+SET(PLATFORMID "SDSIM")
+list(APPEND CMAKE_MODULE_PATH ${ROOT}/CMSIS/DSP/Platforms/SDSIM)
+endif()
+
+SET(CORE ARMCM7)
+
+include(platform)
+
+function(set_platform_core)
+ ###################
+ #
+ # Cortex cortex-m7
+ #
+ if (ARM_CPU STREQUAL "cortex-m7")
+ SET(CORE ARMCM7 PARENT_SCOPE)
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-m4
+ #
+ if (ARM_CPU STREQUAL "cortex-m4")
+ SET(CORE ARMCM4 PARENT_SCOPE)
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-m35p
+ #
+ if (ARM_CPU STREQUAL "cortex-m35")
+ SET(CORE ARMCM35P PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-m33
+ #
+ if (ARM_CPU STREQUAL "cortex-m33")
+ SET(CORE ARMCM33 PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-m23
+ #
+ if (ARM_CPU STREQUAL "cortex-m23")
+ SET(CORE ARMCM23 PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-m0+
+ #
+ if (ARM_CPU STREQUAL "cortex-m0p")
+ SET(CORE ARMCM0plus PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-m0
+ #
+ if (ARM_CPU STREQUAL "cortex-m0")
+ SET(CORE ARMCM0 PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-a5
+ #
+ if (ARM_CPU STREQUAL "cortex-a5")
+ SET(CORE ARMCA5 PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-a7
+ #
+ if (ARM_CPU STREQUAL "cortex-a7")
+ SET(CORE ARMCA7 PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-a9
+ #
+ if (ARM_CPU STREQUAL "cortex-a9")
+ SET(CORE ARMCA9 PARENT_SCOPE)
+
+ endif()
+
+ ###################
+ #
+ # Cortex cortex-a15
+ #
+ if (ARM_CPU STREQUAL "cortex-a15")
+ SET(CORE ARMCA15 PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(core_includes PROJECTNAME)
+ target_include_directories(${PROJECTNAME} PRIVATE ${ROOT}/CMSIS/DSP/Platforms/${PLATFORMFOLDER}/${CORE}/Include)
+endfunction()
+
+function (configplatformForLib PROJECTNAME ROOT)
+ if (SEMIHOSTING)
+ target_compile_definitions(${PROJECTNAME} PRIVATE SEMIHOSTING)
+ endif()
+ if (CORTEXM)
+ compilerSpecificPlatformConfigLibForM(${PROJECTNAME} ${ROOT} )
+ else()
+ compilerSpecificPlatformConfigLibForA(${PROJECTNAME} ${ROOT} )
+ endif()
+
+endfunction()
+
+function (configplatformForApp PROJECTNAME ROOT CORE PLATFORMFOLDER)
+ if (SEMIHOSTING)
+ target_compile_definitions(${PROJECTNAME} PRIVATE SEMIHOSTING)
+ endif()
+
+ configure_platform(${PROJECTNAME} ${ROOT} ${CORE} ${PLATFORMFOLDER})
+ SET(PLATFORMID ${PLATFORMID} PARENT_SCOPE)
+
+ if (CORTEXM)
+ compilerSpecificPlatformConfigAppForM(${PROJECTNAME} ${ROOT} )
+ else()
+ compilerSpecificPlatformConfigAppForA(${PROJECTNAME} ${ROOT} )
+ endif()
+
+endfunction()
diff --git a/CMSIS/DSP/configUtils.cmake b/CMSIS/DSP/configUtils.cmake
deleted file mode 100755
index 43b1c5f..0000000
--- a/CMSIS/DSP/configUtils.cmake
+++ /dev/null
@@ -1,51 +0,0 @@
-function(cortexm CORE)
- target_sources(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Source/ARM/startup_${CORE}.s)
- target_sources(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Source/system_${CORE}.c)
- target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Include)
- target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/CMSIS/Core/Include)
-
- if (TESTFRAMEWORK)
- # Need bigger sections for test framework
- # So we use the test framework scatter file
- set(SCATTERFILE "${ROOT}/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/armcc6_arm.sct")
- else()
- set(SCATTERFILE "${ROOT}/Device/ARM/${CORE}/Source/ARM/${CORE}_ac6.sct")
- endif()
-
- target_link_options(${PROJECT_NAME} PRIVATE "--info=sizes;--entry=Reset_Handler;--scatter=${SCATTERFILE}")
-
-endfunction()
-
-function(cortexa CORE)
- target_sources(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Source/mmu_${CORE}.c)
- target_sources(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Source/system_${CORE}.c)
- target_sources(${PROJECT_NAME} PRIVATE ${ROOT}/CMSIS/Core_A/Source/irq_ctrl_gic.c)
-
- target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Include)
- target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Config)
- target_include_directories(${PROJECT_NAME} PRIVATE ${ROOT}/CMSIS/Core_A/Include)
-
- target_sources(${PROJECT_NAME} PRIVATE ${ROOT}/Device/ARM/${CORE}/Source/AC6/startup_${CORE}.c)
-
- if (TESTFRAMEWORK)
- # Test scatter file is missing some sections required by startup file for
- # cortex-a
- #set(SCATTERFILE "${ROOT}/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/armcc6_arm.sct")
- target_include_directories(${PROJECT_NAME} PRIVATE ../Examples/ARM/boot)
- else()
- target_include_directories(${PROJECT_NAME} PRIVATE ../boot)
- endif()
-
- set(SCATTERFILE ${CMAKE_CURRENT_BINARY_DIR}/tempLink/${CORE}.sct)
-
-
- # Copy the mem file to the build directory
- # so that it can be find when preprocessing the scatter file
- # since we cannot pass an include path to armlink
- file(COPY ${ROOT}/Device/ARM/${CORE}/Config/mem_${CORE}.h DESTINATION tempLink)
- file(COPY ${ROOT}/Device/ARM/${CORE}/Source/AC6/${CORE}.sct DESTINATION tempLink)
-
- target_compile_definitions(${PROJECT_NAME} PRIVATE -DCMSIS_device_header="${CORE}.h")
-
- target_link_options(${PROJECT_NAME} PRIVATE "--info=sizes;--entry=Vectors;--scatter=${SCATTERFILE}")
-endfunction()
\ No newline at end of file
diff --git a/CMSIS/DSP/filterLinkScript.py b/CMSIS/DSP/filterLinkScript.py
new file mode 100644
index 0000000..df0c061
--- /dev/null
+++ b/CMSIS/DSP/filterLinkScript.py
@@ -0,0 +1,17 @@
+import sys
+import re
+
+filePath = sys.argv[1]
+
+text = None
+
+with open(filePath, "r") as f:
+ text = f.readlines()
+
+if text:
+ with open(filePath, "w") as f:
+ for l in text:
+ if not re.match(r'^#.*$',l) and not re.match(r'^[ ]+[0-9].*$',l):
+ f.write(l)
+ #print(l.rstrip())
+
diff --git a/CMSIS/DSP/gcc.cmake b/CMSIS/DSP/gcc.cmake
new file mode 100644
index 0000000..2e1abea
--- /dev/null
+++ b/CMSIS/DSP/gcc.cmake
@@ -0,0 +1,68 @@
+# Setting Linux is forcing th extension to be .o instead of .obj when building on WIndows.
+# It is important because armlink is failing when files have .obj extensions (error with
+# scatter file section not found)
+SET(CMAKE_SYSTEM_NAME Linux)
+SET(CMAKE_SYSTEM_PROCESSOR arm)
+
+
+
+#SET(tools "C:/PROGRA~2/GNUTOO~1/82018-~1")
+
+#SET(CMAKE_C_COMPILER "${tools}/bin/arm-none-eabi-gcc.exe")
+#SET(CMAKE_CXX_COMPILER "${tools}/bin/arm-none-eabi-g++.exe")
+#SET(CMAKE_ASM_COMPILER "${tools}/bin/arm-none-eabi-gcc.exe")
+
+find_program(CMAKE_C_COMPILER NAMES arm-none-eabi-gcc arm-none-eabi-gcc.exe)
+find_program(CMAKE_CXX_COMPILER NAMES arm-none-eabi-g++ arm-none-eabi-g++.exe)
+find_program(CMAKE_ASM_COMPILER NAMES arm-none-eabi-gcc arm-none-eabi-gcc.exe)
+
+#SET(CMAKE_AR "${tools}/bin/arm-none-eabi-gcc-ar.exe")
+find_program(CMAKE_AR NAMES arm-none-eabi-gcc-ar arm-none-eabi-gcc-ar.exe)
+find_program(CMAKE_CXX_COMPILER_AR NAMES arm-none-eabi-gcc-ar arm-none-eabi-gcc-ar.exe)
+find_program(CMAKE_C_COMPILER_AR NAMES arm-none-eabi-gcc-ar arm-none-eabi-gcc-ar.exe)
+
+
+#SET(CMAKE_CXX_COMPILER_AR "${tools}/bin/arm-none-eabi-gcc-ar.exe")
+#SET(CMAKE_C_COMPILER_AR "${tools}/bin/arm-none-eabi-gcc-ar.exe")
+
+#SET(CMAKE_LINKER "${tools}/bin/arm-none-eabi-g++.exe")
+find_program(CMAKE_LINKER NAMES arm-none-eabi-g++ arm-none-eabi-g++.exe)
+
+SET(CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+SET(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+SET(CMAKE_C_OUTPUT_EXTENSION .o)
+SET(CMAKE_CXX_OUTPUT_EXTENSION .o)
+SET(CMAKE_ASM_OUTPUT_EXTENSION .o)
+# When library defined as STATIC, this line is needed to describe how the .a file must be
+# create. Some changes to the line may be needed.
+SET(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> -r -s <TARGET> <LINK_FLAGS> <OBJECTS>" )
+SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> -r -s <TARGET> <LINK_FLAGS> <OBJECTS>" )
+
+set(GCC ON)
+# default core
+
+if(NOT ARM_CPU)
+ set(
+ ARM_CPU "cortex-a5"
+ CACHE STRING "Set ARM CPU. Default : cortex-a5"
+ )
+endif(NOT ARM_CPU)
+
+SET(CMAKE_C_FLAGS "-g -ffunction-sections -fdata-sections -mcpu=${ARM_CPU}" CACHE INTERNAL "C compiler common flags")
+SET(CMAKE_CXX_FLAGS "-g -ffunction-sections -fdata-sections -mcpu=${ARM_CPU}" CACHE INTERNAL "C compiler common flags")
+SET(CMAKE_ASM_FLAGS "-mcpu=${ARM_CPU}" CACHE INTERNAL "ASM compiler common flags")
+#SET(CMAKE_EXE_LINKER_FLAGS "--specs=nosys.specs" CACHE INTERNAL "linker flags")
+
+get_property(IS_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
+if(IS_IN_TRY_COMPILE)
+ add_link_options("--specs=nosys.specs")
+endif()
+
+# Where is the target environment
+#SET(CMAKE_FIND_ROOT_PATH "${tools}")
+# Search for programs in the build host directories
+SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+# For libraries and headers in the target directories
+SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
diff --git a/CMSIS/NN/Include/arm_nnfunctions.h b/CMSIS/NN/Include/arm_nnfunctions.h
index 331255b..9239351 100644
--- a/CMSIS/NN/Include/arm_nnfunctions.h
+++ b/CMSIS/NN/Include/arm_nnfunctions.h
@@ -672,6 +672,52 @@
q15_t * vec_buffer);
/**
+ * @brief S8 basic fully-connected layer function for TF Lite
+ * @param[in] pInput pointer to pInput vector
+ * @param[in] pWeight pointer to matrix weights
+ * @param[in] col_dim dimension of the input vector
+ * @param[in] row_dim dimension of the output vector
+ * @param[in] nb_batches number of batches
+ * @param[in] input_offset
+ * @param[in] filter_offset
+ * @param[in] out_mult requantization parameter
+ * @param[in] out_shift requantization parameter
+ * @param[in] output_offset
+ * @param[in] pBias pointer to bias
+ * @param[out] pOut pointer to output vector
+ * @param[in] output_activation_min for clamping
+ * @param[in] output_activation_max for clamping
+ * @param[in,out] vec_buffer pointer to buffer space for pInput
+ * @return The function returns ARM_MATH_SUCCESS
+ *
+ * @details
+ *
+ * <b>Buffer size:</b>
+ *
+ * vec_buffer size: col_dim of word16.
+ *
+ * This basic function is designed to work with regular pWeight
+ * matrix without interleaving.
+ *
+ */
+ arm_status
+ arm_fully_connected_s8(const int8_t *pInput,
+ const int8_t *weight,
+ const uint16_t input_length,
+ const uint16_t num_rows,
+ const uint16_t nb_batches,
+ const int32_t input_offset,
+ const int32_t filter_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t output_offset,
+ const int8_t *bias,
+ int8_t *pOut,
+ const int32_t output_activation_min,
+ const int32_t output_activation_max,
+ q15_t *vec_buffer) ;
+
+ /**
* @brief Q7 opt fully-connected layer function
* @param[in] pV pointer to input vector
* @param[in] pM pointer to matrix weights
diff --git a/CMSIS/NN/Include/arm_nnsupportfunctions.h b/CMSIS/NN/Include/arm_nnsupportfunctions.h
index af426e1..8bf76a3 100644
--- a/CMSIS/NN/Include/arm_nnsupportfunctions.h
+++ b/CMSIS/NN/Include/arm_nnsupportfunctions.h
@@ -43,6 +43,9 @@
#define Q31_MIN (0x80000000L)
#define Q31_MAX (0x7FFFFFFFL)
+#define MAX(A,B) (A) > (B) ? (A) : (B)
+#define MIN(A,B) (A) < (B) ? (A) : (B)
+
/**
* @brief Union for SIMD access of Q31/Q15/Q7 types
*/
@@ -124,9 +127,9 @@
* @brief read and expand one Q7 word into two Q15 words with reordering
*/
-__STATIC_FORCEINLINE void *read_and_pad_reordered(void *source, q31_t * out1, q31_t * out2)
+__STATIC_FORCEINLINE q7_t *read_and_pad_reordered(q7_t *source, q31_t * out1, q31_t * out2)
{
- q31_t inA = *__SIMD32(source)++;
+ q31_t inA = read_q7x4_ia(&source);
#ifndef ARM_MATH_BIG_ENDIAN
*out2 = __SXTB16(__ROR(inA, 8));
*out1 = __SXTB16(inA);
@@ -137,7 +140,31 @@
return source;
}
+
+/**
+ * @brief read and expand one Q7 word into two Q15 words with reordering and add an offset
+ */
+__STATIC_FORCEINLINE q7_t *read_and_pad_reordered_with_offset(q7_t *source, q31_t * out1, q31_t * out2,q31_t offset)
+{
+ q31_t inA = read_q7x4_ia(&source);
+
+#ifndef ARM_MATH_BIG_ENDIAN
+ *out2 = __SXTB16(__ROR(inA, 8));
+ *out1 = __SXTB16(inA);
+#else
+ *out1 = __SXTB16(__ROR(inA, 8));
+ *out2 = __SXTB16(inA);
#endif
+ *out1 = __QADD16(*out1,offset);
+ *out2 = __QADD16(*out2,offset);
+
+ return source;
+}
+
+
+#endif
+
+
/**
* @defgroup NNBasicMath Basic Math Functions for Neural Network Computation
diff --git a/CMSIS/NN/Source/ActivationFunctions/CMakeLists.txt b/CMSIS/NN/Source/ActivationFunctions/CMakeLists.txt
new file mode 100644
index 0000000..3443a5a
--- /dev/null
+++ b/CMSIS/NN/Source/ActivationFunctions/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required (VERSION 3.6)
+
+project(CMSISNNActivation)
+
+include(config)
+
+file(GLOB SRC "./*_*.c")
+
+add_library(CMSISNNActivation STATIC ${SRC})
+
+configLib(CMSISNNActivation ${ROOT})
+configDsp(CMSISNNActivation ${ROOT})
+
+### Includes
+target_include_directories(CMSISNNActivation PUBLIC "${NN}/Include")
+target_include_directories(CMSISNNActivation PUBLIC "${ROOT}/CMSIS/DSP/Include")
+
+
+
diff --git a/CMSIS/NN/Source/CMakeLists.txt b/CMSIS/NN/Source/CMakeLists.txt
new file mode 100644
index 0000000..032bb68
--- /dev/null
+++ b/CMSIS/NN/Source/CMakeLists.txt
@@ -0,0 +1,71 @@
+cmake_minimum_required (VERSION 3.6)
+cmake_policy(SET CMP0077 NEW)
+project(CMSISNN)
+
+include(config)
+# Needed to find the config modules
+list(APPEND CMAKE_MODULE_PATH ${ROOT}/CMSIS/DSP)
+
+
+# Select which parts of the CMSIS-DSP must be compiled.
+# There are some dependencies between the parts but they are not tracked
+# by this cmake. So, enabling some functions may require to enable some
+# other ones.
+option(FULLYCONNECTED "Fully Connected" ON)
+option(CONVOLUTION "Convolutions" ON)
+option(ACTIVATION "Activations" ON)
+option(POOLING "Pooling" ON)
+option(SOFTMAX "Softmax" ON)
+
+# When OFF it is the default behavior : all tables are included.
+option(NNSUPPORT "NN Support" ON)
+
+
+###########################
+#
+# CMSIS NN
+#
+###########################
+
+# DSP Sources
+SET(NN ${ROOT}/CMSIS/NN)
+
+list(APPEND CMAKE_MODULE_PATH ${NN}/Source)
+
+add_library(CMSISNN INTERFACE)
+
+if (FULLYCONNECTED)
+ add_subdirectory(FullyConnectedFunctions)
+ target_link_libraries(CMSISNN INTERFACE CMSISNNFullyConnected)
+endif()
+
+if (CONVOLUTION)
+ add_subdirectory(ConvolutionFunctions)
+ target_link_libraries(CMSISNN INTERFACE CMSISNNConvolutions)
+endif()
+
+if (ACTIVATION)
+ add_subdirectory(ActivationFunctions)
+ target_link_libraries(CMSISNN INTERFACE CMSISNNActivation)
+endif()
+
+if (POOLING)
+ add_subdirectory(PoolingFunctions)
+ target_link_libraries(CMSISNN INTERFACE CMSISNNPooling)
+endif()
+
+if (SOFTMAX)
+ add_subdirectory(SoftmaxFunctions)
+ target_link_libraries(CMSISNN INTERFACE CMSISNNSoftmax)
+endif()
+
+if (NNSUPPORT)
+ add_subdirectory(NNSupportFunctions)
+ target_link_libraries(CMSISNN INTERFACE CMSISNNSupport)
+endif()
+
+### Includes
+target_include_directories(CMSISDSP INTERFACE "${NN}/Include")
+
+
+
diff --git a/CMSIS/NN/Source/ConvolutionFunctions/CMakeLists.txt b/CMSIS/NN/Source/ConvolutionFunctions/CMakeLists.txt
new file mode 100644
index 0000000..22ecd24
--- /dev/null
+++ b/CMSIS/NN/Source/ConvolutionFunctions/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required (VERSION 3.6)
+
+project(CMSISNNConvolutions)
+
+include(config)
+
+file(GLOB SRC "./*_*.c")
+
+add_library(CMSISNNConvolutions STATIC ${SRC})
+
+configLib(CMSISNNConvolutions ${ROOT})
+configDsp(CMSISNNConvolutions ${ROOT})
+
+### Includes
+target_include_directories(CMSISNNConvolutions PUBLIC "${NN}/Include")
+target_include_directories(CMSISNNConvolutions PUBLIC "${ROOT}/CMSIS/DSP/Include")
+
+
+
diff --git a/CMSIS/NN/Source/FullyConnectedFunctions/CMakeLists.txt b/CMSIS/NN/Source/FullyConnectedFunctions/CMakeLists.txt
new file mode 100644
index 0000000..16a0edb
--- /dev/null
+++ b/CMSIS/NN/Source/FullyConnectedFunctions/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required (VERSION 3.6)
+
+project(CMSISNNFullyConnected)
+
+include(config)
+
+file(GLOB SRC "./*_*.c")
+
+add_library(CMSISNNFullyConnected STATIC ${SRC})
+
+configLib(CMSISNNFullyConnected ${ROOT})
+configDsp(CMSISNNFullyConnected ${ROOT})
+
+### Includes
+target_include_directories(CMSISNNFullyConnected PUBLIC "${NN}/Include")
+target_include_directories(CMSISNNFullyConnected PUBLIC "${ROOT}/CMSIS/DSP/Include")
+
+
+
diff --git a/CMSIS/NN/Source/FullyConnectedFunctions/arm_fully_connected_s8.c b/CMSIS/NN/Source/FullyConnectedFunctions/arm_fully_connected_s8.c
new file mode 100644
index 0000000..a145ce6
--- /dev/null
+++ b/CMSIS/NN/Source/FullyConnectedFunctions/arm_fully_connected_s8.c
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2010-2019 Arm Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* ----------------------------------------------------------------------
+ * Project: CMSIS NN Library
+ * Title: arm_fully_connected_s8
+ * Description: Fully connected function compatible with TF Lite.
+ *
+ * $Date: 10. July 2019
+ * $Revision: V.1.0.0
+ *
+ * Target Processor: Cortex-M and Cortex-A cores
+ *
+ * -------------------------------------------------------------------- */
+
+#include "arm_math.h"
+#include "arm_nnfunctions.h"
+
+/**
+ * @ingroup groupNN
+ */
+
+/**
+ * @addtogroup FC
+ * @{
+ */
+
+ /**
+ * @brief S8 basic fully-connected layer function for TF Lite
+ * @param[in] pInput pointer to pInput vector
+ * @param[in] pWeight pointer to matrix weights
+ * @param[in] col_dim dimension of the input vector
+ * @param[in] row_dim dimension of the output vector
+ * @param[in] nb_batches number of batches
+ * @param[in] input_offset
+ * @param[in] filter_offset
+ * @param[in] out_mult requantization parameter
+ * @param[in] out_shift requantization parameter
+ * @param[in] output_offset
+ * @param[in] pBias pointer to bias
+ * @param[out] pOut pointer to output vector
+ * @param[in] output_activation_min for clamping
+ * @param[in] output_activation_max for clamping
+ * @param[in,out] vec_buffer pointer to buffer space for pInput
+ * @return The function returns ARM_MATH_SUCCESS
+ *
+ * @details
+ *
+ * <b>Buffer size:</b>
+ *
+ * vec_buffer size: col_dim of word16.
+ *
+ * This basic function is designed to work with regular pWeight
+ * matrix without interleaving.
+ *
+ */
+
+
+
+arm_status
+arm_fully_connected_s8(const int8_t *pInput,
+ const int8_t *pWeight,
+ const uint16_t col_dim,
+ const uint16_t row_dim,
+ const uint16_t nb_batches,
+ const int32_t input_offset,
+ const int32_t filter_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t output_offset,
+ const int8_t *pBias,
+ int8_t *pOut,
+ const int32_t output_activation_min,
+ const int32_t output_activation_max,
+ q15_t *vec_buffer)
+{
+#if defined(ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP)
+ q31_t acc;
+
+ uint16_t batchCnt = nb_batches;
+
+ /* CMSIS-DSP and NN are generally using q7 and q15 types.
+ Here we are computing with s8 and not q7.
+ So, q7_t is not really the right type to use but
+ it is kept for consistency with some function APIs
+ which are used in this implementation.
+
+ */
+ const int8_t *pBiasTmp = pBias;
+ const q7_t *pB = pWeight;
+ const q7_t *pB2;
+ q7_t *pO = pOut;
+ q15_t *pA;
+ q31_t ioffset;
+ q31_t foffset;
+
+ ioffset = ((input_offset & 0x0FFFF) << 16) | (input_offset & 0x0FFFF);
+ foffset = ((filter_offset & 0x0FFFF) << 16) | (filter_offset & 0x0FFFF);
+
+while(batchCnt)
+{
+ pBiasTmp = pBias;
+ pB = pWeight;
+ arm_q7_to_q15_reordered_no_shift(pInput, vec_buffer, col_dim);
+ uint16_t rowCnt = row_dim >> 1;
+ /* Unroll on the rows */
+ while (rowCnt)
+ {
+ q31_t sum = (q31_t)(*pBiasTmp++);
+ q31_t sum2 = (q31_t)(*pBiasTmp++);
+ uint16_t colCnt = col_dim >> 2;
+
+ pA = vec_buffer;
+ pB2 = pB + col_dim;
+
+ /* Vectorize on the columns */
+ while (colCnt)
+ {
+ q31_t inV, inM11, inM12, inM21, inM22;
+ pB = read_and_pad_reordered_with_offset((q7_t *)pB, &inM11, &inM12,foffset);
+ pB2 = read_and_pad_reordered_with_offset((q7_t *)pB2, &inM21, &inM22,foffset);
+
+ inV = read_q15x2_ia(&pA);
+ inV = __QADD16(inV,ioffset);
+
+ sum = __SMLAD(inV, inM11, sum);
+ sum2 = __SMLAD(inV, inM21, sum2);
+
+ inV = read_q15x2_ia(&pA);
+ inV = __QADD16(inV,ioffset);
+
+ sum = __SMLAD(inV, inM12, sum);
+ sum2 = __SMLAD(inV, inM22, sum2);
+
+ colCnt--;
+ }
+
+ /* Column vector tail */
+ colCnt = col_dim & 0x3;
+ while (colCnt)
+ {
+ q15_t inV = *pA++;
+ q7_t inM = *pB++;
+ q7_t inM2 = *pB2++;
+
+ sum += (inV + input_offset) * (inM + filter_offset);
+ sum2 += (inV + input_offset) * (inM2 + filter_offset);
+ colCnt--;
+ }
+
+ acc = arm_nn_sat_doubling_high_mult(sum * (1 << LEFT_SHIFT(out_shift)), out_mult);
+ acc = arm_nn_divide_by_power_of_two(acc,RIGHT_SHIFT(out_shift));
+ acc += output_offset;
+ acc = MAX(acc, output_activation_min);
+ acc = MIN(acc, output_activation_max);
+
+ *pO++ = (q7_t) (acc);
+
+ acc = arm_nn_sat_doubling_high_mult(sum2 * (1 << LEFT_SHIFT(out_shift)), out_mult);
+ acc = arm_nn_divide_by_power_of_two(acc,RIGHT_SHIFT(out_shift));
+ acc += output_offset;
+ acc = MAX(acc, output_activation_min);
+ acc = MIN(acc, output_activation_max);
+ *pO++ = (q7_t) (acc);
+
+
+ pB += col_dim;
+ rowCnt--;
+ }
+
+ /* left-over part of the rows */
+ rowCnt = row_dim & 0x1;
+
+ while (rowCnt)
+ {
+ uint16_t colCnt = col_dim >> 2;
+ q31_t sum = (q31_t)(*pBiasTmp++);
+
+ pA = vec_buffer;
+
+ /* Vectorize on the columns */
+ while (colCnt)
+ {
+ q31_t inV, inM11, inM12;
+
+ pB = read_and_pad_reordered_with_offset((q7_t *)pB, &inM11, &inM12, foffset);
+
+ inV = read_q15x2_ia(&pA);
+ inV = __QADD16(inV,ioffset);
+
+ sum = __SMLAD(inV, inM11, sum);
+
+ inV = read_q15x2_ia(&pA);
+ inV = __QADD16(inV,ioffset);
+
+ sum = __SMLAD(inV, inM12, sum);
+
+ colCnt--;
+ }
+
+ /* Column vector tail */
+ colCnt = col_dim & 0x3;
+
+ while (colCnt)
+ {
+ q15_t inV = *pA++;
+ q7_t inM = *pB++;
+ sum += (inV + input_offset) * (inM + filter_offset);
+ colCnt--;
+ }
+
+ acc = arm_nn_sat_doubling_high_mult(sum * (1 << LEFT_SHIFT(out_shift)), out_mult);
+ acc = arm_nn_divide_by_power_of_two(acc,RIGHT_SHIFT(out_shift));
+ acc += output_offset;
+ acc = MAX(acc, output_activation_min);
+ acc = MIN(acc, output_activation_max);
+ *pO++ = (q7_t) (acc);
+
+ rowCnt--;
+ }
+ pInput += col_dim;
+ batchCnt--;
+ }
+ return(ARM_MATH_SUCCESS);
+
+#else
+ const int8_t *pInputA;
+ const int8_t *pBiasTmp = pBias;
+ const int8_t *pWeightTmp = pWeight;
+ uint16_t batchCnt = nb_batches;
+
+while(batchCnt)
+{
+ pBiasTmp = pBias;
+ pWeightTmp = pWeight;
+ for (int out_c = 0; out_c < row_dim; out_c++)
+ {
+
+ int32_t acc = *pBiasTmp++;
+ pInputA = pInput;
+ for (int d = 0; d < col_dim; d++)
+ {
+
+ int32_t input_val = *pInputA++;
+
+ int32_t filter_val = *pWeightTmp++;
+
+ acc += (filter_val + filter_offset) * (input_val + input_offset);
+ }
+
+
+ acc = arm_nn_sat_doubling_high_mult(acc * (1 << LEFT_SHIFT(out_shift)), out_mult);
+ acc = arm_nn_divide_by_power_of_two(acc,RIGHT_SHIFT(out_shift));
+
+ acc += output_offset;
+
+ acc = MAX(acc, output_activation_min);
+ acc = MIN(acc, output_activation_max);
+
+
+ *pOut++ = (uint8_t)(acc);
+
+ }
+ pInput += col_dim;
+ batchCnt--;
+}
+ return(ARM_MATH_SUCCESS);
+#endif /* defined(ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) */
+}
+/**
+ * @} end of FC group
+ */
diff --git a/CMSIS/NN/Source/NNSupportFunctions/CMakeLists.txt b/CMSIS/NN/Source/NNSupportFunctions/CMakeLists.txt
new file mode 100644
index 0000000..2365c47
--- /dev/null
+++ b/CMSIS/NN/Source/NNSupportFunctions/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required (VERSION 3.6)
+
+project(CMSISNNSupport)
+
+include(config)
+
+file(GLOB SRC "./*_*.c")
+
+add_library(CMSISNNSupport STATIC ${SRC})
+
+configLib(CMSISNNSupport ${ROOT})
+configDsp(CMSISNNSupport ${ROOT})
+
+### Includes
+target_include_directories(CMSISNNSupport PUBLIC "${NN}/Include")
+target_include_directories(CMSISNNSupport PUBLIC "${ROOT}/CMSIS/DSP/Include")
+
+
+
diff --git a/CMSIS/NN/Source/PoolingFunctions/CMakeLists.txt b/CMSIS/NN/Source/PoolingFunctions/CMakeLists.txt
new file mode 100644
index 0000000..0d914cf
--- /dev/null
+++ b/CMSIS/NN/Source/PoolingFunctions/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required (VERSION 3.6)
+
+project(CMSISNNPooling)
+
+include(config)
+
+file(GLOB SRC "./*_*.c")
+
+add_library(CMSISNNPooling STATIC ${SRC})
+
+configLib(CMSISNNPooling ${ROOT})
+configDsp(CMSISNNPooling ${ROOT})
+
+### Includes
+target_include_directories(CMSISNNPooling PUBLIC "${NN}/Include")
+target_include_directories(CMSISNNPooling PUBLIC "${ROOT}/CMSIS/DSP/Include")
+
+
+
diff --git a/CMSIS/NN/Source/SoftmaxFunctions/CMakeLists.txt b/CMSIS/NN/Source/SoftmaxFunctions/CMakeLists.txt
new file mode 100644
index 0000000..db5499e
--- /dev/null
+++ b/CMSIS/NN/Source/SoftmaxFunctions/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required (VERSION 3.6)
+
+project(CMSISNNSoftmax)
+
+include(config)
+
+file(GLOB SRC "./*_*.c")
+
+add_library(CMSISNNSoftmax STATIC ${SRC})
+
+configLib(CMSISNNSoftmax ${ROOT})
+configDsp(CMSISNNSoftmax ${ROOT})
+
+### Includes
+target_include_directories(CMSISNNSoftmax PUBLIC "${NN}/Include")
+target_include_directories(CMSISNNSoftmax PUBLIC "${ROOT}/CMSIS/DSP/Include")
+
+
+