EMOD

VAX11

 

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.