ia32-64/x86/vpermilpd.html
2025-07-08 02:23:29 -03:00

470 lines
36 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xmlns:x86="http://www.felixcloutier.com/x86"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="style.css"></link><title>VPERMILPD
— Permute In-Lane of Pairs of Double Precision Floating-Point Values</title></head><body><header><nav><ul><li><a href='index.html'>Index</a></li><li>December 2023</li></ul></nav></header><h1>VPERMILPD
— Permute In-Lane of Pairs of Double Precision Floating-Point Values</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>VEX.128.66.0F38.W0 0D /r VPERMILPD xmm1, xmm2, xmm3/m128</td>
<td>A</td>
<td>V/V</td>
<td>AVX</td>
<td>Permute double precision floating-point values in xmm2 using controls from xmm3/m128 and store result in xmm1.</td></tr>
<tr>
<td>VEX.256.66.0F38.W0 0D /r VPERMILPD ymm1, ymm2, ymm3/m256</td>
<td>A</td>
<td>V/V</td>
<td>AVX</td>
<td>Permute double precision floating-point values in ymm2 using controls from ymm3/m256 and store result in ymm1.</td></tr>
<tr>
<td>EVEX.128.66.0F38.W1 0D /r VPERMILPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst</td>
<td>C</td>
<td>V/V</td>
<td>AVX512VL AVX512F</td>
<td>Permute double precision floating-point values in xmm2 using control from xmm3/m128/m64bcst and store the result in xmm1 using writemask k1.</td></tr>
<tr>
<td>EVEX.256.66.0F38.W1 0D /r VPERMILPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst</td>
<td>C</td>
<td>V/V</td>
<td>AVX512VL AVX512F</td>
<td>Permute double precision floating-point values in ymm2 using control from ymm3/m256/m64bcst and store the result in ymm1 using writemask k1.</td></tr>
<tr>
<td>EVEX.512.66.0F38.W1 0D /r VPERMILPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst</td>
<td>C</td>
<td>V/V</td>
<td>AVX512F</td>
<td>Permute double precision floating-point values in zmm2 using control from zmm3/m512/m64bcst and store the result in zmm1 using writemask k1.</td></tr>
<tr>
<td>VEX.128.66.0F3A.W0 05 /r ib VPERMILPD xmm1, xmm2/m128, imm8</td>
<td>B</td>
<td>V/V</td>
<td>AVX</td>
<td>Permute double precision floating-point values in xmm2/m128 using controls from imm8.</td></tr>
<tr>
<td>VEX.256.66.0F3A.W0 05 /r ib VPERMILPD ymm1, ymm2/m256, imm8</td>
<td>B</td>
<td>V/V</td>
<td>AVX</td>
<td>Permute double precision floating-point values in ymm2/m256 using controls from imm8.</td></tr>
<tr>
<td>EVEX.128.66.0F3A.W1 05 /r ib VPERMILPD xmm1 {k1}{z}, xmm2/m128/m64bcst, imm8</td>
<td>D</td>
<td>V/V</td>
<td>AVX512VL AVX512F</td>
<td>Permute double precision floating-point values in xmm2/m128/m64bcst using controls from imm8 and store the result in xmm1 using writemask k1.</td></tr>
<tr>
<td>EVEX.256.66.0F3A.W1 05 /r ib VPERMILPD ymm1 {k1}{z}, ymm2/m256/m64bcst, imm8</td>
<td>D</td>
<td>V/V</td>
<td>AVX512VL AVX512F</td>
<td>Permute double precision floating-point values in ymm2/m256/m64bcst using controls from imm8 and store the result in ymm1 using writemask k1.</td></tr>
<tr>
<td>EVEX.512.66.0F3A.W1 05 /r ib VPERMILPD zmm1 {k1}{z}, zmm2/m512/m64bcst, imm8</td>
<td>D</td>
<td>V/V</td>
<td>AVX512F</td>
<td>Permute double precision floating-point values in zmm2/m512/m64bcst using controls from imm8 and store the result in zmm1 using writemask k1.</td></tr></table>
<h2 id="instruction-operand-encoding">Instruction Operand Encoding<a class="anchor" href="#instruction-operand-encoding">
</a></h2>
<table>
<tr>
<th>Op/En</th>
<th>Tuple Type</th>
<th>Operand 1</th>
<th>Operand 2</th>
<th>Operand 3</th>
<th>Operand 4</th></tr>
<tr>
<td>A</td>
<td>N/A</td>
<td>ModRM:reg (w)</td>
<td>VEX.vvvv (r)</td>
<td>ModRM:r/m (r)</td>
<td>N/A</td></tr>
<tr>
<td>B</td>
<td>N/A</td>
<td>ModRM:reg (w)</td>
<td>ModRM:r/m (r)</td>
<td>N/A</td>
<td>N/A</td></tr>
<tr>
<td>C</td>
<td>Full</td>
<td>ModRM:reg (w)</td>
<td>EVEX.vvvv (r)</td>
<td>ModRM:r/m (r)</td>
<td>N/A</td></tr>
<tr>
<td>D</td>
<td>Full</td>
<td>ModRM:reg (w)</td>
<td>ModRM:r/m (r)</td>
<td>N/A</td>
<td>N/A</td></tr></table>
<h3 id="description">Description<a class="anchor" href="#description">
</a></h3>
<p>(variable control version)</p>
<p>Permute pairs of double precision floating-point values in the first source operand (second operand), each using a 1-bit control field residing in the corresponding quadword element of the second source operand (third operand). Permuted results are stored in the destination operand (first operand).</p>
<p>The control bits are located at bit 0 of each quadword element (see <a href='vpermilpd.html#fig-5-24'>Figure 5-24</a>). Each control determines which of the source element in an input pair is selected for the destination element. Each pair of source elements must lie in the same 128-bit region as the destination.</p>
<p>EVEX version: The second source operand (third 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. Permuted results are written to the destination under the writemask.</p>
<figure id="fig-5-23">
<svg style="width: 574.9920000000001pt; height: 141.33597599999987pt" viewBox="59.900000000000006 0.0 484.1600000000001 122.77997999999991">
<g xmlns="http://www.w3.org/2000/svg" style="fill: none; stroke: none">
<rect height="116.82000000000001" style="fill: rgb(0%, 0%, 0%)" width="0.48" x="62.400000000000006" y="0.479979999999955"></rect>
<rect height="116.82000000000001" style="fill: rgb(0%, 0%, 0%)" width="0.47998" x="541.08" y="0.479979999999955"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="479.16" x="62.400000000000006" y="0.0"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="479.16" x="62.400000000000006" y="117.29996999999992"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="165.54" y="89.99999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48" x="239.52" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="165.3" y="103.49999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="165.3" y="89.99997999999994"></rect>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.28" x="239.76" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="239.76" y="89.99999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="313.8" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="239.52" y="103.49999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48" x="239.52" y="89.99997999999994"></rect>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.22" x="314.04" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="314.04" y="89.99999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="388.02" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="313.8" y="103.49999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="313.8" y="89.99997999999994"></rect>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.28" x="388.26" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="388.26" y="89.99999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.47998" x="462.3" y="90.23997999999995"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="388.02" y="103.49999999999994"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="388.02" y="89.99997999999994"></rect>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.22" x="165.54" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="165.54" y="22.5"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48" x="239.52" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="165.3" y="36.0"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="165.3" y="22.499979999999937"></rect>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.28" x="239.76" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="239.76" y="22.5"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="313.8" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="239.52" y="36.0"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48" x="239.52" y="22.499979999999937"></rect>
<path d="M 363.18 76.43997999999993 L 363.54 76.55997999999994 C 364.55 76.71297999999996 365.06600000000003 75.44697999999994 364.38 74.87997999999993L 364.02 74.63997999999992 C 363.13800000000003 74.26497999999992 362.296 75.40997999999996 362.88 76.13997999999992L 363.0 76.31997999999993 L 363.18 76.43997999999993" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 363.66 75.59997999999996 L 367.32000000000005 77.87997999999993 L 367.86 78.29997999999995 L 367.38000000000005 78.71997999999996 L 355.8 89.15997999999996 L 354.54 90.29997999999995 L 355.02000000000004 88.61997999999994 L 359.28000000000003 73.61997999999994 L 359.46000000000004 72.95997999999997 L 360.0 73.31997999999999 L 360.24 73.91997999999995 L 355.98 88.85997999999995 L 355.02000000000004 88.61997999999994 L 355.14000000000004 88.37997999999993 L 366.72 77.93997999999993 L 367.38000000000005 78.71997999999996 L 366.78000000000003 78.77997999999997 L 363.12 76.49997999999994" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 360.0 73.31997999999993 L 363.66 75.5999799999999 L 363.12 76.49997999999994 L 359.46 74.21997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 363.42 76.01997999999992 L 367.08000000000004 78.29997999999989 L 355.5 88.73997999999995 L 359.76 73.73997999999995" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 389.1 36.77997999999991 L 387.42 35.75997999999993 L 362.88 75.11997999999994 L 364.56 76.13997999999992" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 270.48 77.21997999999991 L 270.66 77.0999799999999 L 270.78000000000003 76.9199799999999 C 271.195 75.99497999999988 270.425 75.15497999999991 269.46000000000004 75.4799799999999L 269.28000000000003 75.5999799999999 L 269.16 75.71997999999991 C 268.509 76.46197999999993 269.13800000000003 77.5569799999999 270.12 77.39997999999991L 270.3 77.33997999999991 L 270.48 77.21997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 269.88 76.43997999999993 L 273.36 73.85997999999995 L 273.96 73.49997999999994 L 274.14 74.09997999999996 L 279.65999999999997 88.67997999999994 L 280.32 90.29997999999995 L 278.88 89.21997999999996 L 266.46 79.79997999999995 L 265.92 79.37997999999993 L 266.46 79.01997999999992 L 267.06 79.01997999999992 L 279.48 88.43997999999993 L 278.88 89.21997999999996 L 278.7 88.97997999999995 L 273.18 74.39997999999991 L 274.14 74.09997999999996 L 273.96 74.63997999999992 L 270.48 77.21997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 266.46 79.01997999999992 L 269.88 76.43997999999993 L 270.47999999999996 77.21997999999991 L 267.06 79.79997999999989" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 270.18 76.79997999999995 L 273.66 74.21997999999996 L 279.18 88.79997999999995 L 266.76 79.37997999999993" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 240.54 35.63997999999992 L 238.98 36.83997999999997 L 269.1 76.97997999999995 L 270.65999999999997 75.77997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.22" x="314.04" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="314.04" y="22.5"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="388.02" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.46000000000001" x="313.8" y="36.0"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="313.8" y="22.499979999999937"></rect>
<rect height="13.5" style="fill: rgb(100%, 100%, 100%)" width="74.28" x="388.26" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="388.26" y="22.5"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.47998" x="462.3" y="22.739979999999946"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="74.52" x="388.02" y="36.0"></rect>
<rect height="13.74" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="388.02" y="22.499979999999937"></rect>
<path d="M 418.98 77.21997999999991 L 419.16 77.0999799999999 L 419.28000000000003 76.9199799999999 C 419.695 75.99497999999988 418.925 75.15497999999991 417.96000000000004 75.4799799999999L 417.78000000000003 75.5999799999999 L 417.66 75.71997999999991 C 417.053 76.53797999999989 417.59900000000005 77.51797999999991 418.62 77.39997999999991L 418.8 77.33997999999991 L 418.98 77.21997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 418.38 76.43997999999993 L 421.86 73.85997999999995 L 422.46 73.49997999999994 L 422.64 74.09997999999996 L 428.15999999999997 88.67997999999994 L 428.82 90.29997999999995 L 427.38 89.21997999999996 L 414.96 79.79997999999995 L 414.42 79.37997999999993 L 414.96 79.01997999999992 L 415.56 79.01997999999992 L 427.98 88.43997999999993 L 427.38 89.21997999999996 L 427.2 88.97997999999995 L 421.68 74.39997999999991 L 422.64 74.09997999999996 L 422.46 74.63997999999992 L 418.98 77.21997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 414.96000000000004 79.01997999999992 L 418.38000000000005 76.43997999999993 L 418.98 77.21997999999991 L 415.56000000000006 79.79997999999989" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 418.68 76.79997999999995 L 422.16 74.21997999999996 L 427.68 88.79997999999995 L 415.26 79.37997999999993" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 389.04 35.63997999999992 L 387.48 36.83997999999997 L 417.6 76.97997999999995 L 419.16 75.77997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 214.68 76.43997999999993 L 215.04000000000002 76.55997999999994 C 216.05 76.71297999999996 216.566 75.44697999999994 215.88 74.87997999999993L 215.52 74.63997999999992 C 214.56 74.27197999999993 213.822 75.42097999999993 214.38 76.13997999999992L 214.5 76.31997999999993 L 214.68 76.43997999999993" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 215.16 75.59997999999996 L 218.82 77.87997999999993 L 219.35999999999999 78.29997999999995 L 218.88 78.71997999999996 L 207.29999999999998 89.15997999999996 L 206.04 90.29997999999995 L 206.51999999999998 88.61997999999994 L 210.78 73.61997999999994 L 210.96 72.95997999999997 L 211.5 73.31997999999999 L 211.74 73.91997999999995 L 207.48 88.85997999999995 L 206.51999999999998 88.61997999999994 L 206.64 88.37997999999993 L 218.22 77.93997999999993 L 218.88 78.71997999999996 L 218.28 78.77997999999997 L 214.62 76.49997999999994" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 211.5 73.31997999999993 L 215.16 75.5999799999999 L 214.62 76.49997999999994 L 210.96 74.21997999999991" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<path d="M 214.92000000000002 76.01997999999992 L 218.58 78.29997999999989 L 207.00000000000003 88.73997999999995 L 211.26000000000002 73.73997999999995" style="fill: rgb(0%, 0%, 0%); fill-rule: evenodd"></path>
<path d="M 240.60000000000002 36.77997999999991 L 238.92000000000002 35.75997999999993 L 214.38000000000002 75.11997999999994 L 216.06000000000003 76.13997999999992" style="fill: rgb(0%, 0%, 0%); fill-rule: nonzero"></path>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="9.17216670000002" x="201.36" y="32.85087779999992">X3</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="9.232485099999963" x="275.64" y="32.85087779999992">X2</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="9.172166699999991" x="349.86" y="32.85087779999992">X1</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="9.172166699999991" x="424.14" y="32.85087779999992">X0</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="20.0294787" x="145.50079005999996" y="34.47118081999997">SRC1</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="20.024954820000005" x="145.26164749999992" y="100.35087779999992">DEST</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="22.553803740000035" x="200.22" y="100.35087779999992">X2..X3</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="22.493485340000063" x="274.5" y="100.35087779999992">X2..X3</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="22.492731359999937" x="349.86" y="100.35087779999992">X0..X1</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 8.414416800000026pt; fill: #000" textLength="22.493485340000063" x="424.14" y="100.35087779999992">X0..X1</text></g></svg>
<figcaption><a href='vpermilpd.html#fig-5-23'>Figure 5-23</a>. VPERMILPD Operation</figcaption></figure>
<p>VEX.256 encoded version: Bits (MAXVL-1:256) of the corresponding ZMM register are zeroed.</p>
<figure id="fig-5-24">
<svg style="width: 566.208048pt; height: 132.69597600000003pt" viewBox="63.56 0.0 476.84004 115.57998000000003">
<g xmlns="http://www.w3.org/2000/svg" style="fill: none; stroke: none">
<rect height="109.56" style="fill: rgb(0%, 0%, 0%)" width="0.48" x="66.06" y="0.5399800000000141"></rect>
<rect height="109.56" style="fill: rgb(0%, 0%, 0%)" width="0.48004" x="537.42" y="0.5399800000000141"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="471.84000000000003" x="66.06" y="0.0"></rect>
<rect height="0.47998" style="fill: rgb(0%, 0%, 0%)" width="471.84000000000003" x="66.06" y="110.10000000000002"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="17.76" x="449.88" y="36.23998"></rect>
<rect height="36.06" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="466.62" y="36.71998000000002"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="17.7" x="449.40000000000003" y="71.75998000000004"></rect>
<rect height="36.0" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="449.40000000000003" y="36.23998"></rect>
<rect height="36.0" style="fill: rgb(100%, 100%, 100%)" width="71.52" x="119.04" y="36.47998000000001"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="71.76" x="119.04" y="36.23997000000003"></rect>
<rect height="36.24" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="190.32" y="36.47998000000001"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="71.76" x="118.80000000000001" y="72.23997000000003"></rect>
<rect height="36.24" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="118.80000000000001" y="36.23998"></rect>
<rect height="36.0" style="fill: rgb(100%, 100%, 100%)" width="18.96" x="467.40000000000003" y="36.47998000000001"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="19.5" x="467.40000000000003" y="35.99998000000005"></rect>
<rect height="36.54" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="485.88" y="36.47998000000001"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="19.44" x="466.92" y="71.99998000000005"></rect>
<rect height="36.480000000000004" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="466.92" y="35.999979999999994"></rect>
<rect height="35.52" style="fill: rgb(100%, 100%, 100%)" width="17.22" x="340.86" y="36.71998000000002"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="17.76" x="340.86" y="36.23998"></rect>
<rect height="36.06" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="357.6" y="36.71998000000002"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="17.7" x="340.38" y="71.75998000000004"></rect>
<rect height="36.0" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="340.38" y="36.23998"></rect>
<rect height="36.0" style="fill: rgb(100%, 100%, 100%)" width="18.96" x="358.38" y="36.47998000000001"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="19.5" x="358.38" y="35.99998000000005"></rect>
<rect height="36.54" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="376.86" y="36.47998000000001"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="19.44" x="357.90000000000003" y="71.99998000000005"></rect>
<rect height="36.480000000000004" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="357.90000000000003" y="35.999979999999994"></rect>
<rect height="35.52" style="fill: rgb(100%, 100%, 100%)" width="17.16" x="191.88" y="36.71998000000002"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="17.7" x="191.88" y="36.23998"></rect>
<rect height="36.06" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="208.56" y="36.71998000000002"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="17.64" x="191.4" y="71.75998000000004"></rect>
<rect height="36.0" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="191.4" y="36.23998"></rect>
<rect height="36.0" style="fill: rgb(100%, 100%, 100%)" width="19.02" x="209.34" y="36.47998000000001"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="19.56" x="209.34" y="35.99998000000005"></rect>
<rect height="36.54" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="227.88" y="36.47998000000001"></rect>
<rect height="1.02" style="fill: rgb(0%, 0%, 0%)" width="19.5" x="208.86" y="71.99998000000005"></rect>
<rect height="36.480000000000004" style="fill: rgb(0%, 0%, 0%)" width="1.02" x="208.86" y="35.999979999999994"></rect>
<rect height="36.0" style="fill: rgb(100%, 100%, 100%)" width="71.52" x="268.56" y="35.93998000000005"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="71.76" x="268.56" y="35.69997000000001"></rect>
<rect height="36.24" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="339.84000000000003" y="35.93997999999999"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="71.76" x="268.32" y="71.69997000000001"></rect>
<rect height="36.24" style="fill: rgb(0%, 0%, 0%)" width="0.47998" x="268.32" y="35.69998000000004"></rect>
<rect height="36.0" style="fill: rgb(100%, 100%, 100%)" width="71.52" x="377.04" y="36.47998000000001"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="71.76" x="377.04" y="36.23997000000003"></rect>
<rect height="36.24" style="fill: rgb(0%, 0%, 0%)" width="0.48001000000000005" x="448.32" y="36.47998000000001"></rect>
<rect height="0.48001000000000005" style="fill: rgb(0%, 0%, 0%)" width="71.76" x="376.8" y="72.23997000000003"></rect>
<rect height="36.24" style="fill: rgb(0%, 0%, 0%)" width="0.47998" x="376.8" y="36.23998"></rect>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="12.191040000000044" x="470.58" y="24.83134000000001">Bit</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.505719999999997pt; fill: #000" textLength="30.660000000000082" x="323.58" y="34.85134000000005">6665</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025720000000002pt; fill: #000" textLength="4.980000000000018" x="455.76" y="34.37134000000005">1</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="14.999759999999966" x="119.04" y="35.33134000000001">255</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="34.19965199999996" x="174.06" y="34.85134000000005">194193</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025720000000002pt; fill: #000" textLength="4.980000000000018" x="432.06" y="34.85134000000007">2</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="14.999760000000038" x="268.559964" y="34.85141200000004">127</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="9.960000000000036" x="377.039964" y="35.33141200000006">63</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 19.925999999999988pt; fill: #000" textLength="22.50000000000003" x="238.08" y="66.34798">. . .</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 10.55620758751894pt; fill: #000" textLength="27.766813953043766" x="296.58" y="59.959727821954914">ignored</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 10.55620758751894pt; fill: #000" textLength="27.726642833043798" x="405.06" y="60.499727821954934">ignored</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 10.55620758751894pt; fill: #000" textLength="10.150189453812317" x="193.38" y="60.979727821954896">sel</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 10.55620758751894pt; fill: #000" textLength="10.149276473812336" x="342.36" y="60.979727821954896">sel</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 10.55620758751894pt; fill: #000" textLength="10.150189453812345" x="451.38" y="60.979727821954896">sel</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="61.06774799999991" x="162.06028799999999" y="96.83134000000001">Control Field 4</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="30.53536799999989" x="310.079832" y="96.83134000000001">Control</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="28.01050799999996" x="343.13009999999986" y="96.83134000000001">Field 2</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="30.52042799999998" x="419.1" y="96.83134000000001">Control</text>
<text lengthAdjust="spacingAndGlyphs" style="font-size: 11.025719999999978pt; fill: #000" textLength="25.534452000000044" x="452.133336" y="96.83134000000001">Field1</text></g></svg>
<figcaption><a href='vpermilpd.html#fig-5-24'>Figure 5-24</a>. VPERMILPD Shuffle Control</figcaption></figure>
<p>Immediate control version: Permute pairs of double precision floating-point values in the first source operand (second operand), each pair using a 1-bit control field in the imm8 byte. Each element in the destination operand (first operand) use a separate control bit of the imm8 byte.</p>
<p>VEX version: The source operand is a YMM/XMM register or a 256/128-bit memory location and the destination operand is a YMM/XMM register. Imm8 byte provides the lower 4/2 bit as permute control fields.</p>
<p>EVEX version: The source operand (second 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. Permuted results are written to the destination under the writemask. Imm8 byte provides the lower 8/4/2 bit as permute control fields.</p>
<p>Note: For the imm8 versions, VEX.vvvv and EVEX.vvvv are reserved and must be 1111b otherwise instruction will #UD.</p>
<h3 id="operation">Operation<a class="anchor" href="#operation">
</a></h3>
<h4 id="vpermilpd--evex-immediate-versions-">VPERMILPD (EVEX immediate versions)<a class="anchor" href="#vpermilpd--evex-immediate-versions-">
</a></h4>
<pre>(KL, VL) = (8, 512)
FOR j := 0 TO KL-1
i := j * 64
IF (EVEX.b = 1) AND (SRC1 *is memory*)
THEN TMP_SRC1[i+63:i] := SRC1[63:0];
ELSE TMP_SRC1[i+63:i] := SRC1[i+63:i];
FI;
ENDFOR;
IF (imm8[0] = 0) THEN TMP_DEST[63:0] := SRC1[63:0]; FI;
IF (imm8[0] = 1) THEN TMP_DEST[63:0] := TMP_SRC1[127:64]; FI;
IF (imm8[1] = 0) THEN TMP_DEST[127:64] := TMP_SRC1[63:0]; FI;
IF (imm8[1] = 1) THEN TMP_DEST[127:64] := TMP_SRC1[127:64]; FI;
IF VL &gt;= 256
IF (imm8[2] = 0) THEN TMP_DEST[191:128] := TMP_SRC1[191:128]; FI;
IF (imm8[2] = 1) THEN TMP_DEST[191:128] := TMP_SRC1[255:192]; FI;
IF (imm8[3] = 0) THEN TMP_DEST[255:192] := TMP_SRC1[191:128]; FI;
IF (imm8[3] = 1) THEN TMP_DEST[255:192] := TMP_SRC1[255:192]; FI;
FI;
IF VL &gt;= 512
IF (imm8[4] = 0) THEN TMP_DEST[319:256] := TMP_SRC1[319:256]; FI;
IF (imm8[4] = 1) THEN TMP_DEST[319:256] := TMP_SRC1[383:320]; FI;
IF (imm8[5] = 0) THEN TMP_DEST[383:320] := TMP_SRC1[319:256]; FI;
IF (imm8[5] = 1) THEN TMP_DEST[383:320] := TMP_SRC1[383:320]; FI;
IF (imm8[6] = 0) THEN TMP_DEST[447:384] := TMP_SRC1[447:384]; FI;
IF (imm8[6] = 1) THEN TMP_DEST[447:384] := TMP_SRC1[511:448]; FI;
IF (imm8[7] = 0) THEN TMP_DEST[511:448] := TMP_SRC1[447:384]; FI;
IF (imm8[7] = 1) THEN TMP_DEST[511:448] := TMP_SRC1[511:448]; FI;
FI;
FOR j := 0 TO KL-1
i := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+63:i] := TMP_DEST[i+63:i]
ELSE
IF *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
</pre>
<h4 id="vpermilpd--256-bit-immediate-version-">VPERMILPD (256-bit immediate version)<a class="anchor" href="#vpermilpd--256-bit-immediate-version-">
</a></h4>
<pre>IF (imm8[0] = 0) THEN DEST[63:0] := SRC1[63:0]
IF (imm8[0] = 1) THEN DEST[63:0] := SRC1[127:64]
IF (imm8[1] = 0) THEN DEST[127:64] := SRC1[63:0]
IF (imm8[1] = 1) THEN DEST[127:64] := SRC1[127:64]
IF (imm8[2] = 0) THEN DEST[191:128] := SRC1[191:128]
IF (imm8[2] = 1) THEN DEST[191:128] := SRC1[255:192]
IF (imm8[3] = 0) THEN DEST[255:192] := SRC1[191:128]
IF (imm8[3] = 1) THEN DEST[255:192] := SRC1[255:192]
DEST[MAXVL-1:256] := 0
</pre>
<h4 id="vpermilpd--128-bit-immediate-version-">VPERMILPD (128-bit immediate version)<a class="anchor" href="#vpermilpd--128-bit-immediate-version-">
</a></h4>
<pre>IF (imm8[0] = 0) THEN DEST[63:0] := SRC1[63:0]
IF (imm8[0] = 1) THEN DEST[63:0] := SRC1[127:64]
IF (imm8[1] = 0) THEN DEST[127:64] := SRC1[63:0]
IF (imm8[1] = 1) THEN DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
</pre>
<h4 id="vpermilpd--evex-variable-versions-">VPERMILPD (EVEX variable versions)<a class="anchor" href="#vpermilpd--evex-variable-versions-">
</a></h4>
<pre>(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 64
IF (EVEX.b = 1) AND (SRC2 *is memory*)
THEN TMP_SRC2[i+63:i] := SRC2[63:0];
ELSE TMP_SRC2[i+63:i] := SRC2[i+63:i];
FI;
ENDFOR;
IF (TMP_SRC2[1] = 0) THEN TMP_DEST[63:0] := SRC1[63:0]; FI;
IF (TMP_SRC2[1] = 1) THEN TMP_DEST[63:0] := SRC1[127:64]; FI;
IF (TMP_SRC2[65] = 0) THEN TMP_DEST[127:64] := SRC1[63:0]; FI;
IF (TMP_SRC2[65] = 1) THEN TMP_DEST[127:64] := SRC1[127:64]; FI;
IF VL &gt;= 256
IF (TMP_SRC2[129] = 0) THEN TMP_DEST[191:128] := SRC1[191:128]; FI;
IF (TMP_SRC2[129] = 1) THEN TMP_DEST[191:128] := SRC1[255:192]; FI;
IF (TMP_SRC2[193] = 0) THEN TMP_DEST[255:192] := SRC1[191:128]; FI;
IF (TMP_SRC2[193] = 1) THEN TMP_DEST[255:192] := SRC1[255:192]; FI;
FI;
IF VL &gt;= 512
IF (TMP_SRC2[257] = 0) THEN TMP_DEST[319:256] := SRC1[319:256]; FI;
IF (TMP_SRC2[257] = 1) THEN TMP_DEST[319:256] := SRC1[383:320]; FI;
IF (TMP_SRC2[321] = 0) THEN TMP_DEST[383:320] := SRC1[319:256]; FI;
IF (TMP_SRC2[321] = 1) THEN TMP_DEST[383:320] := SRC1[383:320]; FI;
IF (TMP_SRC2[385] = 0) THEN TMP_DEST[447:384] := SRC1[447:384]; FI;
IF (TMP_SRC2[385] = 1) THEN TMP_DEST[447:384] := SRC1[511:448]; FI;
IF (TMP_SRC2[449] = 0) THEN TMP_DEST[511:448] := SRC1[447:384]; FI;
IF (TMP_SRC2[449] = 1) THEN TMP_DEST[511:448] := SRC1[511:448]; FI;
FI;
FOR j := 0 TO KL-1
i := j * 64
IF k1[j] OR *no writemask*
THEN DEST[i+63:i] := TMP_DEST[i+63:i]
ELSE
IF *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
</pre>
<h4 id="vpermilpd--256-bit-variable-version-">VPERMILPD (256-bit variable version)<a class="anchor" href="#vpermilpd--256-bit-variable-version-">
</a></h4>
<pre>IF (SRC2[1] = 0) THEN DEST[63:0] := SRC1[63:0]
IF (SRC2[1] = 1) THEN DEST[63:0] := SRC1[127:64]
IF (SRC2[65] = 0) THEN DEST[127:64] := SRC1[63:0]
IF (SRC2[65] = 1) THEN DEST[127:64] := SRC1[127:64]
IF (SRC2[129] = 0) THEN DEST[191:128] := SRC1[191:128]
IF (SRC2[129] = 1) THEN DEST[191:128] := SRC1[255:192]
IF (SRC2[193] = 0) THEN DEST[255:192] := SRC1[191:128]
IF (SRC2[193] = 1) THEN DEST[255:192] := SRC1[255:192]
DEST[MAXVL-1:256] := 0
</pre>
<h4 id="vpermilpd--128-bit-variable-version-">VPERMILPD (128-bit variable version)<a class="anchor" href="#vpermilpd--128-bit-variable-version-">
</a></h4>
<pre>IF (SRC2[1] = 0) THEN DEST[63:0] := SRC1[63:0]
IF (SRC2[1] = 1) THEN DEST[63:0] := SRC1[127:64]
IF (SRC2[65] = 0) THEN DEST[127:64] := SRC1[63:0]
IF (SRC2[65] = 1) THEN DEST[127:64] := SRC1[127:64]
DEST[MAXVL-1:128] := 0
</pre>
<h3 id="intel-c-c++-compiler-intrinsic-equivalent">Intel C/C++ Compiler Intrinsic Equivalent<a class="anchor" href="#intel-c-c++-compiler-intrinsic-equivalent">
</a></h3>
<pre>VPERMILPD __m512d _mm512_permute_pd( __m512d a, int imm);
</pre>
<pre>VPERMILPD __m512d _mm512_mask_permute_pd(__m512d s, __mmask8 k, __m512d a, int imm);
</pre>
<pre>VPERMILPD __m512d _mm512_maskz_permute_pd( __mmask8 k, __m512d a, int imm);
</pre>
<pre>VPERMILPD __m256d _mm256_mask_permute_pd(__m256d s, __mmask8 k, __m256d a, int imm);
</pre>
<pre>VPERMILPD __m256d _mm256_maskz_permute_pd( __mmask8 k, __m256d a, int imm);
</pre>
<pre>VPERMILPD __m128d _mm_mask_permute_pd(__m128d s, __mmask8 k, __m128d a, int imm);
</pre>
<pre>VPERMILPD __m128d _mm_maskz_permute_pd( __mmask8 k, __m128d a, int imm);
</pre>
<pre>VPERMILPD __m512d _mm512_permutevar_pd( __m512i i, __m512d a);
</pre>
<pre>VPERMILPD __m512d _mm512_mask_permutevar_pd(__m512d s, __mmask8 k, __m512i i, __m512d a);
</pre>
<pre>VPERMILPD __m512d _mm512_maskz_permutevar_pd( __mmask8 k, __m512i i, __m512d a);
</pre>
<pre>VPERMILPD __m256d _mm256_mask_permutevar_pd(__m256d s, __mmask8 k, __m256d i, __m256d a);
</pre>
<pre>VPERMILPD __m256d _mm256_maskz_permutevar_pd( __mmask8 k, __m256d i, __m256d a);
</pre>
<pre>VPERMILPD __m128d _mm_mask_permutevar_pd(__m128d s, __mmask8 k, __m128d i, __m128d a);
</pre>
<pre>VPERMILPD __m128d _mm_maskz_permutevar_pd( __mmask8 k, __m128d i, __m128d a);
</pre>
<pre>VPERMILPD __m128d _mm_permute_pd (__m128d a, int control)
</pre>
<pre>VPERMILPD __m256d _mm256_permute_pd (__m256d a, int control)
</pre>
<pre>VPERMILPD __m128d _mm_permutevar_pd (__m128d a, __m128i control);
</pre>
<pre>VPERMILPD __m256d _mm256_permutevar_pd (__m256d a, __m256i control);
</pre>
<h3 class="exceptions" id="simd-floating-point-exceptions">SIMD Floating-Point Exceptions<a class="anchor" href="#simd-floating-point-exceptions">
</a></h3>
<p>None.</p>
<h3 class="exceptions" id="other-exceptions">Other Exceptions<a class="anchor" href="#other-exceptions">
</a></h3>
<p>Non-EVEX-encoded instruction, see <span class="not-imported">Table 2-21</span>, “Type 4 Class Exception Conditions.”</p>
<p>Additionally:</p>
<table>
<tr>
<td>#UD</td>
<td>If VEX.W = 1.</td></tr></table>
<p>EVEX-encoded instruction, see <span class="not-imported">Table 2-50</span>, “Type E4NF Class Exception Conditions.”</p>
<p>Additionally:</p>
<table>
<tr>
<td>#UD</td>
<td>If either (E)VEX.vvvv != 1111B and with imm8.</td></tr></table><footer><p>
This UNOFFICIAL, mechanically-separated, non-verified reference is provided for convenience, but it may be
inc<span style="opacity: 0.2">omp</span>lete or b<sub>r</sub>oke<sub>n</sub> in various obvious or non-obvious
ways. Refer to <a href="https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4">Intel® 64 and IA-32 Architectures Software Developers Manual</a> for anything serious.
</p></footer></body></html>