*COMDECK  OPRDEFS 
          CTEXT  OPRDEFS - *IL* INSTRUCTION DEFINITIONS 
**        OPRDEFS - DEFINE THE PROPERTIES OF THE *IL* INSTRUCTIONS. 
  
          NOREF  .OC
 .OC      SET    0           OPCODE OF THE FIRST RLIST INSTRUCTION
  
**        GETARG - GET ARGUMENT STARTING IN COLUMN N FROM STRING SS 
*         M IS MAXIMUM STRING LENGTH
*         NOTE: S IS THE NULL MICRO IF THE ARG HAS LEADING BLANKS 
  
          MACRO  GETARG,S,N,M,SS
 S        MICRO  N-15,M,$SS$
 S        MICRO  1,, "S"
 GETARG   ENDM
  
**        V= - SCAN FIRST LIST AND SET RESULT TO VALUE IN SECOND LIST 
  
          MACRO  V=,V,S,L1,L2 
 V        SET    -1 
          ECHO   3,P1=(L1),P2=(L2)
          IFC    EQ,/S/P1/,2
 V        SET    P2 
          STOPDUP 
          ERRMI  V           ILLEGAL MACRO PARAM - S
 V=       ENDM
  
**        FUNIT - DEFINE FUNCTIONAL UNIT CODES FOR *OPR* MACRO
  
          MACRO  FUNIT,N,F66,F76
 M        IFEQ   .CPU,76,2
 N        EQU    F76 F66           DEFAULT TO 6600 UNIT 
 M        SKIP   1
 N        EQU    F66
 FUNIT    ENDM
          SPACE  2
**        FUNCTIONAL UNIT CODES FOR 6600/7600 
* 
* UNIT           66,76 UNIT NUMBER
  
          QUAL   FUNIT
*PSEUDO   FUNIT  0
 BRANCH   FUNIT  1
 BOOL     FUNIT  2
 SHIFT    FUNIT  3
 IADD     FUNIT  4
 FADD     FUNIT  5
 MULT     FUNIT  6                 MULT2 = 7 FOR A 6600 
 DIVIDE   FUNIT  8
 INC      FUNIT  9                 INC2 = 10 ON A 6600
 NORM     FUNIT  SHIFT,7
 BJUMP    FUNIT  INC,BRANCH 
 XJUMP    FUNIT  IADD,BRANCH
 LCM      FUNIT  10                LCM PSEUDO FUNCT UNIT FOR 7600 
 POPC     FUNIT  DIVIDE,11
 PACK     FUNIT  SHIFT,BOOL 
          QUAL   *
          SPACE  2
