【问题标题】:c - fix unknown register name ‘%xmm1’ in ‘asm’?c - 修复“asm”中未知的寄存器名称“%xmm1”?
【发布时间】:2015-03-29 18:36:09
【问题描述】:

我正在尝试为 ubuntu 14.04 X86 构建一个项目,但出现以下错误:

error: unknown register name ‘%xmm1’ in ‘asm’
         asm volatile (
         ^
   error: unknown register name ‘%xmm0’ in ‘asm’
   error: unknown register name ‘%mm1’ in ‘asm’
   error: unknown register name ‘%mm0’ in ‘asm’
   error: unknown register name ‘%xmm0’ in ‘asm’
         asm volatile (
             ^
   error: unknown register name ‘%mm0’ in ‘asm’
          asm volatile (

在功能中:

static inline void
hev_bytes_xor_sse (guint8 *data, gsize size, guint8 byte)
{
    gsize i = 0, c = 0, p128 = 0, p64 = 0;
    guint64 w = (byte << 8) | byte;

    asm volatile (
        "movq %0, %%mm0\t\n"
        "pshufw $0x00, %%mm0, %%mm1\t\n"
        "movq2dq %%mm1, %%xmm0\t\n"
        "pshufd $0x00, %%xmm0, %%xmm1\t\n"
        ::"m"(w)
        :"%mm0", "%mm1", "%xmm0", "%xmm1"
    );

gcc 版本 4.8.2

【问题讨论】:

  • 它在 Fedora 17(是的,我应该升级)、gcc 版本 4.7.2 下对我来说编译得很好。我没有设置任何特殊的编译标志。你的编译命令行到底是什么?
  • 试过用-mmmx -msse2编译?
  • 听起来你实际上并没有使用 i386 版本的 gcc。也许你的路径有问题? gcc -v 对目标显示什么?

标签: c assembly


【解决方案1】:

您可以使用以下方法检查 gcc 使用的特定于目标的选项: gcc -Q --help=targetgcc -O3 -Q --help=target 做同样的事情,但对于 -O3

为了编译此代码,您需要启用-mmmx-msse2。如果不是这样,您可以通过命令行传递它们:gcc -mmmx -msse2 ...

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2020-09-26
    相关资源
    最近更新 更多