MOVSD
移动或合并 标量 双精度浮点 值
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
F2 0F 10 /r | MOVSD xmm1, xmm2 | A | 有效 | 有效 | 将 标量 双精度浮点 值从 xmm2 移动到 xmm1 注册 。 |
F2 0F 10 /r | MOVSD xmm1, m64 | A | 有效 | 有效 | 从 m64 装入 标量 双精度浮点 值到 xmm1 值. |
F2 0F 11 /r | MOVSD xmm1/m64, xmm2 | C | 有效 | 有效 | 将 标量 双精度浮点 值从 xmm2 寄存器移动到 xmm1/m64 . |
VEX.LIG.F2.0F.WIG 10 /r | VMOVSD xmm1, xmm2, xmm3 | B | 有效 | 有效 | 将 标量 双精度浮点 值从 xmm2 和 xmm3 合并到 xmm1 登记册 。 |
VEX.LIG.F2.0F.WIG 10 /r | VMOVSD xmm1, m64 | D | 有效 | 有效 | 从 m64 装入 标量 双精度浮点 值到 xmm1 值. |
VEX.LIG.F2.0F.WIG 11 /r | VMOVSD xmm1, xmm2, xmm3 | E | 有效 | 有效 | 将 标量 双精度浮点 值从 xmm2 和 xmm3 登记册合并为 xmm1 。 |
VEX.LIG.F2.0F.WIG 11 /r | VMOVSD m64, xmm1 | C | 有效 | 有效 | 存储 标量 双精度浮点值从 xmm1 寄存器到 m64. |
EVEX.LLIG.F2.0F.W1 10 /r | VMOVSD xmm1 {k1}{z}, xmm2, xmm3 | B | 有效 | 有效 | 将 标量 双精度浮点 值 OR AVX10.1 从 xmm2 和 xmm3 登记册合并到 xmm1 下 写掩码 k1. |
EVEX.LLIG.F2.0F.W1 10 /r | VMOVSD xmm1 {k1}{z}, m64 | F | 有效 | 有效 | 从 m64 装入 scalar 双精度浮点值 OR AVX10.1 从 m64 装入 xmm1 记录器 在 writemask k1 下. |
EVEX.LLIG.F2.0F.W1 11 /r | VMOVSD xmm1 {k1}{z}, xmm2, xmm3 | E | 有效 | 有效 | 将 标量 双精度浮点 值 OR AVX10.1 从 xmm2 和 xmm3 登记册合并到 xmm1 下 写掩码 k1. |
EVEX.LLIG.F2.0F.W1 11 /r | VMOVSD m64 {k1}, xmm1 | G | 有效 | 有效 | 将 标量 双精度浮点 值 OR AVX10.1 从 xmm1 存储到 m64 在 写掩码 k1 下. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.reglectura y escrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
B
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)vex.vvvvlecturaVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
C
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)
D
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
E
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移evex.vvvvlecturaEVEX 前缀的 vvvv 字段(按位取反)modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)
F
modrm.reglectura y escrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
Tupla: Tuple1 Scalar
G
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)
Tupla: Tuple1 Scalar
实测开销
正在从 arch-data 加载实测数据...
说明
将 标量 双精度浮点 值从 源操作数 (第二个 操作数) 移动到 目标操作数 (第一个 操作数) . 来源和目标操作数可以是XMM登记器或64位内存位置. 此指令可用于将一个 双精度浮点 值移动到一个 XMM 的低四字和一个64位的 内存位置 ,或者在两个 XMM 的低四字之间移动一个 双精度浮点 值. 该指令不能用于在内存位置之间传输数据.
遗留版本 : 当来源和目的操作为XMM注册时,目的地操作的位元MAXVL:64保持不变. 当 源操作数 是一个 内存位置, 目标操作数 是一个 XMM
登记簿中,目的地操作符中127:64的四字被清除到所有 0s,目的地操作符中的MAXVL:128没有改变。
VEX 和 EVEX 编码的注册语法 : 将 标量 双精度浮点 值从 第二源操作数(第三个操作数)移动到 目标操作数(第一个操作数)的低四字元素. 目标操作数的比特127:64从第一源操作数(第二个操作数)复制. 对应目的地的比特(MAXVL-1:128)注册被清零.
VEX和EVEX编码的内存存储语法: 当源操作数是一个内存位置,目标操作数是一个XMM登记器时,比特的MAXVL:64的目标操作数被清除到所有0s.
EVEX 编码版本 : 目的地的低四字根据写掩码更新.
说明: 对于VMOVSD(记忆存储和负载表),VEX.vvvv和EVEX.vvvv是保留的,必须是1111b,否则指令会#UD.
行动
VMOVSD (EVEX.LLIG.F2.0F 10 /r: VMOVSD xmm1, m64 With Support for 32 Registers)
IF k1[0] or *no writemask*
THEN DEST[63:0] := SRC[63:0]
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[63:0] remains unchanged*
ELSE ; zeroing-masking
THEN DEST[63:0] := 0
FI;
FI;
DEST[MAXVL-1:64] := 0
VMOVSD (EVEX.LLIG.F2.0F 11 /r: VMOVSD m64, xmm1 With Support for 32 Registers)
IF k1[0] or *no writemask*
THEN DEST[63:0] := SRC[63:0]
ELSE *DEST[63:0] remains unchanged* ; merging-masking
FI;
VMOVSD (EVEX.LLIG.F2.0F 11 /r: VMOVSD xmm1, xmm2, xmm3)
IF k1[0] or *no writemask*
THEN DEST[63:0] := SRC2[63:0]
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[63:0] remains unchanged*
ELSE ; zeroing-masking
THEN DEST[63:0] := 0
FI;
FI;
DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
MOVSD (128-bit Legacy SSE Version: MOVSD xmm1, xmm2)
DEST[63:0] := SRC[63:0]
DEST[MAXVL-1:64] (Unmodified)
VMOVSD (VEX.128.F2.0F 11 /r: VMOVSD xmm1, xmm2, xmm3)
DEST[63:0] := SRC2[63:0]
DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
VMOVSD (VEX.128.F2.0F 10 /r: VMOVSD xmm1, xmm2, xmm3)
DEST[63:0] := SRC2[63:0]
DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
VMOVSD (VEX.128.F2.0F 10 /r: VMOVSD xmm1, m64)
DEST[63:0] := SRC[63:0]
DEST[MAXVL-1:64] := 0
MOVSD/VMOVSD (128-bit Versions: MOVSD m64, xmm1 or VMOVSD m64, xmm1)
DEST[63:0] := SRC[63:0]
MOVSD (128-bit Legacy SSE Version: MOVSD xmm1, m64)
DEST[63:0] := SRC[63:0]
DEST[127:64] := 0
DEST[MAXVL-1:128] (Unmodified)Intel C/C++ 内在编译器
VMOVSD __m128d _mm_mask_load_sd(__m128d s, __mmask8 k, double * p);
VMOVSD __m128d _mm_maskz_load_sd( __mmask8 k, double * p);
VMOVSD __m128d _mm_mask_move_sd(__m128d sh, __mmask8 k, __m128d sl, __m128d a);
VMOVSD __m128d _mm_maskz_move_sd( __mmask8 k, __m128d s, __m128d a);
VMOVSD void _mm_mask_store_sd(double * p, __mmask8 k, __m128d s);
MOVSD __m128d _mm_load_sd (double *p) MOVSD void _mm_store_sd (double *p, __m128d a) MOVSD __m128d _mm_move_sd ( __m128d a, __m128d b);SIMD 浮点 例外
None.
其他例外
Non-EVEX-encoded discription,参见表2-22,"第5类例外条件",另外还有:
#UD If VEX.vvvv != 1111B.EVEX-encoded discription,参见表2-60"Type E10类例外条件".