/******************************************************************************
 * @file     arm_math.h
 * @brief    Public header file for CMSIS DSP Library
 * @version  V1.10.0
 * @date     08 July 2021
 * Target Processor: Cortex-M and Cortex-A cores
 ******************************************************************************/
/*
 * Copyright (c) 2010-2021 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.
 */

/**
   \mainpage CMSIS DSP Software Library
   *
   * \section intro Introduction
   *
   * This user manual describes the CMSIS DSP software library,
   * a suite of common compute processing functions for use on Cortex-M and Cortex-A processor 
   * based devices.
   *
   * The library is divided into a number of functions each covering a specific category:
   * - \ref groupMath "Basic math functions"
   * - \ref groupFastMath "Fast math functions"
   * - \ref groupCmplxMath "Complex math functions"
   * - \ref groupFilters "Filtering functions"
   * - \ref groupMatrix "Matrix functions"
   * - \ref groupTransforms "Transform functions"
   * - \ref groupController "Motor control functions"
   * - \ref groupStats "Statistical functions"
   * - \ref groupSupport "Support functions"
   * - \ref groupInterpolation "Interpolation functions"
   * - \ref groupSVM "Support Vector Machine functions (SVM)"
   * - \ref groupBayes "Bayes classifier functions"
   * - \ref groupDistance "Distance functions"
   * - \ref groupQuaternionMath "Quaternion functions"
   *
   * The library has generally separate functions for operating on 8-bit integers, 16-bit integers,
   * 32-bit integer and 32-bit floating-point values and 64-bit floating-point values.
   *
   * The library is providing vectorized versions of most algorthms for Helium
   * and of most f32 algorithms for Neon.
   *
   * When using a vectorized version, provide a little bit of padding after the end of
   * a buffer (3 words) because the vectorized code may read a little bit after the end
   * of a buffer. You don't have to modify your buffers but just ensure that the
   * end of buffer + padding is not outside of a memory region.
   *
   * CMSIS-DSP pack is containing an optional project : The CMSIS-DSP
   * Compute Graph. The documentation for this project is available
   * on the <a href="https://github.com/ARM-software/CMSIS-DSP/blob/main/ComputeGraph/README.md">CMSIS-DSP github repository.</a> 
   *
   * \section using Using the Library
   *
   * The library is released in source form. It is strongly advised to compile the library using -Ofast to
   * have the best performances.
   *
   * The library functions are declared in the public file `arm_math.h` which is placed in the `Include` folder.
   * Simply include this file. If you don't want to include everything, you can also rely
   * on headers in `Include/dsp` folder and use only what you need.
   *
   * \section example Examples
   *
   * The library ships with a number of examples which demonstrate how to use the library functions. Please refer to \ref groupExamples.
   *
   * \section toolchain Toolchain Support
   *
   * The library is now tested on Fast Models building with cmake.
   * Core M0, M4, M7, M33, M55, A32 are tested.
   *
   *
   * \section preprocessor Preprocessor Macros
   *
   * Each library project has different preprocessor macros.
   *
   * - `ARM_MATH_BIG_ENDIAN`:
   *  - Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.
   * .
   * - `ARM_MATH_MATRIX_CHECK`:
   *  - Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices
   * .
   * - `ARM_MATH_ROUNDING`:
   *  - Define macro ARM_MATH_ROUNDING for rounding on support functions
   * .
   * - `ARM_MATH_LOOPUNROLL`:
   *  - Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions
   * .
   * - `ARM_MATH_NEON`:
   *  - Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions.
   * It is not enabled by default when Neon is available because performances are 
   * dependent on the compiler and target architecture.
   * .
   * - `ARM_MATH_NEON_EXPERIMENTAL`:
   *  - Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of 
   * of some DSP functions. Experimental Neon versions currently do not have better
   * performances than the scalar versions.
   * .
   * - `ARM_MATH_HELIUM`:
   *  - It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_MVE_FLOAT16.
   * .
   * - `ARM_MATH_HELIUM_EXPERIMENTAL`:
   *  - Only taken into account when ARM_MATH_MVEF, ARM_MATH_MVEI or ARM_MATH_MVE_FLOAT16 are defined.
   * Enable some vector versions which may have worse performance than scalar
   * depending on the core / compiler configuration.
   * .
   * - `ARM_MATH_MVEF`:
   *  - Select Helium versions of the f32 algorithms.
   * It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI.
   * .
   * - `ARM_MATH_MVEI`:
   *  - Select Helium versions of the int and fixed point algorithms.
   * .
   * - `ARM_MATH_MVE_FLOAT16`:
   *  - MVE Float16 implementations of some algorithms (Requires MVE extension).
   * .
   * - `DISABLEFLOAT16`:
   *  - Disable float16 algorithms when __fp16 is not supported for a
   * specific compiler / core configuration.
   * This is only valid for scalar. When vector architecture is
   * supporting f16 then it can't be disabled.
   * .
   * - `ARM_MATH_AUTOVECTORIZE`:
   *  - With Helium or Neon, disable the use of vectorized code with C intrinsics
   * and use pure C instead. The vectorization is then done by the compiler.
   *
   * \section pack CMSIS-DSP in ARM::CMSIS Pack
   *
   * The following files relevant to CMSIS-DSP are present in the <b>ARM::CMSIS</b> Pack directories:
   * |File/Folder                      |Content                                                                 |
   * |---------------------------------|------------------------------------------------------------------------|
   * |\b CMSIS\\Documentation\\DSP     | This documentation                                                     |
   * |\b CMSIS\\DSP\\Examples          | Example projects demonstrating the usage of the library functions      |
   * |\b CMSIS\\DSP\\ComputeLibrary    | Small Neon kernels when building on Cortex-A
   * |\b CMSIS\\DSP\\Include           | include files for using and building the lib
   * |\b CMSIS\\DSP\\PrivateInclude    | private include files for building the lib                                               |
   * |\b CMSIS\\DSP\\Source            | source files                                                   |
   *
   * \section rev Revision History of CMSIS-DSP
   * Please refer to \ref ChangeLog_pg.
   *
   * \section license License
   * 
   * The CMSIS-DSP is provided free of charge under the <a href="LICENSE.txt">Apache 2.0 License</a>.
   */











/**
 * @defgroup groupExamples Examples
 */





#ifndef _ARM_MATH_H
#define _ARM_MATH_H


#include "arm_math_types.h"
#include "arm_math_memory.h"

#include "dsp/none.h"
#include "dsp/utils.h"

#include "dsp/basic_math_functions.h"  
#include "dsp/interpolation_functions.h"
#include "dsp/bayes_functions.h"
#include "dsp/matrix_functions.h"
#include "dsp/complex_math_functions.h"
#include "dsp/statistics_functions.h"
#include "dsp/controller_functions.h"
#include "dsp/support_functions.h"
#include "dsp/distance_functions.h"
#include "dsp/svm_functions.h"
#include "dsp/fast_math_functions.h"
#include "dsp/transform_functions.h"
#include "dsp/filtering_functions.h"
#include "dsp/quaternion_math_functions.h"



#ifdef   __cplusplus
extern "C"
{
#endif




//#define TABLE_SPACING_Q31     0x400000
//#define TABLE_SPACING_Q15     0x80





#ifdef   __cplusplus
}
#endif


#endif /* _ARM_MATH_H */

/**
 *
 * End of file.
 */
