我正在开发Android应用程序,因为我正在开发NDK。在编译文件时,我得到所选处理器的错误不支持`qadd16 r1,r1,r0'。任何人都可以解释我为什么以及在哪里出现此错误以及如何处理此错误?这是我的basic_op.h文件
的代码段static inline Word32 L_add(register Word32 ra, register Word32 rb)
{
Word32 out;
__asm__("qadd %0, %1, %2"
: "=r"(out)
: "r"(ra), "r"(rb));
return (out);
}
提前致谢
答案 0 :(得分:5)
这是因为您的目标体系结构(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211h/Chddhfig.html)不支持QADD
指令。要编译此代码,您需要在NDK中启用arm-v7支持。
添加行
APP_ABI := armeabi-v7a
到您的Application.mk,这段代码将完美编译:
static inline unsigned int L_add(register unsigned int ra, register unsigned int rb)
{
unsigned int out;
__asm__("qadd %0, %1, %2"
: "=r"(out)
: "r"(ra), "r"(rb));
return (out);
}
P.S。我使用的是Android NDK r8。
P.P.S。为什么你需要这个丑陋的装配?输出程序集列表:
static inline unsigned int L_add(register unsigned int ra, register unsigned int rb)
{
return (ra > 0xFFFFFFFF - rb) ? 0xFFFFFFFF : ra + rb;
}
看起来仍然相当有效,而且更便携!