如何在内联汇编中执行qadd命令?

时间:2013-01-04 22:42:54

标签: android c assembly arm inline-assembly

当我尝试使用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命令的工作示例?

1 个答案:

答案 0 :(得分:0)

这里的解决方案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代码,它工作正常。

问题已经结束。