【问题标题】:Should I compile with -mssse3 in the presence of ASM SSSE3 code?我应该在存在 ASM SSSE3 代码的情况下使用 -mssse3 进行编译吗?
【发布时间】:2012-07-18 13:29:19
【问题描述】:

我有一个关于在 GCC 上编译 x264 版本的问题。

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

我是否应该使用 -mssse3 标志编译它,或者这实际上会导致性能损失?

-mssse3 是否暗示 -msse3 还是 SSE3 与 SSSE3 分开?

【问题讨论】:

  • 最后一部分的答案是肯定的,-mssse3暗示-msse3。这对于所有不同级别的 SSE 通常都是正确的,即级别 N 意味着所有级别都达到 N。

标签: assembly vectorization x264 sse3


【解决方案1】:

-m<isa> 标志告诉编译器在它生成的代码中使用什么指令。它不影响内联汇编,它只是进一步未经修改地传递给汇编器,不影响单独编译的汇编 (.s) 文件。使用 SSSE3 编译而不使用自动矢量化是毫无意义的,因为 SSE 完全是关于矢量化,尽管它也可以用于执行标量浮点运算。

【讨论】:

  • 不一定 - 编译器标志还设置预定义的宏,例如-msse3 通常会导致 __SSE____SSE2____SSE3__ 被定义,因此如果项目中有适当的 #ifdef'd 代码,那么这将被编译或不编译,具体取决于编译器开关。
  • 我的观点是,在没有指定-mssse3 的情况下使用SSSE3 指令的内联汇编编译代码不是错误。当然 ISA 标志可能会影响条件编译,但在运行时完成 CPU 检测的情况下(大多数编解码器就是这种情况)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2011-01-17
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2011-03-21
相关资源
最近更新 更多