blob: 008afe2d766762d8d7d8f7c1075ac466366efac8 [file] [log] [blame] [raw]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="style.css" type="text/css" rel="stylesheet">
<title>PMOVZX — Packed Move with Zero Extend </title></head>
<body>
<h1>PMOVZX — Packed Move with Zero Extend</h1>
<table>
<tr>
<th>Opcode/Instruction</th>
<th>Op/En</th>
<th>64/32 bit Mode Support</th>
<th>CPUID Feature Flag</th>
<th>Description</th></tr>
<tr>
<td>66 0f 38 30 /r PMOVZXBW<em> xmm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>SSE4_1</td>
<td>Zero extend 8 packed 8-bit integers in the low 8 bytes of <em>xmm2/m64 </em>to 8 packed 16-bit integers in<em> xmm1</em>.</td></tr>
<tr>
<td>66 0f 38 31 /r PMOVZXBD<em> xmm1, xmm2/m32</em></td>
<td>RM</td>
<td>V/V</td>
<td>SSE4_1</td>
<td>Zero extend 4 packed 8-bit integers in the low 4 bytes of <em>xmm2/m32</em> to 4 packed 32-bit integers in<em> xmm1.</em></td></tr>
<tr>
<td>66 0f 38 32 /r PMOVZXBQ <em>xmm1, xmm2/m16</em></td>
<td>RM</td>
<td>V/V</td>
<td>SSE4_1</td>
<td>Zero extend 2 packed 8-bit integers in the low 2 bytes of <em>xmm2/m16</em> to 2 packed 64-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>66 0f 38 33 /r PMOVZXWD <em>xmm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>SSE4_1</td>
<td>Zero extend 4 packed 16-bit integers in the low 8 bytes of<em> xmm2/m64</em> to 4 packed 32-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>66 0f 38 34 /r PMOVZXWQ <em>xmm1, xmm2/m32</em></td>
<td>RM</td>
<td>V/V</td>
<td>SSE4_1</td>
<td>Zero extend 2 packed 16-bit integers in the low 4 bytes of<em> xmm2/m32</em> to 2 packed 64-bit integers in<em> xmm1</em>.</td></tr>
<tr>
<td>66 0f 38 35 /r PMOVZXDQ <em>xmm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>SSE4_1</td>
<td>Zero extend 2 packed 32-bit integers in the low 8 bytes of<em> xmm2/m64</em> to 2 packed 64-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.128.66.0F38.WIG 30 /r VPMOVZXBW <em>xmm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX</td>
<td>Zero extend 8 packed 8-bit integers in the low 8 bytes of <em>xmm2/m64</em> to 8 packed 16-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.128.66.0F38.WIG 31 /r VPMOVZXBD <em>xmm1, xmm2/m32</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX</td>
<td>Zero extend 4 packed 8-bit integers in the low 4 bytes of <em>xmm2/m32</em> to 4 packed 32-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.128.66.0F38.WIG 32 /r VPMOVZXBQ<em> xmm1, xmm2/m16</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX</td>
<td>Zero extend 2 packed 8-bit integers in the low 2 bytes of <em>xmm2/m16</em> to 2 packed 64-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.128.66.0F38.WIG 33 /r VPMOVZXWD <em>xmm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX</td>
<td>Zero extend 4 packed 16-bit integers in the low 8 bytes of <em>xmm2/m64</em> to 4 packed 32-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.128.66.0F38.WIG 34 /r VPMOVZXWQ <em>xmm1, xmm2/m32</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX</td>
<td>Zero extend 2 packed 16-bit integers in the low 4 bytes of <em>xmm2/m32</em> to 2 packed 64-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.128.66.0F38.WIG 35 /r VPMOVZXDQ <em>xmm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX</td>
<td>Zero extend 2 packed 32-bit integers in the low 8 bytes of <em>xmm2/m64</em> to 2 packed 64-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.256.66.0F38.WIG 30 /r VPMOVZXBW <em>ymm1, xmm2/m128</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX2</td>
<td>Zero extend 16 packed 8-bit integers in the low 16 bytes of <em>xmm2/m128</em> to 16 packed 16-bit integers in <em>ymm1</em>.</td></tr>
<tr>
<td>VEX.256.66.0F38.WIG 31 /r VPMOVZXBD <em>ymm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX2</td>
<td>Zero extend 8 packed 8-bit integers in the low 8 bytes of <em>xmm2/m64</em> to 8 packed 32-bit integers in <em>ymm1</em>.</td></tr>
<tr>
<td>VEX.256.66.0F38.WIG 32 /r VPMOVZXBQ <em>ymm1, xmm2/m32</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX2</td>
<td>Zero extend 4 packed 8-bit integers in the low 4 bytes of <em>xmm2/m32</em> to 4 packed 64-bit integers in <em>ymm1</em>.</td></tr>
<tr>
<td>VEX.256.66.0F38.WIG 33 /r VPMOVZXWD <em>ymm1, xmm2/m128</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX2</td>
<td>Zero extend 8 packed 16-bit integers in the low 16 bytes of <em>xmm2/m128</em> to 8 packed 32-bit integers in <em>ymm1</em>.</td></tr></table>
<table>
<tr>
<th>Opcode/Instruction</th>
<th>Op/En</th>
<th>64/32 bit Mode Support</th>
<th>CPUID Feature Flag</th>
<th>Description</th></tr>
<tr>
<td>VEX.256.66.0F38.WIG 34 /r VPMOVZXWQ <em>ymm1, xmm2/m64</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX2</td>
<td>Zero extend 4 packed 16-bit integers in the low 8 bytes of <em>xmm2/m64</em> to 4 packed 64-bit integers in <em>xmm1</em>.</td></tr>
<tr>
<td>VEX.256.66.0F38.WIG 35 /r VPMOVZXDQ <em>ymm1, xmm2/m128</em></td>
<td>RM</td>
<td>V/V</td>
<td>AVX2</td>
<td>Zero extend 4 packed 32-bit integers in the low 16 bytes of <em>xmm2/m128</em> to 4 packed 64-bit integers in <em>ymm1</em>.</td></tr></table>
<h3>Instruction Operand Encoding</h3>
<table>
<tr>
<td>Op/En</td>
<td>Operand 1</td>
<td>Operand 2</td>
<td>Operand 3</td>
<td>Operand 4</td></tr>
<tr>
<td>RM</td>
<td>ModRM:reg (w)</td>
<td>ModRM:r/m (r)</td>
<td>NA</td>
<td>NA</td></tr></table>
<h2>Description</h2>
<p>Zero-extend the low byte/word/dword values in each word/dword/qword element of the source operand (second operand) to word/dword/qword integers and stored as packed data in the destination operand (first operand).</p>
<p>128-bit Legacy SSE version: Bits (VLMAX-1:128) of the corresponding YMM destination register remain unchanged.</p>
<p>VEX.128 encoded version: Bits (VLMAX-1:128) of the destination YMM register are zeroed.</p>
<p>VEX.256 encoded version: The destination register is YMM Register.</p>
<p>Note: VEX.vvvv is reserved and must be 1111b, VEX.L must be 0, otherwise the instruction will #UD.</p>
<h2>Operation</h2>
<p><strong>PMOVZXBW</strong></p>
<pre> DEST[15:0] ← ZeroExtend(SRC[7:0]);
DEST[31:16] ← ZeroExtend(SRC[15:8]);
DEST[47:32] ← ZeroExtend(SRC[23:16]);
DEST[63:48] ← ZeroExtend(SRC[31:24]);
DEST[79:64] ← ZeroExtend(SRC[39:32]);
DEST[95:80] ← ZeroExtend(SRC[47:40]);
DEST[111:96] ← ZeroExtend(SRC[55:48]);
DEST[127:112] ← ZeroExtend(SRC[63:56]);</pre>
<p><strong>PMOVZXBD</strong></p>
<pre> DEST[31:0] ← ZeroExtend(SRC[7:0]);
DEST[63:32] ← ZeroExtend(SRC[15:8]);
DEST[95:64] ← ZeroExtend(SRC[23:16]);
DEST[127:96] ← ZeroExtend(SRC[31:24]);</pre>
<p><strong>PMOVZXQB</strong></p>
<pre> DEST[63:0] ← ZeroExtend(SRC[7:0]);
DEST[127:64] ← ZeroExtend(SRC[15:8]);</pre>
<p><strong>PMOVZXWD</strong></p>
<pre> DEST[31:0] ← ZeroExtend(SRC[15:0]);
DEST[63:32] ← ZeroExtend(SRC[31:16]);
DEST[95:64] ← ZeroExtend(SRC[47:32]);
DEST[127:96] ← ZeroExtend(SRC[63:48]);</pre>
<p><strong>PMOVZXWQ</strong></p>
<pre> DEST[63:0] ← ZeroExtend(SRC[15:0]);
DEST[127:64] ← ZeroExtend(SRC[31:16]);</pre>
<p><strong>PMOVZXDQ</strong></p>
<pre> DEST[63:0] ← ZeroExtend(SRC[31:0]);
DEST[127:64] ← ZeroExtend(SRC[63:32]);</pre>
<p><strong>VPMOVZXBW (VEX.128 encoded version)</strong></p>
<pre>Packed_Zero_Extend_BYTE_to_WORD()
DEST[VLMAX-1:128] ← 0</pre>
<p><strong>VPMOVZXBD (VEX.128 encoded version)</strong></p>
<pre>Packed_Zero_Extend_BYTE_to_DWORD()
DEST[VLMAX-1:128] ← 0</pre>
<p><strong>VPMOVZXBQ (VEX.128 encoded version)</strong></p>
<pre>Packed_Zero_Extend_BYTE_to_QWORD()
DEST[VLMAX-1:128] ← 0</pre>
<p><strong>VPMOVZXWD (VEX.128 encoded version)</strong></p>
<pre>Packed_Zero_Extend_WORD_to_DWORD()
DEST[VLMAX-1:128] ← 0</pre>
<p><strong>VPMOVZXWQ (VEX.128 encoded version)</strong></p>
<pre>Packed_Zero_Extend_WORD_to_QWORD()
DEST[VLMAX-1:128] ← 0</pre>
<p><strong>VPMOVZXDQ (VEX.128 encoded version)</strong></p>
<pre>Packed_Zero_Extend_DWORD_to_QWORD()
DEST[VLMAX-1:128] ← 0</pre>
<p><strong>VPMOVZXBW (VEX.256 encoded version)</strong></p>
<pre>Packed_Zero_Extend_BYTE_to_WORD(DEST[127:0], SRC[63:0])
Packed_Zero_Extend_BYTE_to_WORD(DEST[255:128], SRC[127:64])</pre>
<p><strong>VPMOVZXBD (VEX.256 encoded version)</strong></p>
<pre>Packed_Zero_Extend_BYTE_to_DWORD(DEST[127:0], SRC[31:0])
Packed_Zero_Extend_BYTE_to_DWORD(DEST[255:128], SRC[63:32])</pre>
<p><strong>VPMOVZXBQ (VEX.256 encoded version)</strong></p>
<pre>Packed_Zero_Extend_BYTE_to_QWORD(DEST[127:0], SRC[15:0])
Packed_Zero_Extend_BYTE_to_QWORD(DEST[255:128], SRC[31:16])</pre>
<p><strong>VPMOVZXWD (VEX.256 encoded version)</strong></p>
<pre>Packed_Zero_Extend_WORD_to_DWORD(DEST[127:0], SRC[63:0])
Packed_Zero_Extend_WORD_to_DWORD(DEST[255:128], SRC[127:64])</pre>
<p><strong>VPMOVZXWQ (VEX.256 encoded version)</strong></p>
<pre>Packed_Zero_Extend_WORD_to_QWORD(DEST[127:0], SRC[31:0])
Packed_Zero_Extend_WORD_to_QWORD(DEST[255:128], SRC[63:32])</pre>
<p><strong>VPMOVZXDQ (VEX.256 encoded version)</strong></p>
<pre>Packed_Zero_Extend_DWORD_to_QWORD(DEST[127:0], SRC[63:0])
Packed_Zero_Extend_DWORD_to_QWORD(DEST[255:128], SRC[127:64])</pre>
<h2>Flags Affected</h2>
<p>None</p>
<h2>Intel C/C++ Compiler Intrinsic Equivalent</h2>
<p>(V)PMOVZXBW:</p>
<p>__m128i _mm_ cvtepu8_epi16 ( __m128i a);</p>
<p>VPMOVZXBW:</p>
<p>__m256i _mm256_cvtepu8_epi16 ( __m128i a);</p>
<p>(V)PMOVZXBD:</p>
<p>__m128i _mm_ cvtepu8_epi32 ( __m128i a);</p>
<p>VPMOVZXBD:</p>
<p>__m256i _mm256_cvtepu8_epi32 ( __m128i a);</p>
<p>(V)PMOVZXBQ:</p>
<p>__m128i _mm_ cvtepu8_epi64 ( __m128i a);</p>
<p>VPMOVZXBQ:</p>
<p>__m256i _mm256_cvtepu8_epi64 ( __m128i a);</p>
<p>(V)PMOVZXWD:</p>
<p>__m128i _mm_ cvtepu16_epi32 ( __m128i a);</p>
<p>VPMOVZXWD:</p>
<p>__m256i _mm256_cvtepu16_epi32 ( __m128i a);</p>
<p>(V)PMOVZXWQ:</p>
<p>__m128i _mm_ cvtepu16_epi64 ( __m128i a);</p>
<p>VPMOVZXWQ:</p>
<p>__m256i _mm256_cvtepu16_epi64 ( __m128i a);</p>
<p>(V)PMOVZXDQ:</p>
<p>__m128i _mm_ cvtepu32_epi64 ( __m128i a);</p>
<p>VPMOVZXDQ:</p>
<p> __m256i _mm256_cvtepu32_epi64 ( __m128i a);</p>
<h2>Flags Affected</h2>
<p>None.</p>
<h2>SIMD Floating-Point Exceptions</h2>
<p>None.</p>
<h2>Other Exceptions</h2>
<p>See Exceptions Type 5; additionally</p>
<table class="exception-table">
<tr>
<td>#UD</td>
<td>
<p>If VEX.L = 1.</p>
<p>If VEX.vvvv ≠ 1111B.</p></td></tr></table></body></html>