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

195 lines
5.9 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>FYL2X
— Compute y log2x</title></head><body><header><nav><ul><li><a href='index.html'>Index</a></li><li>December 2023</li></ul></nav></header><h1>FYL2X
— Compute y log2x</h1>
<table>
<tr>
<th>Opcode</th>
<th>Instruction</th>
<th>64-Bit Mode</th>
<th>Compat/Leg Mode</th>
<th>Description</th></tr>
<tr>
<td>D9 F1</td>
<td>FYL2X</td>
<td>Valid</td>
<td>Valid</td>
<td>Replace ST(1) with (ST(1) log<sub>2</sub>ST(0)) and pop the register stack.</td></tr></table>
<h2 id="description">Description<a class="anchor" href="#description">
</a></h2>
<p>Computes (ST(1) log<sub>2</sub> (ST(0))), stores the result in register ST(1), and pops the FPU register stack. The source operand in ST(0) must be a non-zero positive number.</p>
<p>The following table shows the results obtained when taking the log of various classes of numbers, assuming that neither overflow nor underflow occurs.</p>
<figure id="tbl-3-48">
<table>
<tr>
<th colspan="10">ST(0)</th></tr>
<tr>
<td rowspan="8"><strong>ST(1)</strong></td>
<td></td>
<td>−∞</td>
<td>F</td>
<td>±0</td>
<td>+0&lt;+F&lt;+1</td>
<td>+1</td>
<td>+F&gt;+1</td>
<td>+∞</td>
<td>NaN</td></tr>
<tr>
<td>−∞</td>
<td>*</td>
<td>*</td>
<td>+∞</td>
<td>+∞</td>
<td>*</td>
<td>−∞</td>
<td>−∞</td>
<td>NaN</td></tr>
<tr>
<td>F</td>
<td>*</td>
<td>*</td>
<td>**</td>
<td>+F</td>
<td>0</td>
<td>F</td>
<td>−∞</td>
<td>NaN</td></tr>
<tr>
<td>0</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>+0</td>
<td>0</td>
<td>0</td>
<td>*</td>
<td>NaN</td></tr>
<tr>
<td>+0</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>0</td>
<td>+0</td>
<td>+0</td>
<td>*</td>
<td>NaN</td></tr>
<tr>
<td>+F</td>
<td>*</td>
<td>*</td>
<td>**</td>
<td>F</td>
<td>+0</td>
<td>+F</td>
<td>+∞</td>
<td>NaN</td></tr>
<tr>
<td>+∞</td>
<td>*</td>
<td>*</td>
<td>−∞</td>
<td>−∞</td>
<td>*</td>
<td>+∞</td>
<td>+∞</td>
<td>NaN</td></tr>
<tr>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td></tr></table>
<figcaption><a href='fyl2x.html#tbl-3-48'>Table 3-48</a>. FYL2X Results</figcaption></figure>
<blockquote>
<p>F Means finite floating-point value.</p>
<p>* Indicatesfloating-pointinvalid-operation(#IA)exception.</p>
<p>** Indicates floating-point zero-divide (#Z) exception.</p></blockquote>
<p>If the divide-by-zero exception is masked and register ST(0) contains ±0, the instruction returns ∞ with a sign that is the opposite of the sign of the source operand in register ST(1).</p>
<p>The FYL2X instruction is designed with a built-in multiplication to optimize the calculation of logarithms with an arbitrary positive base (b):</p>
<p>log<sub>b</sub>x := (log<sub>2</sub>b)<sup>1</sup> log<sub>2</sub>x</p>
<p>This instructions operation is the same in non-64-bit modes and 64-bit mode.</p>
<h2 id="operation">Operation<a class="anchor" href="#operation">
</a></h2>
<pre>ST(1) := ST(1) log<sub>2</sub>ST(0);
PopRegisterStack;
</pre>
<h2 id="fpu-flags-affected">FPU Flags Affected<a class="anchor" href="#fpu-flags-affected">
</a></h2>
<table>
<tr>
<td rowspan="2">C1</td>
<td>Set to 0 if stack underflow occurred.</td></tr>
<tr>
<td>Set if result was rounded up; cleared otherwise.</td></tr>
<tr>
<td>C0, C2, C3</td>
<td>Undefined.</td></tr></table>
<h2 class="exceptions" id="floating-point-exceptions">Floating-Point Exceptions<a class="anchor" href="#floating-point-exceptions">
</a></h2>
<table>
<tr>
<td>#IS</td>
<td>Stack underflow occurred.</td></tr>
<tr>
<td rowspan="2">#IA</td>
<td>Either operand is an SNaN or unsupported format.</td></tr>
<tr>
<td>Source operand in register ST(0) is a negative finite value (not -0).</td></tr>
<tr>
<td>#Z</td>
<td>Source operand in register ST(0) is ±0.</td></tr>
<tr>
<td>#D</td>
<td>Source operand is a denormal value.</td></tr>
<tr>
<td>#U</td>
<td>Result is too small for destination format.</td></tr>
<tr>
<td>#O</td>
<td>Result is too large for destination format.</td></tr>
<tr>
<td>#P</td>
<td>Value cannot be represented exactly in destination format.</td></tr></table>
<h2 class="exceptions" id="protected-mode-exceptions">Protected Mode Exceptions<a class="anchor" href="#protected-mode-exceptions">
</a></h2>
<table>
<tr>
<td>#NM</td>
<td>CR0.EM[bit 2] or CR0.TS[bit 3] = 1.</td></tr>
<tr>
<td>#MF</td>
<td>If there is a pending x87 FPU exception.</td></tr>
<tr>
<td>#UD</td>
<td>If the LOCK prefix is used.</td></tr></table>
<h2 class="exceptions" id="real-address-mode-exceptions">Real-Address Mode Exceptions<a class="anchor" href="#real-address-mode-exceptions">
</a></h2>
<p>Same exceptions as in protected mode.</p>
<h2 class="exceptions" id="virtual-8086-mode-exceptions">Virtual-8086 Mode Exceptions<a class="anchor" href="#virtual-8086-mode-exceptions">
</a></h2>
<p>Same exceptions as in protected mode.</p>
<h2 class="exceptions" id="compatibility-mode-exceptions">Compatibility Mode Exceptions<a class="anchor" href="#compatibility-mode-exceptions">
</a></h2>
<p>Same exceptions as in protected mode.</p>
<h2 class="exceptions" id="64-bit-mode-exceptions">64-Bit Mode Exceptions<a class="anchor" href="#64-bit-mode-exceptions">
</a></h2>
<p>Same exceptions as in protected mode.</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>