2

我正在开发 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);
}

提前致谢

4

1 回答 1

5

发生这种情况是因为您的目标架构 ( http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211h/Chddhfig.htmlQADD )不支持指令。要编译此代码,您需要在 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);
}

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;
}

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

于 2012-07-17T17:08:32.783 回答