ia32-64/x86/kshiftrw.kshiftrb.kshiftrq.kshiftrd.html
2025-07-08 02:23:29 -03:00

117 lines
4.4 KiB
HTML
Raw 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>KSHIFTRW/KSHIFTRB/KSHIFTRQ/KSHIFTRD
— Shift Right Mask Registers</title></head><body><header><nav><ul><li><a href='index.html'>Index</a></li><li>December 2023</li></ul></nav></header><h1>KSHIFTRW/KSHIFTRB/KSHIFTRQ/KSHIFTRD
— Shift Right Mask Registers</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.L0.66.0F3A.W1 30 /r KSHIFTRW k1, k2, imm8</td>
<td>RRI</td>
<td>V/V</td>
<td>AVX512F</td>
<td>Shift right 16 bits in k2 by immediate and write result in k1.</td></tr>
<tr>
<td>VEX.L0.66.0F3A.W0 30 /r KSHIFTRB k1, k2, imm8</td>
<td>RRI</td>
<td>V/V</td>
<td>AVX512DQ</td>
<td>Shift right 8 bits in k2 by immediate and write result in k1.</td></tr>
<tr>
<td>VEX.L0.66.0F3A.W1 31 /r KSHIFTRQ k1, k2, imm8</td>
<td>RRI</td>
<td>V/V</td>
<td>AVX512BW</td>
<td>Shift right 64 bits in k2 by immediate and write result in k1.</td></tr>
<tr>
<td>VEX.L0.66.0F3A.W0 31 /r KSHIFTRD k1, k2, imm8</td>
<td>RRI</td>
<td>V/V</td>
<td>AVX512BW</td>
<td>Shift right 32 bits in k2 by immediate and write result in 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>Operand 1</th>
<th>Operand 2</th>
<th>Operand 3</th></tr>
<tr>
<td>RRI</td>
<td>ModRM:reg (w)</td>
<td>ModRM:r/m (r, ModRM:[7:6] must be 11b)</td>
<td>imm8</td></tr></table>
<h2 id="description">Description<a class="anchor" href="#description">
</a></h2>
<p>Shifts 8/16/32/64 bits in the second operand (source operand) right by the count specified in immediate and place the least significant 8/16/32/64 bits of the result in the destination operand. The higher bits of the destination are zero-extended. The destination is set to zero if the count value is greater than 7 (for byte shift), 15 (for word shift), 31 (for doubleword shift) or 63 (for quadword shift).</p>
<h2 id="operation">Operation<a class="anchor" href="#operation">
</a></h2>
<h3 id="kshiftrw">KSHIFTRW<a class="anchor" href="#kshiftrw">
</a></h3>
<pre>COUNT := imm8[7:0]
DEST[MAX_KL-1:0] := 0
IF COUNT &lt;=15
THEN DEST[15:0] := SRC1[15:0] &gt;&gt; COUNT;
FI;
</pre>
<h3 id="kshiftrb">KSHIFTRB<a class="anchor" href="#kshiftrb">
</a></h3>
<pre>COUNT := imm8[7:0]
DEST[MAX_KL-1:0] := 0
IF COUNT &lt;=7
THEN DEST[7:0] := SRC1[7:0] &gt;&gt; COUNT;
FI;
</pre>
<h3 id="kshiftrq">KSHIFTRQ<a class="anchor" href="#kshiftrq">
</a></h3>
<pre>COUNT := imm8[7:0]
DEST[MAX_KL-1:0] := 0
IF COUNT &lt;=63
THEN DEST[63:0] := SRC1[63:0] &gt;&gt; COUNT;
FI;
</pre>
<h3 id="kshiftrd">KSHIFTRD<a class="anchor" href="#kshiftrd">
</a></h3>
<pre>COUNT := imm8[7:0]
DEST[MAX_KL-1:0] := 0
IF COUNT &lt;=31
THEN DEST[31:0] := SRC1[31:0] &gt;&gt; COUNT;
FI;
</pre>
<h2 id="intel-c-c++-compiler-intrinsic-equivalent">Intel C/C++ Compiler Intrinsic Equivalent<a class="anchor" href="#intel-c-c++-compiler-intrinsic-equivalent">
</a></h2>
<pre>Compiler auto generates KSHIFTRW when needed.
</pre>
<h2 id="flags-affected">Flags Affected<a class="anchor" href="#flags-affected">
</a></h2>
<p>None.</p>
<h2 class="exceptions" id="simd-floating-point-exceptions">SIMD Floating-Point Exceptions<a class="anchor" href="#simd-floating-point-exceptions">
</a></h2>
<p>None.</p>
<h2 class="exceptions" id="other-exceptions">Other Exceptions<a class="anchor" href="#other-exceptions">
</a></h2>
<p>See <span class="not-imported">Table 2-63</span>, “TYPE K20 Exception Definition (VEX-Encoded OpMask Instructions w/o Memory Arg).”</p><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>