CMSIS-DSP: Added new compilation define for MVE.

pull/19/head
Christophe Favergeon 5 years ago
parent ebcecdfa93
commit 3f4f217a35

@ -143,7 +143,13 @@
* *
* - ARM_MATH_HELIUM: * - ARM_MATH_HELIUM:
* *
* It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_FLOAT16. * 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: * - ARM_MATH_MVEF:
* *

@ -14,6 +14,7 @@ include(configLib)
option(NEON "Neon acceleration" OFF) option(NEON "Neon acceleration" OFF)
option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF) option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF)
option(HELIUMEXPERIMENTAL "Helium experimental acceleration" OFF)
option(LOOPUNROLL "Loop unrolling" ON) option(LOOPUNROLL "Loop unrolling" ON)
option(ROUNDING "Rounding" OFF) option(ROUNDING "Rounding" OFF)
option(MATRIXCHECK "Matrix Checks" OFF) option(MATRIXCHECK "Matrix Checks" OFF)

@ -47,7 +47,7 @@
@return none @return none
*/ */
#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) #if (defined(ARM_MATH_MVE_FLOAT16) && defined(ARM_MATH_HELIUM_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)
void arm_biquad_cascade_df2T_f16( void arm_biquad_cascade_df2T_f16(
const arm_biquad_cascade_df2T_instance_f16 * S, const arm_biquad_cascade_df2T_instance_f16 * S,
const float16_t * pSrc, const float16_t * pSrc,

@ -45,7 +45,7 @@
@param[in] blockSize number of samples to process @param[in] blockSize number of samples to process
@return none @return none
*/ */
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) #if (defined(ARM_MATH_MVEF) && defined(ARM_MATH_HELIUM_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h" #include "arm_helium_utils.h"
void arm_biquad_cascade_df2T_f32( void arm_biquad_cascade_df2T_f32(

@ -51,7 +51,7 @@
#pragma GCC warning "Scalar version of arm_biquad_cascade_stereo_df2T_f16 built. Helium version has build issues with gcc." #pragma GCC warning "Scalar version of arm_biquad_cascade_stereo_df2T_f16 built. Helium version has build issues with gcc."
#endif #endif
#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) && !defined(__CMSIS_GCC_H) #if (defined(ARM_MATH_MVE_FLOAT16) && defined(ARM_MATH_HELIUM_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) && !defined(__CMSIS_GCC_H)
void arm_biquad_cascade_stereo_df2T_f16( void arm_biquad_cascade_stereo_df2T_f16(
const arm_biquad_cascade_stereo_df2T_instance_f16 * S, const arm_biquad_cascade_stereo_df2T_instance_f16 * S,
const float16_t * pSrc, const float16_t * pSrc,

@ -45,7 +45,7 @@
@param[in] blockSize number of samples to process @param[in] blockSize number of samples to process
@return none @return none
*/ */
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) #if (defined(ARM_MATH_MVEF) && defined(ARM_MATH_HELIUM_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h" #include "arm_helium_utils.h"
void arm_biquad_cascade_stereo_df2T_f32( void arm_biquad_cascade_stereo_df2T_f32(

@ -27,6 +27,7 @@ config["MVEI"]=False
config["MVEF"]=False config["MVEF"]=False
config["NEON"]=False config["NEON"]=False
config["HELIUM"]=False config["HELIUM"]=False
config["HELIUMEXPERIMENTAL"]=False
config["Float16"]=True config["Float16"]=True
config["HOST"]=False config["HOST"]=False
@ -365,6 +366,9 @@ def interpretCmakeOptions(cmake):
if test(cmake,"MVEF"): if test(cmake,"MVEF"):
r.append("-DARM_MATH_MVEF") r.append("-DARM_MATH_MVEF")
if test(cmake,"HELIUMEXPERIMENTAL"):
r.append("-DARM_MATH_HELIUM_EXPERIMENTAL")
if test(cmake,"HELIUM") or test(cmake,"MVEF") or test(cmake,"MVEI"): if test(cmake,"HELIUM") or test(cmake,"MVEF") or test(cmake,"MVEI"):
r.append("-IPrivateInclude") r.append("-IPrivateInclude")
@ -508,6 +512,7 @@ if not forHost:
check(config,"ROUNDING") check(config,"ROUNDING")
check(config,"MATRIXCHECK") check(config,"MATRIXCHECK")
st.sidebar.header('Vector extensions')
st.sidebar.info("Enable vector code. It is not automatic for Neon. Use of Helium will enable new options to select some interpolation tables.") st.sidebar.info("Enable vector code. It is not automatic for Neon. Use of Helium will enable new options to select some interpolation tables.")
archi=st.sidebar.selectbox("Vector",('None','Helium','Neon')) archi=st.sidebar.selectbox("Vector",('None','Helium','Neon'))
if archi == 'Neon': if archi == 'Neon':
@ -515,6 +520,8 @@ if not forHost:
if archi == 'Helium': if archi == 'Helium':
multiselect(config,"MVE configuration",["MVEI","MVEF"]) multiselect(config,"MVE configuration",["MVEI","MVEF"])
HELIUM=True HELIUM=True
st.sidebar.info("When checked some experimental versions will be enabled and may be less performant than scalar version depending on the architecture.")
check(config,"HELIUMEXPERIMENTAL")
if archi != 'None': if archi != 'None':
st.sidebar.info("When autovectorization is on, pure C code will be compiled. The version with C intrinsics won't be compiled.") st.sidebar.info("When autovectorization is on, pure C code will be compiled. The version with C intrinsics won't be compiled.")
check(config,"AUTOVECTORIZE") check(config,"AUTOVECTORIZE")

@ -280,6 +280,10 @@ function(configcore PROJECTNAME ROOT)
target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL) target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_NEON_EXPERIMENTAL)
endif() endif()
if (HELIUMEXPERIMENTAL)
target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM_EXPERIMENTAL)
endif()
if (HELIUM AND CORTEXM) if (HELIUM AND CORTEXM)
target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM) target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM)
endif() endif()

Loading…
Cancel
Save