comis / vucomis 中的“i”代表什么?

问题描述 投票:0回答:1

目前我正在阅读CSAPP 3d版,我发现说明书有点冗长(在我看来)就像

vucomiss
,所以我搜索了说明书的全名以帮助记忆。

我找到了描述“无序比较标量单精度浮点值”,因此u指的是无序,com指的是比较,ss指的是单精度标量,但是字母i在哪里?

vcomiss
vucomiss
(以及SSE1版本
comiss
ucomiss
)中的字母i是什么意思?

assembly x86 sse avx instructions
1个回答
0
投票

我假设“i”代表整数,就像与整数FLAGS寄存器进行比较一样,与x87不同

fcom

comiss
/
ucomiss
助记符显然是受到 x87 指令
fcomi
fucomi
的启发,这是 P6 (Pentium Pro) 中的新指令。 英特尔关于这些指令的第 2 卷手册条目并未阐明“i”代表什么;我没有看过其他卷的 Intel 手册或 AMD 手册(尽管 Intel 给它们起了名字。)

在 P6 之前,唯一的 x87 比较设置 x87 状态寄存器,需要

fstsw
sahf
(或直接使用
test
/
jcc
测试这些位)。 因此像
fcom
fucom
这样的指令仅在 x87 单元内执行,仅将结果写入 x87 状态字。 (这是一个单独的芯片,通过外部引脚与 8086 到 386 中的实际 CPU 进行通信。487 只是一个 486DX,它接管系统并运行整数指令,P5 及后来的版本始终具有集成的 FPU)。

请参阅 为什么 x86 FP 像无符号整数一样比较集合 CF,而不是使用有符号条件?了解有关 SSE/AVX 比较 FLAG 设置如何从 x87 演变而来的更多信息,以及 x87 在 P6 之前如何进行比较

fcomi


请注意,

vcomiss
是SSE1
comiss
的AVX1版本。 您最初的问题询问了这一点,但链接了
ucomiss
(其手动输入也涵盖了
vucomiss
)。 助记符上的“v”前缀代表以 VEX 为前缀的 AVX 编码,但这些指令实际上可以追溯到 Pentium III 中的原始 SSE。 (双精度版本,
[u]comisd
,可以追溯到 Pentium 4 中的 SSE2。)
AVX 版本仅需要 AVX1,不需要 AVX2。 AVX2 新指令是 SIMD 整数指令的 256 位版本,以及一些新的 shuffle,例如
vpermps

© www.soinside.com 2019 - 2024. All rights reserved.