如何处理:选定的处理器不支持`qadd16 r1,r1,r0'

Jun*_*ned 2 c assembly arm abi android-ndk

我正在开发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);
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

Ser*_* K. 5

发生这种情况是因为QADD目标体系结构不支持指令(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211h/Chddhfig.html).要编译此代码,您需要在NDK中启用arm-v7支持.

添加行

APP_ABI := armeabi-v7a
Run Code Online (Sandbox Code Playgroud)

到您的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);
}
Run Code Online (Sandbox Code Playgroud)

PS我正在使用Android NDK r8.

PPS为什么你需要这个丑陋的装配?输出程序集列表:

static inline unsigned int L_add(register unsigned int ra, register unsigned int rb)
{
  return (ra > 0xFFFFFFFF - rb) ? 0xFFFFFFFF : ra + rb;
}
Run Code Online (Sandbox Code Playgroud)

看起来仍然相当有效,而且更便携!