CVTTPD2PI

打包双精度浮点值 转换为包装

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
66 0F 2C /rCVTTPD2PI mm, xmm/m128RM有效有效将两个包式双精度浮点值从xmm/m128转换为两个用缩略语表示的包式双字整数.

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

RM

  1. modrm.reg escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

实测开销

正在从 arch-data 加载实测数据...

说明

将源操作数(第二个操作数)中的两个打包双精度浮点值转换为目标操作数(第一个操作数)中的两个已包装的签名双字整数. 源操作数可以是XMM的寄存器,也可以是128位的内存位置. 目标操作数是一个MMX技术登记册.

当转换不准确时,将返回切换结果(圆向零)。 如果转换结果大于最大签名的双字整数,则提高浮点无效例外,如果掩盖了这一例外,则返回无限期整数值80000000H.

本指令导致从x87 FPU到MMX技术操作的过渡(即将x87 FPU顶端-of-栈指针设置为0,将x87 FPU标记词设置为所有 0s [有效]). 如果执行此指令时有一个 x87 FPU 浮点 例外待决,则在 CVTTPD2PI 指令执行前处理该例外.

在64位模式中,使用REX.R前缀允许此指令访问额外的注册(XMM8-XMM15).

行动

DEST[31:0] := Convert_Double_Precision_Floating_Point_To_Integer32_Truncate(SRC[63:0]);
DEST[63:32] := Convert_Double_Precision_Floating_Point_To_Integer32_Truncate(SRC[127:64]);

Intel C/C++ 内在编译器

CVTTPD1PI __m64 _mm_cvttpd_pi32(__m128d a);

SIMD 浮点 例外

Invalid, Precision.

其他模式例外见第25.25.3节,"遗产的例外条件"SIMD运行于MMXIntel(R)64和IA-32 Architectures软件开发者手册第3B卷中的注册".

来源