用于为AVX shuffle Intrinsic生成即时消息的宏

用于为AVX shuffle Intrinsic生成即时消息的宏,c,macros,intel,intrinsics,avx,C,Macros,Intel,Intrinsics,Avx,在AVX中,是否有任何特殊的宏可以帮助构建\u mm256\u shuffle\u*内部函数的立即数常量,比如SSE对应函数的\u MM\u shuffle(..)?我找不到。您仍然使用\u MM\u SHUFFLE()进行将控件输入作为8位立即数的随机播放。e、 g.\u mm256\u shuffle\u epi32()在两条车道上执行相同的随机播放 \u MM\u SHUFFLE(dd、cc、bb、aa)只需将每个arg的低位2位打包成一个0bddccbbaa 您可以将\u MM\u SH

在AVX中,是否有任何特殊的宏可以帮助构建
\u mm256\u shuffle\u*
内部函数的立即数常量,比如SSE对应函数的
\u MM\u shuffle(..)
?我找不到。

您仍然使用
\u MM\u SHUFFLE()
进行将控件输入作为8位立即数的随机播放。e、 g.
\u mm256\u shuffle\u epi32
()在两条车道上执行相同的随机播放

\u MM\u SHUFFLE(dd、cc、bb、aa)
只需将每个arg的低位2位打包成一个
0bddccbbaa

您可以将
\u MM\u SHUFFLE(1,1,1,1)
(广播元素1)写入
0b01010101
,即
0x55


您可以使用C++14分隔符(或其他名称)将其编写为
0b01'01'01
,以提高可读性,尤其是在每个元素都不同的情况下。

我认为在这种情况下,base-4比二进制更好。两个4进制数字是一个16进制(十六进制)数字。例如,如果你想洗牌3,1,1,2,那将是3*4+1,1*4+2=0xda。另一方面,“MM_SHUFFLE”基本上是base-4,可读性更高。@Zboson:你能在C中使用base-4吗?我在C中使用_MM_SHUFFLE,但在asm中使用
0baabbcdd
。我猜在一个
.S
文件中,gcc将在组装之前通过CPP运行,您可以复制_MM_SHUFFLE的宏定义。不,我在我的头脑中这样做并写出十六进制值,或者我写一条注释。但是
\u MM\u SHUFFLE
基本上是一个base-4宏。