错误信息:
In file included from /home/ubuntu/Nuclei/NMSIS-master/NMSIS/DSP/Source/BasicMathFunctions/riscv_dot_prod_q31.c:30:
In file included from /home/ubuntu/Nuclei/NMSIS-master/NMSIS/DSP/Include/dsp/basic_math_functions.h:31:
In file included from /home/ubuntu/Nuclei/NMSIS-master/NMSIS/DSP/Include/riscv_math_types.h:118:
In file included from /home/ubuntu/Nuclei/NMSIS-master/NMSIS/Core/Include/nmsis_core.h:83:
/home/ubuntu/Nuclei/NMSIS-master/NMSIS/Core/Include/core_feature_dsp.h:5977:20: error: register must be even
5977 | __ASM volatile(“mulsr64 %0, %1, %2” : “=r”(result) : “r”(a), “r”(b));
| ^
:1:10: note: instantiated into assembly here
1 | mulsr64 t0, t0, a5
| ^
1 error generated.
make[3]: *** [CMakeFiles/NMSISDSP.dir/build.make:440: CMakeFiles/NMSISDSP.dir/BasicMathFunctions/riscv_dot_prod_q31.c.o] Error 1
make[3]: *** Waiting for unfinished jobs…
使用的工具链:
root@ubuntu-virtual-machine:/home/ubuntu/Nuclei/NMSIS-master/NMSIS# zcc -v
Terapines LTD ZCC 4.1.4 (8d1072f256889284d32270fb71b080fb717215f0) based on LLVM 19.1.6 [ Non-commercial use ](124523
ivan
October 16, 2025, 2:52am
2
该问题在ZCC 4.1.5版本修复,可以直接使用安装带的Product-Manager 进行更新,或者重新下载安装 Terapines
如果对ZCC产品更新感兴趣可以登陆官网,在设置页面订阅产品更新邮件:OAuth Authorize | Terapines
ivan
October 16, 2025, 8:34am
6
非常感谢这里的反馈,我们已经复现了问题,该问题将在下一个版本进行修复
请问下个版本什么时候发布,能简单介绍下是啥问题吗?感觉和指令有关
ivan
October 16, 2025, 10:49am
8
该错误是ZCC内部对该指令处理的时候将最后一个操作数识别成了“寄存器对”,目前对于“寄存器对”在ZCC里限定其只能为偶数,这里因为在目前的代码中刚好生成的是单数寄存器(也就是说如果这里刚好生成一个偶数寄存器的话就不会报错),我们利用当前最新的nmsis进行构建的时候没有出现这个问题,可以尝试一下更新NMSIS, 或者可以先关闭NMSIS/DSP/Source/TransformFunctions/riscv_cfft_radix4_q15.c:286行的#if defined (NUCLEI_DSP_N3)。
我们会整体排查一下是否还有其他的指令的也存在同样的问题,确定具体的修复方案,下个版本预计在月底发出。
ivan
October 17, 2025, 2:53am
10
我们也是这里拿的,那看起来应该就不是源码的问题,可以临时屏蔽来使用。
我们暂时用了GCC编译出的3x.a库规避这个问题,等你们月底发布新的ZCC版本
wwhdx
October 20, 2025, 9:27am
12
@zhiyong.wang 你好,我们这边在汇编指令层级已经发现了这个问题和正在修复,但是我们在 nmsis 项目中没有复现这个问题。为了确保这个问题在你的项目中完全修复,可以提供你使用这个项目的构建参数吗?例如,make 命令、编译参数、项目修改的内容等。
以下是我们在 nmsis 项目的 zcc 适配及编译测试结果,在这个配置中尚未复现你遇到的问题。
130 ✗ (3m0s) 16:42:26 draco@draco ~/work/projects/nmsis $ git diff
diff --git a/NMSIS/DSP/Source/CMakeLists.txt b/NMSIS/DSP/Source/CMakeLists.txt
index edd938221..a4cbf5612 100755
--- a/NMSIS/DSP/Source/CMakeLists.txt
+++ b/NMSIS/DSP/Source/CMakeLists.txt
@@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.14)
project(NMSISDSP)
-SET(CMAKE_C_COMPILER riscv64-unknown-elf-gcc)
-SET(CMAKE_CXX_COMPILER riscv64-unknown-elf-g++)
+SET(CMAKE_C_COMPILER zcc)
+SET(CMAKE_CXX_COMPILER z++)
SET(CMAKE_AR riscv64-unknown-elf-ar)
# DSP Sources
@@ -25,7 +25,7 @@ add_definitions(-mcmodel=${RISCV_MODEL})
add_definitions(-g -O2 -ffunction-sections -fdata-sections)
# Disable auto vectorization
-add_definitions(-fno-tree-vectorize -fno-tree-loop-vectorize -fno-tree-slp-vectorize)
+# add_definitions(-fno-tree-vectorize -fno-tree-loop-vectorize -fno-tree-slp-vectorize)
if(LOOPUNROLL)
add_definitions(-DRISCV_MATH_LOOPUNROLL)
diff --git a/NMSIS/NN/Source/CMakeLists.txt b/NMSIS/NN/Source/CMakeLists.txt
index 95f208b1c..b358267c0 100644
--- a/NMSIS/NN/Source/CMakeLists.txt
+++ b/NMSIS/NN/Source/CMakeLists.txt
@@ -1,8 +1,8 @@
cmake_minimum_required (VERSION 3.14)
project(RISCV_NN)
-SET(CMAKE_C_COMPILER riscv64-unknown-elf-gcc)
-SET(CMAKE_CXX_COMPILER riscv64-unknown-elf-g++)
+SET(CMAKE_C_COMPILER zcc)
+SET(CMAKE_CXX_COMPILER z++)
SET(CMAKE_AR riscv64-unknown-elf-ar)
# NN Sources
@@ -42,7 +42,7 @@ add_definitions(-mcmodel=${RISCV_MODEL})
add_definitions(-g -O2 -ffunction-sections -fdata-sections)
# Disable auto vectorization
-add_definitions(-fno-tree-vectorize -fno-tree-loop-vectorize -fno-tree-slp-vectorize)
+# add_definitions(-fno-tree-vectorize -fno-tree-loop-vectorize -fno-tree-slp-vectorize)
if(LOOPUNROLL)
add_definitions(-DRISCV_MATH_LOOPUNROLL)
0 ✓ (8.1ms) 16:42:39 draco@draco ~/work/projects/nmsis $ make -C NMSIS/ gen -j >& build.log
0 ✓ (18m34s) 17:01:14 draco@draco ~/work/projects/nmsis $ tail -n 100 build.log
| Build Target | Status | Build Time | Build Log |
+------------------------------------------------------+--------+------------+--------------------------------------------------------------------------------+
| rv32imac | True | 9.71 | build/nmsis_dsp/rv32imac/build.log |
| rv32imac_zba_zbb_zbc_zbs | True | 10.77 | build/nmsis_dsp/rv32imac_zba_zbb_zbc_zbs/build.log |
| rv32imac_xxldsp | True | 12.98 | build/nmsis_dsp/rv32imac_xxldsp/build.log |
| rv32imac_xxldspn1x | True | 12.14 | build/nmsis_dsp/rv32imac_xxldspn1x/build.log |
| rv32imac_xxldspn2x | True | 11.9 | build/nmsis_dsp/rv32imac_xxldspn2x/build.log |
| rv32imac_xxldspn3x | True | 12.44 | build/nmsis_dsp/rv32imac_xxldspn3x/build.log |
| rv32imac_zba_zbb_zbc_zbs_xxldsp | True | 12.7 | build/nmsis_dsp/rv32imac_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imac_zba_zbb_zbc_zbs_xxldspn1x | True | 11.7 | build/nmsis_dsp/rv32imac_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv32imac_zba_zbb_zbc_zbs_xxldspn2x | True | 11.58 | build/nmsis_dsp/rv32imac_zba_zbb_zbc_zbs_xxldspn2x/build.log |
| rv32imac_zba_zbb_zbc_zbs_xxldspn3x | True | 12.91 | build/nmsis_dsp/rv32imac_zba_zbb_zbc_zbs_xxldspn3x/build.log |
| rv32imafc | True | 9.95 | build/nmsis_dsp/rv32imafc/build.log |
| rv32imafc_zba_zbb_zbc_zbs | True | 10.08 | build/nmsis_dsp/rv32imafc_zba_zbb_zbc_zbs/build.log |
| rv32imafc_xxldsp | True | 11.12 | build/nmsis_dsp/rv32imafc_xxldsp/build.log |
| rv32imafc_xxldspn1x | True | 11.33 | build/nmsis_dsp/rv32imafc_xxldspn1x/build.log |
| rv32imafc_xxldspn2x | True | 11.85 | build/nmsis_dsp/rv32imafc_xxldspn2x/build.log |
| rv32imafc_xxldspn3x | True | 12.17 | build/nmsis_dsp/rv32imafc_xxldspn3x/build.log |
| rv32imafc_zve32f | True | 13.78 | build/nmsis_dsp/rv32imafc_zve32f/build.log |
| rv32imafc_zba_zbb_zbc_zbs_xxldsp | True | 12.0 | build/nmsis_dsp/rv32imafc_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imafc_zba_zbb_zbc_zbs_xxldspn1x | True | 11.9 | build/nmsis_dsp/rv32imafc_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv32imafc_zba_zbb_zbc_zbs_xxldspn2x | True | 13.36 | build/nmsis_dsp/rv32imafc_zba_zbb_zbc_zbs_xxldspn2x/build.log |
| rv32imafc_zba_zbb_zbc_zbs_xxldspn3x | True | 11.65 | build/nmsis_dsp/rv32imafc_zba_zbb_zbc_zbs_xxldspn3x/build.log |
| rv32imafc_zve32f_zba_zbb_zbc_zbs | True | 15.03 | build/nmsis_dsp/rv32imafc_zve32f_zba_zbb_zbc_zbs/build.log |
| rv32imafc_zve32f_xxldsp | True | 14.67 | build/nmsis_dsp/rv32imafc_zve32f_xxldsp/build.log |
| rv32imafc_zve32f_xxldspn1x | True | 15.62 | build/nmsis_dsp/rv32imafc_zve32f_xxldspn1x/build.log |
| rv32imafc_zve32f_xxldspn2x | True | 15.64 | build/nmsis_dsp/rv32imafc_zve32f_xxldspn2x/build.log |
| rv32imafc_zve32f_xxldspn3x | True | 13.28 | build/nmsis_dsp/rv32imafc_zve32f_xxldspn3x/build.log |
| rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldsp | True | 12.26 | build/nmsis_dsp/rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldspn1x | True | 12.36 | build/nmsis_dsp/rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldspn2x | True | 13.67 | build/nmsis_dsp/rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldspn2x/build.log |
| rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldspn3x | True | 13.0 | build/nmsis_dsp/rv32imafc_zve32f_zba_zbb_zbc_zbs_xxldspn3x/build.log |
| rv32imafc_zfh | True | 9.22 | build/nmsis_dsp/rv32imafc_zfh/build.log |
| rv32imafc_zfh_zvfh_zve32f | True | 11.76 | build/nmsis_dsp/rv32imafc_zfh_zvfh_zve32f/build.log |
| rv32imafc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs | True | 11.51 | build/nmsis_dsp/rv32imafc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs/build.log |
| rv32imafc_zfh_zvfh_zve32f_xxldsp | True | 13.31 | build/nmsis_dsp/rv32imafc_zfh_zvfh_zve32f_xxldsp/build.log |
| rv32imafc_zfh_zvfh_zve32f_xxldspn1x | True | 13.23 | build/nmsis_dsp/rv32imafc_zfh_zvfh_zve32f_xxldspn1x/build.log |
| rv32imafc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldsp | True | 12.97 | build/nmsis_dsp/rv32imafc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imafc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldspn1x | True | 13.55 | build/nmsis_dsp/rv32imafc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv32imafdc | True | 68.89 | build/nmsis_dsp/rv32imafdc/build.log |
| rv32imafdc_zba_zbb_zbc_zbs | True | 8.33 | build/nmsis_dsp/rv32imafdc_zba_zbb_zbc_zbs/build.log |
| rv32imafdc_xxldsp | True | 9.03 | build/nmsis_dsp/rv32imafdc_xxldsp/build.log |
| rv32imafdc_xxldspn1x | True | 9.14 | build/nmsis_dsp/rv32imafdc_xxldspn1x/build.log |
| rv32imafdc_xxldspn2x | True | 9.13 | build/nmsis_dsp/rv32imafdc_xxldspn2x/build.log |
| rv32imafdc_xxldspn3x | True | 9.21 | build/nmsis_dsp/rv32imafdc_xxldspn3x/build.log |
| rv32imafdc_zve32f | True | 10.18 | build/nmsis_dsp/rv32imafdc_zve32f/build.log |
| rv32imafdc_zba_zbb_zbc_zbs_xxldsp | True | 9.19 | build/nmsis_dsp/rv32imafdc_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imafdc_zba_zbb_zbc_zbs_xxldspn1x | True | 8.91 | build/nmsis_dsp/rv32imafdc_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv32imafdc_zba_zbb_zbc_zbs_xxldspn2x | True | 9.17 | build/nmsis_dsp/rv32imafdc_zba_zbb_zbc_zbs_xxldspn2x/build.log |
| rv32imafdc_zba_zbb_zbc_zbs_xxldspn3x | True | 17.61 | build/nmsis_dsp/rv32imafdc_zba_zbb_zbc_zbs_xxldspn3x/build.log |
| rv32imafdc_zve32f_zba_zbb_zbc_zbs | True | 10.04 | build/nmsis_dsp/rv32imafdc_zve32f_zba_zbb_zbc_zbs/build.log |
| rv32imafdc_zve32f_xxldsp | True | 11.58 | build/nmsis_dsp/rv32imafdc_zve32f_xxldsp/build.log |
| rv32imafdc_zve32f_xxldspn1x | True | 11.28 | build/nmsis_dsp/rv32imafdc_zve32f_xxldspn1x/build.log |
| rv32imafdc_zve32f_xxldspn2x | True | 11.6 | build/nmsis_dsp/rv32imafdc_zve32f_xxldspn2x/build.log |
| rv32imafdc_zve32f_xxldspn3x | True | 11.57 | build/nmsis_dsp/rv32imafdc_zve32f_xxldspn3x/build.log |
| rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldsp | True | 11.54 | build/nmsis_dsp/rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldspn1x | True | 12.08 | build/nmsis_dsp/rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldspn2x | True | 11.84 | build/nmsis_dsp/rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldspn2x/build.log |
| rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldspn3x | True | 11.88 | build/nmsis_dsp/rv32imafdc_zve32f_zba_zbb_zbc_zbs_xxldspn3x/build.log |
| rv32imafdc_zfh | True | 8.86 | build/nmsis_dsp/rv32imafdc_zfh/build.log |
| rv32imafdc_zfh_zvfh_zve32f | True | 11.35 | build/nmsis_dsp/rv32imafdc_zfh_zvfh_zve32f/build.log |
| rv32imafdc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs | True | 11.01 | build/nmsis_dsp/rv32imafdc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs/build.log |
| rv32imafdc_zfh_zvfh_zve32f_xxldsp | True | 12.09 | build/nmsis_dsp/rv32imafdc_zfh_zvfh_zve32f_xxldsp/build.log |
| rv32imafdc_zfh_zvfh_zve32f_xxldspn1x | True | 11.81 | build/nmsis_dsp/rv32imafdc_zfh_zvfh_zve32f_xxldspn1x/build.log |
| rv32imafdc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldsp | True | 11.74 | build/nmsis_dsp/rv32imafdc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv32imafdc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldspn1x | True | 11.45 | build/nmsis_dsp/rv32imafdc_zfh_zvfh_zve32f_zba_zbb_zbc_zbs_xxldspn1x/build.log |
| rv64imac | True | 7.51 | build/nmsis_dsp/rv64imac/build.log |
| rv64imac_zba_zbb_zbc_zbs | True | 7.65 | build/nmsis_dsp/rv64imac_zba_zbb_zbc_zbs/build.log |
| rv64imac_xxldsp | True | 8.91 | build/nmsis_dsp/rv64imac_xxldsp/build.log |
| rv64imac_zba_zbb_zbc_zbs_xxldsp | True | 9.48 | build/nmsis_dsp/rv64imac_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv64imafc | True | 9.28 | build/nmsis_dsp/rv64imafc/build.log |
| rv64imafc_zba_zbb_zbc_zbs | True | 8.59 | build/nmsis_dsp/rv64imafc_zba_zbb_zbc_zbs/build.log |
| rv64imafc_xxldsp | True | 9.85 | build/nmsis_dsp/rv64imafc_xxldsp/build.log |
| rv64imafc_zve64f | True | 10.41 | build/nmsis_dsp/rv64imafc_zve64f/build.log |
| rv64imafc_zba_zbb_zbc_zbs_xxldsp | True | 9.03 | build/nmsis_dsp/rv64imafc_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv64imafc_zve64f_zba_zbb_zbc_zbs | True | 9.84 | build/nmsis_dsp/rv64imafc_zve64f_zba_zbb_zbc_zbs/build.log |
| rv64imafc_zve64f_xxldsp | True | 12.26 | build/nmsis_dsp/rv64imafc_zve64f_xxldsp/build.log |
| rv64imafc_zve64f_zba_zbb_zbc_zbs_xxldsp | True | 10.43 | build/nmsis_dsp/rv64imafc_zve64f_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv64imafc_zfh | True | 7.86 | build/nmsis_dsp/rv64imafc_zfh/build.log |
| rv64imafc_zfh_zvfh_zve64f | True | 10.29 | build/nmsis_dsp/rv64imafc_zfh_zvfh_zve64f/build.log |
| rv64imafc_zfh_zvfh_zve64f_zba_zbb_zbc_zbs | True | 9.96 | build/nmsis_dsp/rv64imafc_zfh_zvfh_zve64f_zba_zbb_zbc_zbs/build.log |
| rv64imafc_zfh_zvfh_zve64f_xxldsp | True | 11.14 | build/nmsis_dsp/rv64imafc_zfh_zvfh_zve64f_xxldsp/build.log |
| rv64imafc_zfh_zvfh_zve64f_zba_zbb_zbc_zbs_xxldsp | True | 11.93 | build/nmsis_dsp/rv64imafc_zfh_zvfh_zve64f_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv64imafdc | True | 7.49 | build/nmsis_dsp/rv64imafdc/build.log |
| rv64imafdc_zba_zbb_zbc_zbs | True | 7.27 | build/nmsis_dsp/rv64imafdc_zba_zbb_zbc_zbs/build.log |
| rv64imafdc_xxldsp | True | 8.25 | build/nmsis_dsp/rv64imafdc_xxldsp/build.log |
| rv64imafdcv | True | 10.53 | build/nmsis_dsp/rv64imafdcv/build.log |
| rv64imafdc_zba_zbb_zbc_zbs_xxldsp | True | 8.85 | build/nmsis_dsp/rv64imafdc_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv64imafdcv_zba_zbb_zbc_zbs | True | 10.23 | build/nmsis_dsp/rv64imafdcv_zba_zbb_zbc_zbs/build.log |
| rv64imafdcv_xxldsp | True | 11.79 | build/nmsis_dsp/rv64imafdcv_xxldsp/build.log |
| rv64imafdcv_zba_zbb_zbc_zbs_xxldsp | True | 10.32 | build/nmsis_dsp/rv64imafdcv_zba_zbb_zbc_zbs_xxldsp/build.log |
| rv64imafdc_zfh | True | 7.73 | build/nmsis_dsp/rv64imafdc_zfh/build.log |
| rv64imafdcv_zfh_zvfh | True | 9.99 | build/nmsis_dsp/rv64imafdcv_zfh_zvfh/build.log |
| rv64imafdcv_zfh_zvfh_zba_zbb_zbc_zbs | True | 10.38 | build/nmsis_dsp/rv64imafdcv_zfh_zvfh_zba_zbb_zbc_zbs/build.log |
| rv64imafdcv_zfh_zvfh_xxldsp | True | 12.24 | build/nmsis_dsp/rv64imafdcv_zfh_zvfh_xxldsp/build.log |
| rv64imafdcv_zfh_zvfh_zba_zbb_zbc_zbs_xxldsp | True | 11.83 | build/nmsis_dsp/rv64imafdcv_zfh_zvfh_zba_zbb_zbc_zbs_xxldsp/build.log |
+------------------------------------------------------+--------+------------+--------------------------------------------------------------------------------+
Build Library DSP/Source with config Scripts/Build/nmsis_dsp.json, generated into Library/DSP/GCC status: True
All libraries are generated into Library
make: Leaving directory '/home/draco/work/projects/nmsis/NMSIS'
ivan
October 26, 2025, 3:06am
14
ivan
October 29, 2025, 9:50am
15
@zhiyong.wang 哈喽,不知道这边是否有更新工具进行测试,上面提到的问题是否已经修复,非常期待这边的反馈。