[OpenVMS documentation]
[Site home] [Send comments] [Help with this site] [How to order documentation] [OpenVMS site] [Compaq site]
Updated: 11 December 1998

VAX MACRO and Instruction Set Reference Manual


Previous Contents Index


DIV

Divide

Format

2operand: opcode divr.rx, quo.mx

3operand: opcode divr.rx, divd.rx, quo.wx

Condition Codes

N|| <--- quo LSS 0;  
Z|| <--- quo EQL 0;  
V|| <--- 0;  
C|| <--- 0;  

Exceptions

Opcodes

46 DIVF2 Divide F_floating 2 Operand
47 DIVF3 Divide F_floating 3 Operand
66 DIVD2 Divide D_floating 2 Operand
67 DIVD3 Divide D_floating 3 Operand
46FD DIVG2 Divide G_floating 2 Operand
47FD DIVG3 Divide G_floating 3 Operand
66FD DIVH2 Divide H_floating 2 Operand
67FD DIVH3 Divide H_floating 3 Operand

Description

In 2 operand format, the quotient operand is divided by the divisor operand and the quotient operand is replaced by the rounded result. In 3 operand format, the dividend operand is divided by the divisor operand, and the quotient operand is replaced by the rounded result.

Notes

  1. On a reserved operand fault, the quotient operand is unaffected, and the condition codes are UNPREDICTABLE.
  2. On floating underflow, if FU is set, a fault occurs. On a floating underflow fault, the quotient operand is unaffected. If FU is clear, the quotient operand is replaced by zero, and no exception occurs.

  3. On floating overflow, the instruction faults, the quotient operand is unaffected, and the condition codes are UNPREDICTABLE.
  4. On divide by zero, the quotient operand and condition codes are affected, as in note 3.

EMOD

Extended Multiply and Integerize

Format

EMODF and EMODD:

opcode mulr.rx, mulrx.rb, muld.rx, int.wl, fract.wx


EMODG and EMODH:

opcode mulr.rx, mulrx.rw, muld.rx, int.wl, fract.wx

Condition Codes

N|| <--- fract LSS 0;  
Z|| <--- fract EQL 0;  
V|| <--- {integer overflow};  
C|| <--- 0;  

Exceptions

Opcodes

54 EMODF Extended Multiply and Integerize F_floating
74 EMODD Extended Multiply and Integerize D_floating
54FD EMODG Extended Multiply and Integerize G_floating
74FD EMODH Extended Multiply and Integerize H_floating

Description

The multiplier extension operand is concatenated with the multiplier operand to gain 8 (EMODD and EMODF), 11 (EMODG), or 15 (EMODH) additional low-order fraction bits. The low-order 5 or 1 bits of the 16-bit multiplier extension operand are ignored by the EMODG and EMODH instructions, respectively. The multiplicand operand is multiplied by the extended multiplier operand. The multiplication result is equivalent to the exact product truncated (before normalization) to a fraction field of 32 bits in F_floating, 64 bits in D_floating and G_floating, and 128 bits in H_floating. The result is regarded 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, if FU is set, a fault occurs. On a floating underflow fault, the integer and fraction parts are unaffected. If FU is clear, the integer and fraction parts are replaced by zero, and no exception occurs.
  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; however, integer overflow is possible in the absence of floating overflow.
  5. The signs of the integer and fraction are the same unless integer overflow results.
  6. Because the fraction part is rounded after separation of the integer part, it is possible that the value of the fraction operand is 1.

MNEG

Move Negated

Format

opcode src.rx, dst.wx

Condition Codes

N|| <--- dst LSS 0;  
Z|| <--- dst EQL 0;  
V|| <--- 0;  
C|| <--- 0;  

Exceptions

Opcodes

52 MNEGF Move Negated F_floating
72 MNEGD Move Negated D_floating
52FD MNEGG Move Negated G_floating
72FD MNEGH Move Negated H_floating

Description

The destination operand is replaced by the negative of the source operand.

MOV

Move

Format

opcode src.rx, dst.wx

Condition Codes

N|| <--- dst LSS 0;  
Z|| <--- dst EQL 0;  
V|| <--- 0;  
C|| <--- C;  

Exceptions

Opcodes

50 MOVF Move F_floating
70 MOVD Move D_floating
50FD MOVG Move G_floating
70FD MOVH Move H_floating

Description

The destination operand is replaced by the source operand.

Note

On a reserved operand fault, the destination operand is unaffected, and the condition codes are UNPREDICTABLE.


MUL

Multiply

Format

2operand: opcode mulr.rx, prod.mx

3operand: opcode mulr.rx, muld.rx, prod.wx

Condition Codes

N|| <--- prod LSS 0;  
Z|| <--- prod EQL 0;  
V|| <--- 0;  
C|| <--- 0;  

Exceptions

Opcodes

44 MULF2 Multiply F_floating 2 Operand
45 MULF3 Multiply F_floating 3 Operand
64 MULD2 Multiply D_floating 2 Operand
65 MULD3 Multiply D_floating 3 Operand
44FD MULG2 Multiply G_floating 2 Operand
45FD MULG3 Multiply G_floating 3 Operand
64FD MULH2 Multiply H_floating 2 Operand
65FD MULH3 Multiply H_floating 3 Operand

Description

In 2 operand format, the product operand is multiplied by the multiplier operand, and the product operand is replaced by the rounded result. In 3 operand format, the multiplicand operand is multiplied by the multiplier operand, and the product operand is replaced by the rounded result.

