MOVSD

移动或合并 标量 双精度浮点 值

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
F2 0F 10 /rMOVSD xmm1, xmm2A有效有效将 标量 双精度浮点 值从 xmm2 移动到 xmm1 注册 。
F2 0F 10 /rMOVSD xmm1, m64A有效有效从 m64 装入 标量 双精度浮点 值到 xmm1 值.
F2 0F 11 /rMOVSD xmm1/m64, xmm2C有效有效将 标量 双精度浮点 值从 xmm2 寄存器移动到 xmm1/m64 .
VEX.LIG.F2.0F.WIG 10 /rVMOVSD xmm1, xmm2, xmm3B有效有效将 标量 双精度浮点 值从 xmm2 和 xmm3 合并到 xmm1 登记册 。
VEX.LIG.F2.0F.WIG 10 /rVMOVSD xmm1, m64D有效有效从 m64 装入 标量 双精度浮点 值到 xmm1 值.
VEX.LIG.F2.0F.WIG 11 /rVMOVSD xmm1, xmm2, xmm3E有效有效将 标量 双精度浮点 值从 xmm2 和 xmm3 登记册合并为 xmm1 。
VEX.LIG.F2.0F.WIG 11 /rVMOVSD m64, xmm1C有效有效存储 标量 双精度浮点值从 xmm1 寄存器到 m64.
EVEX.LLIG.F2.0F.W1 10 /rVMOVSD xmm1 {k1}{z}, xmm2, xmm3B有效有效将 标量 双精度浮点 值 OR AVX10.1 从 xmm2 和 xmm3 登记册合并到 xmm1 下 写掩码 k1.
EVEX.LLIG.F2.0F.W1 10 /rVMOVSD xmm1 {k1}{z}, m64F有效有效从 m64 装入 scalar 双精度浮点值 OR AVX10.1 从 m64 装入 xmm1 记录器 在 writemask k1 下.
EVEX.LLIG.F2.0F.W1 11 /rVMOVSD xmm1 {k1}{z}, xmm2, xmm3E有效有效将 标量 双精度浮点 值 OR AVX10.1 从 xmm2 和 xmm3 登记册合并到 xmm1 下 写掩码 k1.
EVEX.LLIG.F2.0F.W1 11 /rVMOVSD m64 {k1}, xmm1G有效有效将 标量 双精度浮点 值 OR AVX10.1 从 xmm1 存储到 m64 在 写掩码 k1 下.

操作数编码

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

A

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

B

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

C

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

D

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

E

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

F

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

Tupla: Tuple1 Scalar

G

  1. modrm.rm escrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
  2. modrm.reg lecturaModRM 字节的 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类例外条件".

来源