代码之家  ›  专栏  ›  技术社区  ›  jww avp

当指令以字节码形式使用时,是否需要-xarch=XXX?

  •  0
  • jww avp  · 技术社区  · 6 年前

    我有一个x86rdrand实现,如下所示。我有一个类似的RDSEED实现。

    inline void RDRAND32(void* output)
    {
    #if defined(HAVE_GCC_RDRAND_ASM)
        __asm__
        (
            "1:\n"
            ".byte 0x0f, 0xc7, 0xf0;\n"
            "jnc 1b;\n"
            : "=a" (*(uint32_t*)output)
            : : "cc"
        );
    #endif
    }
    

    rdrand eax 一个有能力的处理器会很乐意地使用它们。sunstudio12.1及更高版本支持GCC内联程序集,并使用它们。

    太阳医生说我需要 -xarch=avx_i 对于提供RDRAND(和 -xarch=avx2_i 对于RDSEED)。另请参见 Sun Studio 12.6 | -xarch Flags for x86 .

    我还需要补充吗 -xarch=avx_i 的链接器标志 RDRAND


    万一有问题,我们在运行时保护CPU特性,并使用映射文件降低ISA(因为运行时路径受到保护):

    $ cat cryptopp.mapfile
    # Solaris mapfile to override hardware caps to avoid kills
    
    hwcap_1 = SSE SSE2 OVERRIDE;
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Anton    6 年前

    不,你不需要。编译器不处理内部指令 __asm 声明。汇编程序将检测您使用的指令,并用适当的HWCAP标记.o。您不必显式地向编译器传递任何内容。

    -xarch=avx_i avx_i 必须检查当前选择的架构是否允许。