c文件中内联汇编代码的编译错误,可能带有分支

时间:2015-05-15 12:22:33

标签: c gcc assembly

我有以下代码。当我尝试编译代码片段后提到的给出错误时。

void func()
  __asm__ (
    "mfspr     12, 1017;"
    "rotrwi    12,12,%0;"
    "andi.     11, 12, %1;"
    "beq       done;"
"3:;"
    "mfspr     12, 1017;"
    "andi.     11, 12, %2;"
    "bne       3b;"
    "ori       12, 12, %2;"
    "mtspr     1017, 12;"
    "isync;"
"3:;"
    "mfspr     12, 1017;"
    "andi.     11, 12, %2;"
    "bne       3b;"
"done:;"
    ::"r"(31), "r"(1), "r"(2048));     
}

错误:

{standard input}: Assembler messages:
{standard input}:3607: Error: bad expression
{standard input}:3607: Error: missing ')'
{standard input}:3607: Error: missing ')'
{standard input}:3607: Error: syntax error; found `r', expected `,'
{standard input}:3607: Error: junk at end of line: `r9)!31)&((%r9)|31),0,31'

我认为我正在做分支的一些问题,但我不确定什么是错的。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

请改为尝试:

  void func()
    __asm__ (
      "mfspr     12, 1017\n"
      "rotrwi    12,12,%0\n"
      "andi.     11, 12, %1\n"
      "beq       done\n"
  "3:\n"
      "mfspr     12, 1017\n"
      "andi.     11, 12, %2\n"
      "bne       3b\n"
      "ori       12, 12, %2\n"
      "mtspr     1017, 12\n"
      "isync\n"
  "3:\n"
      "mfspr     12, 1017\n"
      "andi.     11, 12, %2\n"
      "bne       3b\n"
  "done:\n"
      ::"i"(31), "i"(1), "i"(2048));
  }

;已更改为\n,以便更容易查看哪些行有误。

对于使用immediates而非寄存器的说明,

"r"(N)更改为"i"(N)