background image

CVTPD2PS—Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision Floating-Point Values

INSTRUCTION SET REFERENCE, A-L

Vol. 2A 3-239

CVTPD2PS—Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision 

Floating-Point Values

Instruction Operand Encoding

Description

Converts two, four or eight packed double-precision floating-point values in the source operand (second operand) 
to two, four or eight packed single-precision floating-point values in the destination operand (first operand). 
When a conversion is inexact, the value returned is rounded according to the rounding control bits in the MXCSR 
register or the embedded rounding control bits. 
EVEX encoded versions: The source operand is a ZMM/YMM/XMM register, a 512/256/128-bit memory location, or 
a 512/256/128-bit vector broadcasted from a 64-bit memory location. The destination operand is a 
YMM/XMM/XMM (low 64-bits) register conditionally updated with writemask k1. The upper bits (MAX_VL-
1:256/128/64) of the corresponding destination are zeroed.
VEX.256 encoded version: The source operand is a YMM register or 256- bit memory location. The destination 
operand is an XMM register. The upper bits (MAX_VL-1:128) of the corresponding ZMM register destination are 
zeroed.
VEX.128 encoded version: The source operand is an XMM register or 128- bit memory location. The destination 
operand is a XMM register. The upper bits (MAX_VL-1:64) of the corresponding ZMM register destination are 
zeroed.
128-bit Legacy SSE version: The source operand is an XMM register or 128- bit memory location. The destination 
operand is an XMM register. Bits[127:64] of the destination XMM register are zeroed. However, the upper Bits 
(MAX_VL-1:128) of the corresponding ZMM register destination are unmodified.
VEX.vvvv and EVEX.vvvv are reserved and must be 1111b otherwise instructions will #UD.

Opcode/

Instruction

Op / 

En

64/32 

bit Mode 

Support

CPUID 

Feature 

Flag

Description

66 0F 5A /r

CVTPD2PS xmm1, xmm2/m128

RM

V/V

SSE2

Convert two packed double-precision floating-point 

values in xmm2/mem to two single-precision 

floating-point values in xmm1.

VEX.128.66.0F.WIG 5A /r

VCVTPD2PS xmm1, xmm2/m128

RM

V/V

AVX

Convert two packed double-precision floating-point 

values in xmm2/mem to two single-precision 

floating-point values in xmm1.

 VEX.256.66.0F.WIG 5A /r

VCVTPD2PS xmm1, ymm2/m256

RM

V/V

AVX

Convert four packed double-precision floating-point 

values in ymm2/mem to four single-precision 

floating-point values in xmm1.

EVEX.128.66.0F.W1 5A /r

VCVTPD2PS xmm1 {k1}{z}, 

xmm2/m128/m64bcst

FV

V/V

AVX512VL

AVX512F

Convert two packed double-precision floating-point 

values in xmm2/m128/m64bcst to two single-

precision floating-point values in xmm1with 

writemask k1.

EVEX.256.66.0F.W1 5A /r

VCVTPD2PS xmm1 {k1}{z}, 

ymm2/m256/m64bcst 

FV

V/V

AVX512VL

AVX512F

Convert four packed double-precision floating-point 

values in ymm2/m256/m64bcst to four single-

precision floating-point values in xmm1with 

writemask k1.

EVEX.512.66.0F.W1 5A /r

VCVTPD2PS ymm1 {k1}{z}, 

zmm2/m512/m64bcst{er}

FV

V/V

AVX512F

Convert eight packed double-precision floating-point 

values in zmm2/m512/m64bcst to eight single-

precision floating-point values in ymm1with 

writemask k1.

Op/En

Operand 1

Operand 2

Operand 3

Operand 4

RM

ModRM:reg (w)

ModRM:r/m (r)

NA

NA

FV

ModRM:reg (w)

ModRM:r/m (r)

NA

NA