From 70c70f2f0ae28f7e26307150e947c5daad9af5e6 Mon Sep 17 00:00:00 2001 From: Dijo Paul C Date: Thu, 30 Jul 2026 19:29:42 +0530 Subject: [PATCH 1/2] Adding HiFi5 support Changes are in backend/cadence only --- backends/cadence/CMakeLists.txt | 12 +++++++++ backends/cadence/cadence.cmake | 4 +-- backends/cadence/hifi/kernels/CMakeLists.txt | 16 +++++++++--- backends/cadence/hifi/kernels/kernels.cpp | 5 ++++ .../hifi/third-party/nnlib/CMakeLists.txt | 8 +++++- .../third-party/nnlib/xa_nn_reduce_32_32.c | 6 ++++- backends/cadence/install_requirements.sh | 26 +++++++++++++------ 7 files changed, 61 insertions(+), 16 deletions(-) diff --git a/backends/cadence/CMakeLists.txt b/backends/cadence/CMakeLists.txt index c4bcd47f343..44e7d3fc619 100644 --- a/backends/cadence/CMakeLists.txt +++ b/backends/cadence/CMakeLists.txt @@ -82,6 +82,18 @@ if(EXECUTORCH_NNLIB_OPT) ${EXECUTORCH_ROOT}/runtime/core/portable_type/c10 ) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) +elseif(EXECUTORCH_HIFI_CORE STREQUAL "hifi1" OR EXECUTORCH_HIFI_CORE STREQUAL + "hifi4" +) + add_compile_definitions(CORE_HIFI5=0) + set(TARGET_DIR hifi) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/third-party/nnlib) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) +elseif(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + add_compile_definitions(CORE_HIFI5=1) + set(TARGET_DIR hifi) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/third-party/nnlib) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) elseif(EXECUTORCH_FUSION_G3_OPT) set(TARGET_DIR fusion_g3) add_subdirectory( diff --git a/backends/cadence/cadence.cmake b/backends/cadence/cadence.cmake index 1bd5a8db0e0..8654a3194a3 100644 --- a/backends/cadence/cadence.cmake +++ b/backends/cadence/cadence.cmake @@ -42,10 +42,10 @@ set(CMAKE_C_COMPILER ${TOOLCHAIN_HOME}/bin/${CROSS_COMPILE_TARGET}-clang) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_HOME}/bin/${CROSS_COMPILE_TARGET}-clang++) set(CMAKE_C_FLAGS_INIT - "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0" + "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0 -O3 -mcoproc -LNO:simd -ffunction-sections -fsigned-char -INLINE:requested -fno-zero-initialized-in-bss -fmessage-length=0" ) set(CMAKE_CXX_FLAGS_INIT - "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0" + "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0 -O3 -mcoproc -LNO:simd -ffunction-sections -fsigned-char -INLINE:requested -fno-zero-initialized-in-bss -fmessage-length=0" ) # workaround for larger compilation time set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -fno-strict-aliasing") diff --git a/backends/cadence/hifi/kernels/CMakeLists.txt b/backends/cadence/hifi/kernels/CMakeLists.txt index a7ea9f5963c..826e93291e4 100644 --- a/backends/cadence/hifi/kernels/CMakeLists.txt +++ b/backends/cadence/hifi/kernels/CMakeLists.txt @@ -23,14 +23,22 @@ set(_common_include_directories ${EXECUTORCH_ROOT}/.. ${EXECUTORCH_ROOT}/runtime/core/portable_type/c10 ) +if(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + set(NNLIB_DIR_NAME "nnlib-hifi5") + set(NNLIB_ARCH_DIR "hifi5") +else() + set(NNLIB_DIR_NAME "nnlib-hifi4") + set(NNLIB_ARCH_DIR "hifi4") +endif() + target_include_directories( cadence_kernels PUBLIC . - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/algo/common/include/ - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/include/nnlib - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/include - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/algo/ndsp/hifi4/include/ + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/algo/common/include/ + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/include/nnlib + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/include + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/algo/ndsp/${NNLIB_ARCH_DIR}/include/ ${_common_include_directories} ) diff --git a/backends/cadence/hifi/kernels/kernels.cpp b/backends/cadence/hifi/kernels/kernels.cpp index 07f0ac960b1..f40365e8dcf 100644 --- a/backends/cadence/hifi/kernels/kernels.cpp +++ b/backends/cadence/hifi/kernels/kernels.cpp @@ -8,7 +8,12 @@ #include #include + +#if CORE_HIFI5 +#include +#else #include +#endif namespace impl { namespace HiFi { diff --git a/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt b/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt index 90eca6b47e1..5e552fe1cc8 100644 --- a/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt +++ b/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt @@ -1,11 +1,17 @@ cmake_minimum_required(VERSION 3.10.0) project(cadence_nnlib) +if(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + set(NNLIB_DIR_NAME "nnlib-hifi5") +else() + set(NNLIB_DIR_NAME "nnlib-hifi4") +endif() + add_custom_target( nnlib_target ALL COMMAND make install_nnlib -f makefile -C - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/build + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/build OBJDIR=${CMAKE_CURRENT_BINARY_DIR}/obj LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/lib -j8 ) diff --git a/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c b/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c index fcc89260be4..99b18f5506a 100644 --- a/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c +++ b/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c @@ -1,7 +1,11 @@ #include "xa_nnlib_common.h" #include //#include "xa_nn_basic_state.h" -#include "xa_nnlib_common_macros.h" +#if CORE_HIFI5 +#include +#else +#include +#endif #define ALIGNMENT_8 8 diff --git a/backends/cadence/install_requirements.sh b/backends/cadence/install_requirements.sh index 88c5bdb21d1..7ca5f45670d 100755 --- a/backends/cadence/install_requirements.sh +++ b/backends/cadence/install_requirements.sh @@ -10,7 +10,8 @@ green=`tput setaf 2` EXECUTORCH_ROOT_PATH=$(realpath "$SCRIPT_DIR_PATH/../../") CADENCE_DIR_PATH="$EXECUTORCH_ROOT_PATH/backends/cadence" -HIFI_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-hifi4" +HIFI4_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-hifi4" +HIFI5_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-hifi5" FUSION_DIR_PATH="$CADENCE_DIR_PATH/fusion_g3/third-party/nnlib/nnlib-FusionG3" FACTO_DIR_PATH="$CADENCE_DIR_PATH/utils/FACTO" @@ -18,20 +19,29 @@ cd "$EXECUTORCH_ROOT_PATH" ## HiFi -rm -rf "$HIFI_DIR_PATH" -mkdir -p "$HIFI_DIR_PATH" +rm -rf "$HIFI4_DIR_PATH" +mkdir -p "$HIFI4_DIR_PATH" -echo "${green}ExecuTorch: Cloning hifi nnlib" -git clone "https://github.com/foss-xtensa/nnlib-hifi4.git" $HIFI_DIR_PATH -cd $HIFI_DIR_PATH +echo "${green}ExecuTorch: Cloning hifi4 nnlib" +git clone "https://github.com/foss-xtensa/nnlib-hifi4.git" $HIFI4_DIR_PATH +cd $HIFI4_DIR_PATH STATUS=$? if [ $STATUS -ne 0 ]; then - echo "${red}ExecuTorch: Failed to clone hifi nnlib." + echo "${red}ExecuTorch: Failed to clone hifi4 nnlib." exit 1 fi -git checkout 64d73d729797388b0e346794d7a2e408374a74de +rm -rf "$HIFI5_DIR_PATH" +mkdir -p "$HIFI5_DIR_PATH" +echo "${green}ExecuTorch: Cloning hifi5 nnlib" +git clone "https://github.com/foss-xtensa/nnlib-hifi5.git" $HIFI5_DIR_PATH +cd $HIFI5_DIR_PATH +STATUS=$? +if [ $STATUS -ne 0 ]; then + echo "${red}ExecuTorch: Failed to clone hifi5 nnlib." + exit 1 +fi ## Fusion G3 From 01ee163509ef73da3cd5a3c35bc52d0b70984351 Mon Sep 17 00:00:00 2001 From: Dijo Paul C Date: Fri, 31 Jul 2026 12:06:24 +0530 Subject: [PATCH 2/2] Add HiFi5 support in Cadence backend - fix review comments --- backends/cadence/CMakeLists.txt | 17 ++++++----- backends/cadence/install_requirements.sh | 37 ++++++++++-------------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/backends/cadence/CMakeLists.txt b/backends/cadence/CMakeLists.txt index 44e7d3fc619..b5d72529bc2 100644 --- a/backends/cadence/CMakeLists.txt +++ b/backends/cadence/CMakeLists.txt @@ -82,15 +82,16 @@ if(EXECUTORCH_NNLIB_OPT) ${EXECUTORCH_ROOT}/runtime/core/portable_type/c10 ) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) -elseif(EXECUTORCH_HIFI_CORE STREQUAL "hifi1" OR EXECUTORCH_HIFI_CORE STREQUAL - "hifi4" +elseif( + EXECUTORCH_HIFI_CORE STREQUAL "hifi1" + OR EXECUTORCH_HIFI_CORE STREQUAL "hifi4" + OR EXECUTORCH_HIFI_CORE STREQUAL "hifi5" ) - add_compile_definitions(CORE_HIFI5=0) - set(TARGET_DIR hifi) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/third-party/nnlib) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) -elseif(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") - add_compile_definitions(CORE_HIFI5=1) + if(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + add_compile_definitions(CORE_HIFI5=1) + else() + add_compile_definitions(CORE_HIFI5=0) + endif() set(TARGET_DIR hifi) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/third-party/nnlib) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) diff --git a/backends/cadence/install_requirements.sh b/backends/cadence/install_requirements.sh index 7ca5f45670d..bb642b1696a 100755 --- a/backends/cadence/install_requirements.sh +++ b/backends/cadence/install_requirements.sh @@ -10,8 +10,6 @@ green=`tput setaf 2` EXECUTORCH_ROOT_PATH=$(realpath "$SCRIPT_DIR_PATH/../../") CADENCE_DIR_PATH="$EXECUTORCH_ROOT_PATH/backends/cadence" -HIFI4_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-hifi4" -HIFI5_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-hifi5" FUSION_DIR_PATH="$CADENCE_DIR_PATH/fusion_g3/third-party/nnlib/nnlib-FusionG3" FACTO_DIR_PATH="$CADENCE_DIR_PATH/utils/FACTO" @@ -19,29 +17,24 @@ cd "$EXECUTORCH_ROOT_PATH" ## HiFi -rm -rf "$HIFI4_DIR_PATH" -mkdir -p "$HIFI4_DIR_PATH" +targets=(hifi4 hifi5) -echo "${green}ExecuTorch: Cloning hifi4 nnlib" -git clone "https://github.com/foss-xtensa/nnlib-hifi4.git" $HIFI4_DIR_PATH -cd $HIFI4_DIR_PATH -STATUS=$? -if [ $STATUS -ne 0 ]; then - echo "${red}ExecuTorch: Failed to clone hifi4 nnlib." - exit 1 -fi +for target in ${targets[@]}; +do + TARGET_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-$target" -rm -rf "$HIFI5_DIR_PATH" -mkdir -p "$HIFI5_DIR_PATH" + rm -rf "$TARGET_DIR_PATH" + mkdir -p "$TARGET_DIR_PATH" -echo "${green}ExecuTorch: Cloning hifi5 nnlib" -git clone "https://github.com/foss-xtensa/nnlib-hifi5.git" $HIFI5_DIR_PATH -cd $HIFI5_DIR_PATH -STATUS=$? -if [ $STATUS -ne 0 ]; then - echo "${red}ExecuTorch: Failed to clone hifi5 nnlib." - exit 1 -fi + echo "${green}ExecuTorch: Cloning $target nnlib" + git clone "https://github.com/foss-xtensa/nnlib-$target.git" $TARGET_DIR_PATH + cd $TARGET_DIR_PATH + STATUS=$? + if [ $STATUS -ne 0 ]; then + echo "${red}ExecuTorch: Failed to clone $target nnlib." + exit 1 + fi +done ## Fusion G3