【问题标题】:Intrinsic function implementaion on ArmArm 上的内在函数实现
【发布时间】:2015-12-03 05:38:40
【问题描述】:

我想通过使用内部函数来优化代码。有人可以为此指导。由于我的代码包含 MAC(乘法和加法)语句,我想用 SMLAxy 指令替换。我试过但得到链接错误。我使用了 armintr.h 头文件,但得到:

error:armintr.h :No such file or directory

我使用 Intel Ubuntu 桌面作为主机,我的目标是 ARM Cortex-a8。我正在使用带有 -O3 -mcpu=cortex-a8 -Wall 选项标志的 arm-none-linux-gnueabi-gcc 编译器。

【问题讨论】:

  • 错误很明显。但是您没有提供有关哪个编译器、在哪个平台等方面的任何信息,以便任何人都可以以任何方式帮助您。
  • 我正在使用 arm-none-linux-gnueabi-gcc 编译器和 arm-cortex-a8
  • 看起来armintr.h 是 MSVC 标头,而不是 GCC 标头。
  • 先生,我不知道 MSVC ......请指导我
  • Michael 先生,我想在我的代码中添加内在函数,我该如何继续?我尝试使用没有任何头文件的 __smlad(var1,var2,var3) 然后出现以下错误:acelp_ca.c:(.text+0x2e0): undefined reference to `__smlad'

标签: c assembly arm


【解决方案1】:

error:armintr.h :没有这样的文件或目录

通常当您在指定路径中没有特定的头文件时会出现此错误。或者您需要为此头文件提供正确的路径。

在你的情况下,你没有启用内在指令,所以你得到了错误。

要启用内在指定编译器option 例如--fpu=name.

【讨论】:

  • --fpu=name 用您的拱门替换名称...并查看 ans 中给出的链接。如果您真的想优化代码,请使用 Neon 内在函数。
  • Mohan....刚才我才知道 gcc 不支持内在函数。是真的吗??? stackoverflow.com/questions/14188262/…
  • @ChethanShetty 这个问题是关于 android 的......我认为你需要编辑你的问题,详细说明主机操作系统、目标操作系统、开发代码的位置,如果可能的话,发布你的代码或一些导致问题的一部分。以及您是如何决定使用该头文件的?所以人们可以帮助你......
  • 实际上这个问题与我的问题有关。我使用英特尔桌面作为 ubuntu 的主机,我的目标是 ARM-cortex-a8。 #if 1 /* 内在函数 ---- 这里我得到了对 '__smlad error' 的未定义引用 */ cor = __smlad(cor,H[i], H[i]); #else cor = L_mac(cor, H[i], H[i]); #endif
  • 嗨 mohan 这里是一个突破,因为我有批处理文件,当我使用 make 实用程序编译这些文件时出现错误,但是当我编译单个时,它的编译和 __smlad() 内在工作是怎么回事可能的?? arm-none-linux-gnueabi-gcc -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -c acelp_ca.c -o acelp_ca 这样生成的 .obj 文件没有任何语法错误和链接错误。
【解决方案2】:

我希望 GCC 在不使用内在函数的情况下为您生成 SMLAL 指令。

long long Acc;
long a;
long b;

Acc += ((long long)a*b);

这不会为您生成指令吗?

【讨论】:

  • 科林先生,我正在优化我想使用汇编指令的代码
  • 确实,GCC通常会生成SMULL/SMLAL/etc。正好。 似乎的问题是在询问SMLABB/SMLABT/SMLATB/SMLATT,不过,我尝试的 GCC 4.8 似乎没有优化(尽管@ 987654321@).
  • @Notlikethat 我似乎确实记得 gcc 在某些情况下会发出这些。由于“C”中溢出和其他情况的挂起映射,通常很难让编译器执行此操作。可能至少-ffast-math 有帮助/需要?至少在arm.md 中,所以在某些情况下应该发出它。
  • @artlessnoise 啊,它只是不喜欢 Thumb 中的它们 - it does emit them with -marm
猜你喜欢
  • 2015-12-14
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2022-12-11
  • 2016-12-19
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多