当我尝试使用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代码,效果很好。
问题已结束。