当我尝试使用qadd命令编译内联程序集时出现错误。


  错误:无法使用宽度后缀-`qadd r7,r7,r1'


我知道ARMv5TE支持qadd


  这些ARM指令在ARMv6及更高版本以及E中可用
  ARMv5T的变体。


C / ASM代码:

inline int __qadd(int a, int b) {
    __asm__ (
            "qadd %0, %1, %2" : "=r" (a) : "r" (a), "r" (b));
    return a;
}


我的cpu功能是:

LOGI("__ARM_ARCH__='%d'", __ARM_ARCH__);
LOGI("__ARM_HAVE_5TE='%d'", __ARM_HAVE_5TE);


输出:


  __ARM_ARCH __ ='5'
  __ARM_HAVE_5TE ='1'


我有下一个编译器标志:


  LOCAL_CFLAGS + = -std = c99 -ffast-math -march = armv5te


另外,我尝试用add代替qadd-很好用,但是用qadd代码不能编译。

我做错了什么?谁可以提供汇编中qadd命令的有效示例?

最佳答案

解决方案在这里No qsort_r for Android (or how to disable force Thumb to use CLZ in Android ARM code)


  在您的Android.mk文件中,将“ .arm”添加到文件名中,
  编译为ARM模式而不是Thumb模式(例如sort.c.arm)。我有
  在Android本机库中混合了Thumb / ARM代码,效果很好。


问题已结束。

08-16 20:30