当我尝试使用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命令的工作示例?
答案 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代码,它工作正常。
问题已经结束。