From 2d3a2166d62c48cf439fad679153667858c0a89f Mon Sep 17 00:00:00 2001 From: Christophe Favergeon Date: Fri, 27 Sep 2019 09:11:00 +0200 Subject: [PATCH] CMSIS-DSP: Added more control for MVE compilation flags. Now there are ARM_MATH_MVEF and ARM_MATH_MVEI. --- Include/arm_helium_utils.h | 28 +++++++++++++++++++++++++--- Source/CMakeLists.txt | 4 +++- Testing/CMakeLists.txt | 2 +- configCore.cmake | 8 ++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/Include/arm_helium_utils.h b/Include/arm_helium_utils.h index 970088e2..85cf8042 100755 --- a/Include/arm_helium_utils.h +++ b/Include/arm_helium_utils.h @@ -29,7 +29,12 @@ #ifndef _ARM_UTILS_HELIUM_H_ #define _ARM_UTILS_HELIUM_H_ -#if defined (ARM_MATH_HELIUM) +/*************************************** + +Definitions available for MVEF and MVEI + +***************************************/ +#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) #define nbLanes(sz) (128/sz) @@ -56,6 +61,18 @@ const float16_t*: VEC_LANES_F16, \ default: "err") + + +#define post_incr_vec_size(ptr) ptr += nb_vec_lanes(ptr) + +#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) */ + +/*************************************** + +Definitions available for MVEF only + +***************************************/ +#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) __STATIC_FORCEINLINE float32_t vecAddAcrossF32Mve(float32x4_t in) { float32_t acc; @@ -65,9 +82,14 @@ __STATIC_FORCEINLINE float32_t vecAddAcrossF32Mve(float32x4_t in) return acc; } +#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) */ -#define post_incr_vec_size(ptr) ptr += nb_vec_lanes(ptr) +/*************************************** + +Definitions available for MVEI only -#endif +***************************************/ +#if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) +#endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) */ #endif \ No newline at end of file diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index b1a13793..7cfdb5b0 100755 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -17,7 +17,9 @@ option(NEONEXPERIMENTAL "Neon experimental acceleration" OFF) option(LOOPUNROLL "Loop unrolling" ON) option(ROUNDING "Rounding" OFF) option(MATRIXCHECK "Matrix Checks" OFF) -option(HELIUM "Helium acceleration" OFF) +option(HELIUM "Helium acceleration (MVEF and MVEI supported)" OFF) +option(MVEF "MVEF intrinsics supported" OFF) +option(MVEI "MVEI intrinsics supported" OFF) # Select which parts of the CMSIS-DSP must be compiled. # There are some dependencies between the parts but they are not tracked diff --git a/Testing/CMakeLists.txt b/Testing/CMakeLists.txt index 42e189c1..c365c4fa 100644 --- a/Testing/CMakeLists.txt +++ b/Testing/CMakeLists.txt @@ -33,7 +33,7 @@ function(writeConfig path) list(APPEND output ",0") endif() - if (HELIUM) + if (HELIUM OR MVEI OR MVEF) list(APPEND output ",1") else() list(APPEND output ",0") diff --git a/configCore.cmake b/configCore.cmake index 5ff20554..d3d387d6 100644 --- a/configCore.cmake +++ b/configCore.cmake @@ -192,6 +192,14 @@ function(configcore PROJECTNAME ROOT) target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_HELIUM) endif() + if (MVEF AND CORTEXM) + target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEF) + endif() + + if (MVEI AND CORTEXM) + target_compile_definitions(${PROJECTNAME} PRIVATE ARM_MATH_MVEI) + endif() + compilerSpecificCompileOptions(${PROJECTNAME} ${ROOT}) endfunction() \ No newline at end of file