EXTRACTPS
提取包装的 浮点值
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
66 0F 3A 17 /r ib | EXTRACTPS reg/m32, xmm1, imm8 | A | vv | 按 imm8 指定的偏移从 xmm1 中提取一个 单精度浮点 值,并将结果存储为 reg 或 m32 。如果适用, 0 将结果扩展为 64 位寄存器 。 | |
VEX.128.66.0F3A.WIG 17 /r ib | VEXTRACTPS reg/m32, xmm1, imm8 | A | 有效 | 有效 | 按 imm8 指定的偏移从 xmm1 中提取一个 单精度浮点 值,并将结果存储为 reg 或 m32 。如果适用, 0 将结果扩展为 64 位寄存器 。 |
EVEX.128.66.0F3A.WIG 17 /r ib | VEXTRACTPS reg/m32, xmm1, imm8 | B | 有效 | 有效 | 在 imm8 指定的偏移时从 xmm1 中提取一个 单精度浮点 值 OR AVX10.1, 并将结果存储为 reg 或 m32 。 如果适用, 0 将结果扩展为 64 位寄存器 。 |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)imm8指令后的立即数字节
B
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)imm8指令后的立即数字节
Tupla: Tuple1 Scalar
实测开销
正在从 arch-data 加载实测数据...
说明
从 源操作数(第二个操作数)中提取一个单精度浮点值,其位数为 imm8指定的32位偏移. 直接比值高于矢量长度最显著的抵消值会被忽略.
提取的 单精度浮点 值存储在 目标操作数 的低位 32 位
在64位模式中,目的地注册操作数默认操作数大小为64位. 寄存器的上方32位是零填充. REX.W被忽略了.
VEX.128和EVEX编码版本: 当VEX.W1或EVEX.W1形式以64位模式使用具有通用目的寄存器(GPR)作为目标操作数时,包装的单量为零,扩展至64位.
VEX.vvvv/EVEX.vvvv是保留的,必须是1111b,否则指令会#UD.
128位遗产 SSE 版本 : 当一个REX.W的前缀被作为目标操作数的通用寄存器(GPR)在64位模式下使用时,被包装的单数为零延伸至64位.
源注册是XMM注册. Imm8[1:0]确定起始的 DWORD 偏移以提取32位的 浮点 值.
如果VEXTRACTPS被用VEX.L=1编码,试图执行用VEX.L=1编码的指令,将导致#UD例外.
行动
VEXTRACTPS (EVEX and VEX.128 Encoded Version)
SRC_OFFSET := IMM8[1:0]
IF (64-Bit Mode and DEST is register)
DEST[31:0] := (SRC[127:0] >> (SRC_OFFSET*32)) AND 0FFFFFFFFh
DEST[63:32] := 0
ELSE
DEST[31:0] := (SRC[127:0] >> (SRC_OFFSET*32)) AND 0FFFFFFFFh
FI
EXTRACTPS (128-bit Legacy SSE Version)
SRC_OFFSET := IMM8[1:0]
IF (64-Bit Mode and DEST is register)
DEST[31:0] := (SRC[127:0] >> (SRC_OFFSET*32)) AND 0FFFFFFFFh
DEST[63:32] := 0
ELSE
DEST[31:0] := (SRC[127:0] >> (SRC_OFFSET*32)) AND 0FFFFFFFFh
FIIntel C/C++ 内在编译器
EXTRACTPS int _mm_extract_ps (__m128 a, const int nidx);SIMD 浮点 例外
None.
其他例外
VEX-encoded指令,参见表2-22,"第5类例外条件".
EVEX-encoded 指令,参见表2-59,"Type E9NF class Exception Centers".
Additionally:
#UD IF VEX.L = 0.#UD If VEX.vvvv != 1111B or EVEX.vvvv != 1111B.