2012-07-19 26 views
2

我有一个关于在GCC上编译x264版本的问题。在ASM SSSE3代码的存在下,我应该使用-mssse3进行编译吗?

x264具有处理指令集(如SSE3和SSSE3)的汇编代码,默认情况下在makefile中禁用自动矢量化。

无论如何我应该用-mssse3标志编译它还是可能实际上导致性能损失?

而且-mssse3暗示-msse3或SSE3是否与SSSE3分开?

+0

对最后一部分的回答是肯定的,'-mssse3'意味着'-msse3'。通常对于所有不同级别的SSE都是如此,即级别N意味着直到N的所有级别。 – 2012-07-19 11:22:50

回答

1

标志告诉编译器在它生成的代码中使用什么指令。它不会影响内联汇编,而汇编程序会直接进一步传递给汇编程序,而不会影响汇编(.s)文件单独编译。使用SSSE3进行编译并且不使用自动矢量化是没有意义的,因为SSE全是关于向量化的,尽管它也可以用来执行标量浮点运算。

+0

不一定 - 编译器标志还设置预定义的宏,例如, '-msse3'通常会导致'__SSE__','__SSE2__'和'__SSE3__'被定义,所以如果在项目中有适当的'#ifdef''d代码,那么这将被编译或不被编译器开关。 – 2012-07-19 13:18:26

+0

我的观点是,使用SSSE3指令而不指定'-mssse3'的内联汇编编译代码并不是错误。当然,ISA标志可能会影响条件编译,但不会在运行时检测到CPU时(如大多数编解码器的情况)。 – 2012-07-19 13:28:09

相关问题