**        FORMAT OF THE *OPR* DEFINITION IS - 
* NAM     OPR ( TYPE  COMM  USI  T6/T7  UNIT1 UNIT2  LEN K=J  SPEC   B )
* 
*         NAME - MEMONIC NAME OF *IL* INSTRUCTION 
*         TYPE - RLIST TYPE ( I - IV )
*         COMM - "COMM" IF OPERANDS ARE COMMUTATIVE, ELSE "-" 
*         USI  - "USI" IF INSTRUCTION IS UNSAFE TO MOVE BECAUSE IT
*                MAY CAUSE AN INTERRUPT ( FLOATING POINT OPERATIONS ).
*         T6/T7 - 6600/7600 EXECUTION TIME OR "-" FOR SPECIAL INST
*                FOR B-JUMPS THE STACK TIME IS USED.
*                FOR X-JUMPS THE FALL THROUGH TIME IS USED. 
*                TIMES FOR LAB, AND UNCONDITIONAL JUMPS IS SET AT 31
*                TO ALLOW THEM TO APPEAR IN THE MIDDLE OF A SEQUENCE. 
*         UNIT1 - FUNCTIONAL UNIT WHICH EXECUTES THE INSTRUCTION
*         UNIT2 - SECOND FUNCTIONAL UNIT, IF AN ALTERNATE UNIT IS 
*               AVAILABLE AND DIFFERENT FROM THE FIRST. 
*               "FU1" IN THE CASE OF DUPLEXED UNITS ON THE 6600 
*                ( INCREMENT AND MULTIPLY ).
*         LEN  - INSTRUCTION LENGTH IN BITS ( 15,30,60,- )
*         K=J - MISCELLANEOUS INSTRUCTION PROPERTIES
*         SPEC - ANY SPECIAL PROPERTIES OF THE INSTRUCTION
*         B   - BOUNDARY MARKER ( BEGINS OR TERMINATES A BASIC BLOCK )
* 
* NAM     OPR ( TYPE  COMM  USI  T6/T7  UNIT1 UNIT2  LEN K=J  SPEC   B )
  
 EOQ      OPR (  IV     -    -    1/1    -     -      -              A )
 BOS      OPR (  IV     -    -     -     -     -      -                )
 EOS      OPR (  IV     -    -     -     -     -      -              A )
 DAR      OPR (  I      -    -     -     -     -      -                )
 RS       OPR (  II     -    -     -     -     -      -       REGST    )
 DEF      OPR (  II     -    -     -     -     -      -              D )
 LAB      OPR (  IV     -    -   31/31   -     -      -              B )
 ENT      OPR (  IV     -    -     -     -     -      -              B )
  
 XMT      OPR (  I      -    -    3/2  BOOL   SHIFT  15  K=J           )
 AND      OPR (  I    COMM   -    3/2  BOOL    -     15                )
 OR       OPR (  I    COMM   -    3/2  BOOL    -     15                )
 XOR      OPR (  I    COMM   -    3/2  BOOL    -     15                )
 XMTC     OPR (  I      -    -    3/2  BOOL    -     15  K=J           )
 STR      OPR (  I      -    -    3/2  BOOL    -     15                )
 IMP      OPR (  I      -    -    3/2  BOOL    -     15                )
 EQV      OPR (  I    COMM   -    3/2  BOOL    -     15                )
 KLS      OPR (  III    -    -    3/2  SHIFT   -     15  K=J           )
 KRS      OPR (  III    -    -    3/2  SHIFT   -     15  K=J           )
 ILS      OPR (  I      -    -    3/2  SHIFT   -     15                )
 IRS      OPR (  I      -    -    3/2  SHIFT   -     15                )
 NR       OPR (  I      -   USI   4/3  NORM    -     15  2R            )
 RNZ      OPR (  I      -   USI   4/3  NORM    -     15  2R            )
 UP       OPR (  I      -    -    3/2  PACK    -     15  2R            )
 PK       OPR (  I      -    -    3/2  PACK    -     15                )
 FA       OPR (  I    COMM  USI   4/4  FADD    -     15                )
 FS       OPR (  I      -   USI   4/4  FADD    -     15                )
 DFA      OPR (  I    COMM  USI   4/4  FADD    -     15                )
 DFS      OPR (  I      -   USI   4/4  FADD    -     15                )
 RFA      OPR (  I    COMM  USI   4/4  FADD    -     15                )
 RFS      OPR (  I      -   USI   4/4  FADD    -     15                )
 IA       OPR (  I    COMM   -    3/2  IADD    -     15                )
 IS       OPR (  I      -    -    3/2  IADD    -     15                )
 FM       OPR (  I    COMM  USI  10/5  MULT   FU1    15                )
 RFM      OPR (  I    COMM  USI  10/5  MULT   FU1    15                )
 DFM      OPR (  I    COMM  USI  10/5  MULT   FU1    15                )
 FMA      OPR (  II     -    -    3/2  SHIFT   -     15  K=J  ZEROP    )
 FD       OPR (  I      -   USI  29/20 DIVIDE  -     15                )
 RFD      OPR (  I      -   USI  29/20 DIVIDE  -     15                )
 NOP      OPR (  III    -    -     -     -     -      -       REGST    )
 CX       OPR (  I      -    -    8/2  POPC    -     15  K=J           )
  
 LD       OPR (  III    -    -    8/8  INC    FU1    30       LOAD     )
 ST       OPR (  III    -    -   10/2  INC    FU1    30       STORE    )
 STT      OPR (  III    -    -    3/2  INC    FU1    30                )
 PLD      OPR (  I      -    -    8/8  INC    FU1    30       LOAD     )
 PST      OPR (  I      -    -   10/2  INC    FU1    30       STORE    )
 S        OPR (  II     -    -    3/2  INC    FU1    30       ZEROP    )
 SLD      OPR (  I    COMM   -    8/8  INC    FU1    15       LOAD     )
 SST      OPR (  I    COMM   -   10/2  INC    FU1    15       STORE    )
 SA       OPR (  I    COMM   -    3/2  INC    FU1    15                )
 SDL      OPR (  I      -    -    8/8  INC    FU1    15       LOAD     )
 SDS      OPR (  I      -    -   10/2  INC    FU1    15       STORE    )
 SS       OPR (  I      -    -    3/2  INC    FU1    15                )
 DRL      OPR (  I      -    -    0/17 LCM     -     15  K=J  LOAD2    )
 DWL      OPR (  I      -    -    0/3  LCM     -     15  K=J  STORE2   )
  
*IF       DEF,PLI,1 
 RJXJ     OPR (  III    -    -   11/2  XJUMP   -     30       ECJUMP F )
 JPX      OPR (  III    -    -   11/2  XJUMP   -     30       JUMP   C )
 JPBB     OPR (  III    -    -    8/3  BJUMP   -     30       JUMP   C )
  
 JIN      OPR (  III    -    -   14/13 INC    FU1    30       UJUMP  A )
 RJ3      OPR (  IV     -    -   31/31 BRANCH  -     30       UJUMP  A )
 RJ6      OPR (  IV     -    -   31/31 BRANCH  -     30       UJUMP  A )
 UJP      OPR (  IV     -    -   14/13 BJUMP  FU1    30       UJUMP  A )
  
 ILD      OPR (  III    -    -    8/8  INC    FU1    30       LOAD     )
 TLD      OPR (  III    -    -    8/8  INC    FU1    30       LOAD     )
 TST      OPR (  III    -    -   10/2  INC    FU1    30       STORE    )
 IAZ      OPR (  I    COMM   -    3/2  IADD    -     15                )
 ISZ      OPR (  I      -    -    3/2  IADD    -     15                )
 IM       OPR (  I    COMM   -   10/5  MULT   FU1    15                )
 CLR      OPR (  II     -    -    3/2  SHIFT  BOOL   15  K=J  ZEROP    )
 SXT      OPR (  I      -    -    3/2  BOOL   SHIFT  15  K=J           )
  
*         DEFINE MICROS FOR THE CONDITIONAL X AND B JUMPS 
  
 XJUMPS   MICRO  1,,/ZR,NZ,PL,MI,OR,IR,DF,ID/ 
 BJUMPS   MICRO  1,,/EQ,NE,GE,LT/ 
  
          PURGMAC GETARG,FUNIT,V=,OPR 
          ENDX
