| Opcode | Encoding | 16-bit | 32-bit | 64-bit | CPUID Feature Flag(s) | Description |
|---|---|---|---|---|---|---|
D9 F0F2XM1 | zo | Valid | Valid | Valid | fpu | Replace ST(0) with (2ST(0) - 1) |
Encoding
| Encoding | Operand |
|---|---|
zo | None |
Description
The F2XM1 instruction computes the value of 2 to the power of the source operand, then subtracts 1. The result is stored in the destination operand. The source and destination operands are implicitly ST(0). The value of the source operand must lie between -1 and 1; Values outside this range produce undefined results.
Operation
public void F2XM1()
{
F80 x = FpuPop();
x = Math.Pow(2, x) - 1;
FpuPush(x);
}Flags Affected
C0- Undefined.
C1- Set if the result was rounded up. Cleared otherwise or if a stack overflow occurs.
C2- Undefined.
C3- Undefined.
Exceptions
Real-Address Mode
#UD- If the
LOCK- prefix is used.
#NM- If
CR0.EM- or
CR0.TS- are
1- .
Virtual-8086 Mode
#UD- If the
LOCK- prefix is used.
#NM- If
CR0.EM- or
CR0.TS- are
1- .
Protected Mode
#UD- If the
LOCK- prefix is used.
#NM- If
CR0.EM- or
CR0.TS- are
1- .
Compatibility Mode
#UD- If the
LOCK- prefix is used.
#NM- If
CR0.EM- or
CR0.TS- are
1- .
Long Mode
#UD- If the
LOCK- prefix is used.
#NM- If
CR0.EM- or
CR0.TS- are
1- .
Legacy Floating-Point
#MF#D- Denormal operand.#IA- Invalid arithmetic operation.#IS- Stack overflow or underflow.#P- Inexact result.#U- Numeric underflow.