X86 为什么是两个按位或AVX指令?

X86 为什么是两个按位或AVX指令?,x86,bit-manipulation,avx,instructions,bitwise-or,X86,Bit Manipulation,Avx,Instructions,Bitwise Or,在AVX中,有两条指令执行按位或VORPD和VORPS。文件说: VORPD (VEX.256 encoded version) DEST[63:0] <- SRC1[63:0] BITWISE OR SRC2[63:0] DEST[127:64] <- SRC1[127:64] BITWISE OR SRC2[127:64] DEST[191:128] <- SRC1[191:128] BITWISE OR SRC2[191:128] DEST[255:192] <-

在AVX中,有两条指令执行按位或VORPD和VORPS。文件说:

VORPD (VEX.256 encoded version)
DEST[63:0] <- SRC1[63:0] BITWISE OR SRC2[63:0]
DEST[127:64] <- SRC1[127:64] BITWISE OR SRC2[127:64]
DEST[191:128] <- SRC1[191:128] BITWISE OR SRC2[191:128]
DEST[255:192] <- SRC1[255:192] BITWISE OR SRC2[255:192]
VORPD(VEX.256编码版本)

DEST[63:0]操作结果没有差异。逻辑一致性有两种类型,因为有两种数据类型:单压缩(float32)和双压缩(float64)


对于整数来说,使用什么操作并不重要,只要与数据类型保持一致即可。如果您使用最大32位宽度打包int,则使用单打包;如果更大,则使用双打包。试想一下,这是一个cast,您可以将32位int提升到64位int而不会丢失,但如果这是一条通往灾难的道路,则相反。

所有(或几乎所有)SEE/AVX指令的PS和PD变体的出现有一个历史背景:从前,英特尔最初设计第一个SSE指令集时,他们认为未来的芯片架构将有三个领域:整数单精度浮点(32位),双精度浮点(64位)

注意:域是CPU内隔离的逻辑单元,它们很重要,因为在它们之间传输SSE/AVX寄存器内容时有一个小延迟。因此,如果整数域中指令的结果用作浮点域中指令的输入,则可能会出现1或2个周期的延迟

出于这个原因,Intel将大多数逻辑按位和无序指令镜像三次:一次用于整数,一次用于SP-FP,一次用于DP-FP。这些镜像指令执行的操作是相同的——包括整数和浮点类型之间的操作

目前,大多数x86体系结构有两个域:整数和浮点。FP域处理单精度和双精度(32/64位)。一些架构只有一个域用于所有SSE/AVX指令。有可能在未来的一些体系结构中增加第三个双精度域。

相关:
VORPS (VEX.256 encoded version)
DEST[31:0] <- SRC1[31:0] BITWISE OR SRC2[31:0]
DEST[63:32] <- SRC1[63:32] BITWISE OR SRC2[63:32]
DEST[95:64] <- SRC1[95:64] BITWISE OR SRC2[95:64]
DEST[127:96] <- SRC1[127:96] BITWISE OR SRC2[127:96]
DEST[159:128] <- SRC1[159:128] BITWISE OR SRC2[159:128]
DEST[191:160] <- SRC1[191:160] BITWISE OR SRC2[191:160]
DEST[223:192] <- SRC1[223:192] BITWISE OR SRC2[223:192]
DEST[255:224] <- SRC1[255:224] BITWISE OR SRC2[255:224]