2012-07-17 23 views
2

我正在开发android应用程序,并且我正在研究NDK。同时编译我得到的错误文件所选处理器不支持`qadd16 r1,r1,r0'。任何人都可以解释为什么,这个错误来了,以及如何处理这个错误?这里是我的basic_op.h文件的代码片段如何处理这个:所选处理器不支持`qadd16 r1,r1,r0'

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

你正在编译ARM吗? – kennytm 2012-07-17 13:09:13

+0

其实我想创建一个库(.so)文件,它将被加载到我的应用程序中。 – juned 2012-07-17 13:12:09

+3

您正在定位的处理器没有“qaddr”指令。顺便说一句,你为什么在装配中而不是C或Java中进行此操作? – 2012-07-17 13:20:22

回答

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

附:我正在使用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; 
} 

看起来仍然合理高效,它更便携!

+0

QADD和+不会做同样的事情。 – 2012-07-17 19:35:10

+0

谢谢。我更新了我的答案。 – 2012-07-18 07:08:42