fscale
Scale
FSCALE
Scales ST(0) by ST(1) (ST(0) * 2^ST(1)).
Pseudocode Operation
if (ST(1) is not integer or out_of_range) {
raise_exception(invalid_operation)
} else {
ST(0) ← ST(0) * (2 ^ trunc(ST(1)))
}
Encoding
Binary Layout
D9
+0
FD
+1
Operands
Related
More in x87 FPU
Reference
Instruction Forms
| Opcode | Instruction | Op/En | 64/32-bit Mode | CPUID | Description |
|---|---|---|---|---|---|
| D9 FD | FSCALE | Valid Valid | Scale ST(0) by ST(1). |
Description
Truncates the value in the source operand (toward 0) to an integral value and adds that value to the exponent of the destination operand. The destination and source operands are floating-point values located in registers ST(0) and ST(1), respectively. This instruction provides rapid multiplication or division by integral powers of 2. The following table shows the results obtained when scaling various classes of numbers, assuming that neither overflow nor underflow occurs.
Table 3-36. FSCALE Results ST(1)
- ∞ - F - 0 + 0 + F + ∞ NaN - ∞ NaN - ∞ - ∞ - ∞ - ∞ - ∞ NaN ST(0) - F - 0 - F - F - F - F - ∞ NaN - 0 - 0 - 0 - 0 - 0 - 0 NaN NaN + 0 + 0 + 0 + 0 + 0 + 0 NaN NaN + F + 0 + F + F + F + F + ∞ NaN + ∞ NaN + ∞ + ∞ + ∞ + ∞ + ∞ NaN NaN NaN NaN NaN NaN NaN NaN NaN
Operation
ST(0) := ST(0) ∗ 2RoundTowardZero(ST(1));
Exceptions
Protected Mode Exceptions
#NM CR0.EM[bit 2] or CR0.TS[bit 3] = 1.
#MF If there is a pending x87 FPU exception.
#UD If the LOCK prefix is used.
Real-Address Mode Exceptions
Same exceptions as in protected mode.
Virtual-8086 Mode Exceptions
Same exceptions as in protected mode.
Compatibility Mode Exceptions
Same exceptions as in protected mode.
64-Bit Mode Exceptions
Same exceptions as in protected mode.
FSCALE-Scale Vol. 2A 3-379