EMOD EXTENDED MULTIPLY AND INTEGERIZE
Purpose |
perform accurate range reduction of math function arguments |
Format |
opcode mulr.rx, mulrx.rb, mud.rx, int.wl, fract.wx |
Operation |
int ß integer part of muld* {mulr’mulrx}; frac ß fractional part of muld * {mulr’mulrx); |
Condition codes |
N ß fract LSS 0; Z ß fract EQL 0; V ß {integer overflow}; C ß 0; |
Exceptions |
Integer overflow Floating underflow Reserved operand |
Opcodes |
54 EMODF Extended Multiply and Integrate Floating 74 EMODD Extended Multiply and Integrate Double |
Description |
The floating point multiplier extension operand (second operand) is concatenated with the floating point multiplier (first operand) to gain eight additional low order fraction bits. The multiplicand operand is multiplied by the extended multiplier operand. After multiplication, the integer portion is extracted and a 32-bit (EMODF) or 64-bit (EMODD) floating point number is formed from the fractional part of the product by truncating extra bits. The multiplication is such that the result is equivalent to the exact product truncated (before normalization) to a fraction field of 32 bits in floating and 64 bits in double. Regarding the result as the sum of an integer and fraction of the same sign, the integer operand is replaced by the integer part of the result and the fraction operand is replaced by the rounded fractional part of the result. |
Notes |
1. On a reserved operand fault, the integer operand and the fraction operand are unaffected. The condition codes are unpredictable. 2. On floating underflow, the integer and fraction operands are replaced by zero. 3. On integer overflow, the integer operand is replaced by the low order bits of the true result. 4. Floating overflow is indicated by integer overflow; how ever, integer overflow is possible in the absence of floating overflow. |