forked from ttmo-O/x86-manpages
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcvtdq2pd.x86
More file actions
215 lines (186 loc) · 6.79 KB
/
cvtdq2pd.x86
File metadata and controls
215 lines (186 loc) · 6.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
'\" t
.nh
.TH "X86-CVTDQ2PD" "7" "May 2019" "TTMO" "Intel x86-64 ISA Manual"
.SH NAME
CVTDQ2PD - CONVERT PACKED DOUBLEWORD INTEGERS TO PACKED DOUBLE PRECISION FLOATING-POINTVALUES
.TS
allbox;
l l l l l
l l l l l .
\fBOpcode/Instruction\fP \fBOp / En\fP \fB64/32 bit Mode Support\fP \fBCPUID Feature Flag\fP \fBDescription\fP
T{
F3 0F E6 /r CVTDQ2PD xmm1, xmm2/m64
T} A V/V SSE2 T{
Convert two packed signed doubleword integers from xmm2/mem to two packed double precision floating-point values in xmm1.
T}
T{
VEX.128.F3.0F.WIG E6 /r VCVTDQ2PD xmm1, xmm2/m64
T} A V/V AVX T{
Convert two packed signed doubleword integers from xmm2/mem to two packed double precision floating-point values in xmm1.
T}
T{
VEX.256.F3.0F.WIG E6 /r VCVTDQ2PD ymm1, xmm2/m128
T} A V/V AVX T{
Convert four packed signed doubleword integers from xmm2/mem to four packed double precision floating-point values in ymm1.
T}
T{
EVEX.128.F3.0F.W0 E6 /r VCVTDQ2PD xmm1 {k1}{z}, xmm2/m64/m32bcst
T} B V/V AVX512VL AVX512F T{
Convert 2 packed signed doubleword integers from xmm2/m64/m32bcst to eight packed double precision floating-point values in xmm1 with writemask k1.
T}
T{
EVEX.256.F3.0F.W0 E6 /r VCVTDQ2PD ymm1 {k1}{z}, xmm2/m128/m32bcst
T} B V/V AVX512VL AVX512F T{
Convert 4 packed signed doubleword integers from xmm2/m128/m32bcst to 4 packed double precision floating-point values in ymm1 with writemask k1.
T}
T{
EVEX.512.F3.0F.W0 E6 /r VCVTDQ2PD zmm1 {k1}{z}, ymm2/m256/m32bcst
T} B V/V AVX512F T{
Convert eight packed signed doubleword integers from ymm2/m256/m32bcst to eight packed double precision floating-point values in zmm1 with writemask k1.
T}
.TE
.SH INSTRUCTION OPERAND ENCODING
.TS
allbox;
l l l l l l
l l l l l l .
\fBOp/En\fP \fBTuple Type\fP \fBOperand 1\fP \fBOperand 2\fP \fBOperand 3\fP \fBOperand 4\fP
A N/A ModRM:reg (w) ModRM:r/m (r) N/A N/A
B Half ModRM:reg (w) ModRM:r/m (r) N/A N/A
.TE
.SH DESCRIPTION
Converts two, four or eight packed signed doubleword integers in the
source operand (the second operand) to two, four or eight packed double
precision floating-point values in the destination operand (the first
operand).
.PP
EVEX encoded versions: The source operand can be a YMM/XMM/XMM (low 64
bits) register, a 256/128/64-bit memory location or a 256/128/64-bit
vector broadcasted from a 32-bit memory location. The destination
operand is a ZMM/YMM/XMM register conditionally updated with writemask
k1. Attempt to encode this instruction with EVEX embedded rounding is
ignored.
.PP
VEX.256 encoded version: The source operand is an XMM register or 128-
bit memory location. The destination operand is a YMM register.
.PP
VEX.128 encoded version: The source operand is an XMM register or 64-
bit memory location. The destination operand is a XMM register. The
upper Bits (MAXVL-1:128) of the corresponding ZMM register destination
are zeroed.
.PP
128-bit Legacy SSE version: The source operand is an XMM register or 64-
bit memory location. The destination operand is an XMM register. The
upper Bits (MAXVL-1:128) of the corresponding ZMM register destination
are unmodified.
.PP
VEX.vvvv and EVEX.vvvv are reserved and must be 1111b, otherwise
instructions will #UD.
.SH OPERATION
.SS VCVTDQ2PD (EVEX Encoded Versions) When SRC Operand is a Register
.EX
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 64
k := j * 32
IF k1[j] OR *no writemask*
THEN DEST[i+63:i] :=
Convert_Integer_To_Double_Precision_Floating_Point(SRC[k+31:k])
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
.EE
.SS VCVTDQ2PD (EVEX Encoded Versions) When SRC Operand is a Memory Source
.EX
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 64
k := j * 32
IF k1[j] OR *no writemask*
THEN
IF (EVEX.b = 1)
THEN
DEST[i+63:i] :=
Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0])
ELSE
DEST[i+63:i] :=
Convert_Integer_To_Double_Precision_Floating_Point(SRC[k+31:k])
FI;
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+63:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+63:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
.EE
.SS VCVTDQ2PD (VEX.256 Encoded Version)
.EX
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0])
DEST[127:64] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[63:32])
DEST[191:128] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[95:64])
DEST[255:192] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[127:96)
DEST[MAXVL-1:256] := 0
.EE
.SS VCVTDQ2PD (VEX.128 Encoded Version)
.EX
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0])
DEST[127:64] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[63:32])
DEST[MAXVL-1:128] := 0
.EE
.SS CVTDQ2PD (128-bit Legacy SSE Version)
.EX
DEST[63:0] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[31:0])
DEST[127:64] := Convert_Integer_To_Double_Precision_Floating_Point(SRC[63:32])
DEST[MAXVL-1:128] (unmodified)
.EE
.SH INTEL C/C++ COMPILER INTRINSIC EQUIVALENT
.EX
VCVTDQ2PD __m512d _mm512_cvtepi32_pd( __m256i a);
VCVTDQ2PD __m512d _mm512_mask_cvtepi32_pd( __m512d s, __mmask8 k, __m256i a);
VCVTDQ2PD __m512d _mm512_maskz_cvtepi32_pd( __mmask8 k, __m256i a);
VCVTDQ2PD __m256d _mm256_cvtepi32_pd (__m128i src);
VCVTDQ2PD __m256d _mm256_mask_cvtepi32_pd( __m256d s, __mmask8 k, __m256i a);
VCVTDQ2PD __m256d _mm256_maskz_cvtepi32_pd( __mmask8 k, __m256i a);
VCVTDQ2PD __m128d _mm_mask_cvtepi32_pd( __m128d s, __mmask8 k, __m128i a);
VCVTDQ2PD __m128d _mm_maskz_cvtepi32_pd( __mmask8 k, __m128i a);
CVTDQ2PD __m128d _mm_cvtepi32_pd (__m128i src)
.EE
.SH OTHER EXCEPTIONS
VEX-encoded instructions, see Table
2-22, “Type 5 Class Exception Conditions.”
.PP
EVEX-encoded instructions, see Table
2-51, “Type E5 Class Exception Conditions.”
.PP
Additionally:
.TS
allbox;
l l
l l .
\fB\fP \fB\fP
#UD T{
If VEX.vvvv != 1111B or EVEX.vvvv != 1111B.
T}
.TE
.SH SEE ALSO
x86-manpages(7) for a list of other x86-64 man pages.
.SH COLOPHON
This UNOFFICIAL, mechanically-separated, non-verified reference is
provided for convenience, but it may be
incomplete or
broken in various obvious or non-obvious ways.
Refer to Intel® 64 and IA-32 Architectures Software Developer’s Manual
for anything serious.
.br
This page is generated by scripts; therefore may contain visual or semantical bugs. Please report them (or better, fix them) on https://github.com/ttmo-O/x86-manpages.
.br
MIT licensed by TTMO 2025 (Turkish Unofficial Chamber of Reverse Engineers - https://ttmo.re).