首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当指令以字节码的形式使用时,需要-xarch=XXX吗?

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

Stack Overflow用户
提问于 2018-08-03 19:08:37
回答 1查看 70关注 0票数 0

我有一个x86 RDRAND实现,如下所示。我对RDSEED也有类似的实现。

代码语言:javascript
复制
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,一个有能力的处理器很高兴地使用它们。Sun Studio 12.1及以上支持GCC的内联组装并使用它们。

Sun文档说,我需要提供RDRAND的ISA的-xarch=avx_i (和RDSEED的-xarch=avx2_i )。也见Studio 12.6 \x{e76f}用于-xarch的x86标志

在这个用例中,我还需要将-xarch=avx_i添加到RDRAND的链接器标志中吗?

在重要的情况下,我们在运行时保护CPU特性,并使用Mapfile来降低ISA (因为运行时路径被保护):

代码语言:javascript
复制
$ cat cryptopp.mapfile
# Solaris mapfile to override hardware caps to avoid kills

hwcap_1 = SSE SSE2 OVERRIDE;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-28 19:17:52

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

编译器需要-xarch=avx_i的唯一情况是如果您使用rdrand,就像在本例中编译器知道它将要为avx_i生成指令,并且必须检查当前选择的体系结构是否允许它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51678753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档