This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

ARM 和NEON 汇编条件执行问题

技术支持好:

在文档中说过

The instructions that can be conditional have an optional condition code, shown in syntax

descriptions as {cond}. Table 3-2shows the condition codes that you can use.

当我使用ARM 指令

subs r3, r3, #1

strpl r3, [r0]!

汇编编译正常,可以条件执行,但是我现在想用neon汇编,vld和vst 使用条件执行时,比如vst1pl.64,编译失败,编译器输出错误说是该指令不可条件执行 Error: instruction cannot be conditional -- `vst1pl.64 {d0},[r0]!';

查看的neon编程手册中说的是可以的,以下是手册中的语法:

Syntax

Vopn{cond}.datatype list, [Rn{@align}]{!}

Vopn{cond}.datatype list, [Rn{@align}], Rm

语法中有 cond,说明是可以条件执行的。 我现在不清楚到底neon的 vstn 和vldn 到底可不可以条件执行?

Parents
  • >语法中有 cond,说明是可以条件执行的。 我现在不清楚到底neon的 vstn 和vldn 到底可不可以条件执行?

    NEON的这些指令可以条件执行,但必须和IT指令一起用。

    以下是解释:

    Screen Shot 2015-04-10 at 4.45.43 PM.png

    上图是neon programmers guide的3.2节。它只是说了NEON指令可以使用Condition,但是是和IT指令一起用的。

    一个例子:

    void foo(void) {
      asm ("cmp r0, #0\n"
           "ite lo\n"
           "vld1lo.s64 {d0}, [r0]!\n"
           "vld1hs.s64 {d0}, [r1]!":::"r0", "d0", "r1", "memory");
    }
    

    把它保存为test.c,用以下命令编译可以成功编译它:

    arm-linux-androideabi-gcc -march=armv7-a -mfpu=neon -mthumb -mfloat-abi=softfp -c test.c

Reply
  • >语法中有 cond,说明是可以条件执行的。 我现在不清楚到底neon的 vstn 和vldn 到底可不可以条件执行?

    NEON的这些指令可以条件执行,但必须和IT指令一起用。

    以下是解释:

    Screen Shot 2015-04-10 at 4.45.43 PM.png

    上图是neon programmers guide的3.2节。它只是说了NEON指令可以使用Condition,但是是和IT指令一起用的。

    一个例子:

    void foo(void) {
      asm ("cmp r0, #0\n"
           "ite lo\n"
           "vld1lo.s64 {d0}, [r0]!\n"
           "vld1hs.s64 {d0}, [r1]!":::"r0", "d0", "r1", "memory");
    }
    

    把它保存为test.c,用以下命令编译可以成功编译它:

    arm-linux-androideabi-gcc -march=armv7-a -mfpu=neon -mthumb -mfloat-abi=softfp -c test.c

Children
No data