【问题标题】:LLVM complains about assembler error "Unexpected token in memory operand"LLVM 抱怨汇编错误“内存操作数中的意外标记”
【发布时间】:2011-09-27 15:09:29
【问题描述】:

我正在做一项研究任务,以测量我机器上的内存访问时间。 为了确定我们机器上的时钟周期,我们得到了以下 C sn-p:

static inline void getcyclecount(uint64_t* cycles)
{
    __asm __volatile(
                     "cpuid            # force all previous instruction to complete\n\t"
                     "rdtsc            # TSC ->  edx:eax \n\t"
                     "movl %%edx, 4(0) # store edx\n\t"
                     "movl %%eax, 0(0) # store eax\n\t"
                     : : "r"(cycles) : "eax", "ebx", "ecx", "edx");
}

但是,当我尝试编译它(XCode 4,使用“Apple LLVM Compiler 2.1”)时,它会在 rdtsc 的“\t”分别导致两次错误“内存操作数中的意外令牌”。第一个 movl 指令行。

我知道基本的汇编程序,但对 C 内联汇编程序格式一无所知。

你们中有人知道这段代码可能有什么问题吗?

谢谢!

【问题讨论】:

    标签: c assembly xcode4 llvm


    【解决方案1】:

    假设这是 GCC 内联汇编语法,您在内存操作数中缺少 %

    __asm __volatile(
                     "cpuid            # force all previous instruction to complete\n\t"
                     "rdtsc            # TSC ->  edx:eax \n\t"
                     "movl %%edx, 4(%0) # store edx\n\t"
                     "movl %%eax, 0(%0) # store eax\n\t"
                     : : "r"(cycles) : "eax", "ebx", "ecx", "edx");
    

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多