【问题标题】:GNU assembler compiling error 'invalid operand in inline asm'GNU 汇编器编译错误“内联 asm 中的操作数无效”
【发布时间】:2012-01-29 14:12:36
【问题描述】:

我正在尝试使用 GNU 汇编器编译一些汇编代码,目标是 ARM 平台。 但是会出现一些错误。我对汇编语法不熟悉。

谁能告诉我如何解决这个错误?

error: invalid operand in inline asm: 'str  ${2:Q}, $0  
str  ${2:R}, $1

导致这个编译错误的内联汇编代码在这里:

static av_always_inline void AV_WN64(void *p, uint64_t v)
{
    __asm__ ("str  %Q2, %0  \n\t"
         "str  %R2, %1  \n\t"
         : "=m"(*(uint32_t*)p), "=m"(*((uint32_t*)p+1))
         : "r"(v));
}

【问题讨论】:

  • 请发布它所抱怨的源代码行。
  • 内联asm代码来自ffmpeg,libavutil/arm/intreadwrite.h。我添加上面的代码。

标签: assembly arm gnu gnu-assembler


【解决方案1】:

试试:

__asm__ ("strd [%0], %1\n\t" : : "r"(p), "r"(v) : "memory");

编译器应该认识到 v 作为 64 位数量需要一个寄存器对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2019-02-17
    相关资源
    最近更新 更多