Notes

  1. On a reserved operand fault, the product operand is unaffected, and the condition codes are UNPREDICTABLE.
  2. On floating underflow, if FU is set, a fault occurs. On a floating underflow fault, the product operand is unaffected. If FU is clear, the product operand is replaced by zero, and no exception occurs.
  3. On floating overflow, the instruction faults, the product operand is unaffected, and the condition codes are UNPREDICTABLE.

POLY

Polynomial Evaluation

Format

opcode arg.rx, degree.rw, tbladdr.ab

Condition Codes

N|| <--- R0 LSS 0;  
Z|| <--- R0 EQL 0;  
V|| <--- 0;  
C|| <--- 0;  

Exceptions

Opcodes

55 POLYF Polynomial Evaluation F_floating
75 POLYD Polynomial Evaluation D_floating
55FD POLYG Polynomial Evaluation G_floating
75FD POLYH Polynomial Evaluation H_floating

Description

The table address operand points to a table of polynomial coefficients. The coefficient of the highest-order term of the polynomial is pointed to by the table address operand. The table is specified with lower-order coefficients stored at increasing addresses. The data type of the coefficients is the same as the data type of the argument operand. The evaluation is carried out by Horner's method, and the contents of R0 (R1'R0 for POLYD and POLYG, R3'R2'R1'R0 for POLYH) are replaced by the result. The result computed is:


if d = degree 
and x = arg 
result = C[0]+x**0 + x*(C[1] + x*(C[2] + ... x*C[d])) 

The unsigned word degree operand specifies the highest-numbered coefficient to participate in the evaluation. POLYH requires four longwords on the stack to store arg in case the instruction is interrupted.

Notes

  1. After execution:
  2. On a floating fault:
  3. If the unsigned word degree operand is zero and the argument is not a reserved operand, the result is C[0].
  4. If the unsigned word degree operand is greater than 31, a reserved operand fault occurs.
  5. On a reserved operand fault:
  6. On floating underflow after the rounding operation at any iteration of the computation loop, a fault occurs if FU is set. If FU is clear, the temporary result (tmp3) is replaced by zero and the operation continues. In this case, the final result may be nonzero if underflow occurred before the last iteration.
  7. On floating overflow after the rounding operation at any iteration of the computation loop, the instruction terminates with a fault.
  8. If the argument is zero and one of the coefficients in the table is the reserved operand, whether a reserved operand fault occurs is UNPREDICTABLE.
  9. For POLYH, some implementations may not save arg on the stack until after an interrupt or fault occurs. However, arg will always be on the stack if an interrupt or floating fault occurs after FPD is set. If the four longwords on the stack overlap any of the source operands, the results are UNPREDICTABLE.

Example


; To compute P(x) = C0 + C1*x + C2*x**2 
; where C0 = 1.0,  C1 = .5, and C2 = .25 
 
        POLYF   X,#2,PTABLE 
        . 
        . 
        . 
PTABLE: .FLOAT  0.25    ; C2 
        .FLOAT  0.5     ; C1 
        .FLOAT  1.0     ; C0 
      


SUB

Subtract

Format

2operand: opcode sub.rx, dif.mx

3operand: opcode sub.rx, min.rx, dif.wx

Condition Codes

N|| <--- dif LSS 0;  
Z|| <--- dif EQL 0;  
V|| <--- 0;  
C|| <--- 0;  

Exceptions

Opcodes

42 SUBF2 Subtract F_floating 2 Operand
43 SUBF3 Subtract F_floating 3 Operand
62 SUBD2 Subtract D_floating 2 Operand
63 SUBD3 Subtract D_floating 3 Operand
42FD SUBG2 Subtract G_floating 2 Operand
43FD SUBG3 Subtract G_floating 3 Operand
62FD SUBH2 Subtract H_floating 2 Operand
63FD SUBH3 Subtract H_floating 3 Operand

Description

In 2 operand format, the subtrahend operand is subtracted from the difference operand, and the difference is replaced by the rounded result. In 3 operand format, the subtrahend operand is subtracted from the minuend operand, and the difference operand is replaced by the rounded result.

Notes

  1. On a reserved operand fault, the difference operand is unaffected, and the condition codes are UNPREDICTABLE.
  2. On floating underflow, if FU is set, a fault occurs. Zero is stored as the result of floating underflow only if FU is clear. On a floating underflow fault, the difference operand is unaffected. If FU is clear, the difference operand is replaced by zero, and no exception occurs.
  3. On floating overflow, the instruction faults, the difference operand is unaffected, and the condition codes are UNPREDICTABLE.

TST

Test

Format

opcode src.rx

Condition Codes

N|| <--- src LSS 0;  
Z|| <--- src EQL 0;  
V|| <--- 0;  
C|| <--- 0;  

Exceptions

Opcodes

53 TSTF Test F_floating
73 TSTD Test D_floating
53FD TSTG Test G_floating
73FD TSTH Test H_floating

Description

The condition codes are affected according to the value of the source operand.

Notes

  1. TSTx src is equivalent to CMPx src, #0, but is 5 (F_floating) or 9 (D_floating or G_floating) or 17 (H_floating) bytes shorter.
  2. On a reserved operand fault, the condition codes are UNPREDICTABLE.


Previous Next Contents Index

[Site home] [Send comments] [Help with this site] [How to order documentation] [OpenVMS site] [Compaq site]
[OpenVMS documentation]

Copyright © Compaq Computer Corporation 1998. All rights reserved.

Legal
4515PRO_024.HTML