使用 NEON 指令的 Linpack 的 clang O3/O2 错误

标签 c arm clang

我正在使用来自 Neonlinpack 的代码, [ http://www.roylongbottom.org.uk/Raspberry_Pi_Benchmarks.zip][1]

当我用没有任何优化标志的 clang 编译它时,它运行正常。但是当我在命令中使用 O3/O2 标志时,

clang -target armv7a-linux-gnueabihf -mfpu=neon -mfloat-abi=hard linpackneon.c cpuidc.c -O3 -o linpackneon

我得到以下错误

In file included from cpuidc.c:13:
In file included from /usr/include/math.h:426:
/usr/include/bits/mathinline.h:756:25: error: invalid output constraint '=&q' in
      asm
                    : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp),       \
                                      ^
/usr/include/bits/mathinline.h:756:25: error: invalid output constraint '=&q' in
      asm
/usr/include/bits/mathinline.h:756:25: error: invalid output constraint '=&q' in
      asm
/usr/include/bits/mathinline.h:774:25: error: invalid output constraint '=&q' in
      asm
                    : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp),       \
                                      ^
/usr/include/bits/mathinline.h:774:25: error: invalid output constraint '=&q' in
      asm
/usr/include/bits/mathinline.h:774:25: error: invalid output constraint '=&q' in
      asm
/usr/include/bits/mathinline.h:881:3: error: unknown register name 'st' in asm
  __lrint_code;
  ^
/usr/include/bits/mathinline.h:876:40: note: expanded from macro '__lrint_code'
     : "=m" (__lrintres) : "t" (__x) : "st");

这些错误背后的原因是什么。我在 GCC 中没有遇到这样的错误。

最佳答案

cpuid.c 所做的只是从 Linux 获取时间/计时和配置详细信息。要么在不优化的情况下单独编译它,要么根据需要注释掉语句。只需要时间数据。

关于使用 NEON 指令的 Linpack 的 clang O3/O2 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861571/

相关文章:

clang - 如何获取Clang支持的标准列表?

python - 使用 libclang 进行函数边界识别

c++ - 更新 OSX 命令行工具 6.3 后缺少 C++ header <__debug>

gcc - 在ARM下是否有gcc编译器?

assembly - Zynq 上的裸机组装程序,没有 Vivado/SDK

c - GCC ARM 链接器错误 - 未定义对 'strcmp' 的引用

c - 如何以编程方式禁用不可屏蔽中断?

c - 终止系统调用后删除终端消息

c++ - FORTRAN 中的 POINTER 关键字相当于 C/C++ 中的 POINTER 关键字

c - return 0 是退出程序还是退出循环?