*COMDECK  OPRDEFS 
 OPRDEFS  CTEXT  OPRDEFS - CCG *IL* INSTRUCTION DEFINITIONS 
**        OPRDEFS - DEFINE THE PROPERTIES OF THE *IL* INSTRUCTIONS. 
 OPRDEFS  SPACE  2
**        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    FUNIT  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   *
 OPRDEFS  SPACE  3,14 
**        FORMAT OF THE *OPR* DEFINITION IS - 
* NAM     OPR ( TYPE  COMM USI T9/T6/T7 UNIT1 UNIT2  LEN K=J  SPEC   B )
* 
*         NAME - MEMONIC NAME OF *IL* INSTRUCTION 
*         TYPE - INSTRUCTION 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 ).
*         T9   -  990 EXECUTION TIME OR "-" FOR SPECIAL INST
*         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. 
*                TIME 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 T9/T6/T7 UNIT1 UNIT2  LEN K=J  SPEC   B )
*         PSEUDO INSTRUCTIONS 
 EOQ      OPR (  IV     -   -  1/ 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/31   -     -      -              B )
 ENT      OPR (  IV     -   -      -     -     -      -              B )
*         REGISTER TO REGISTER MACHINE INSTRUCTIONS 
 XMT      OPR (  I      -   -  3/ 3/2  BOOL   SHIFT  15  K=J           )
 AND      OPR (  I    COMM  -  3/ 3/2  BOOL    -     15                )
 OR       OPR (  I    COMM  -  3/ 3/2  BOOL    -     15                )
 XOR      OPR (  I    COMM  -  3/ 3/2  BOOL    -     15                )
 XMTC     OPR (  I      -   -  3/ 3/2  BOOL    -     15  K=J           )
 STR      OPR (  I      -   -  3/ 3/2  BOOL    -     15                )
 IMP      OPR (  I      -   -  3/ 3/2  BOOL    -     15                )
 EQV      OPR (  I    COMM  -  3/ 3/2  BOOL    -     15                )
 KLS      OPR (  III    -   -  4/ 3/2  SHIFT   -     15  K=J           )
 KRS      OPR (  III    -   -  4/ 3/2  SHIFT   -     15  K=J           )
 ILS      OPR (  I      -   -  4/ 3/2  SHIFT   -     15                )
 IRS      OPR (  I      -   -  4/ 3/2  SHIFT   -     15                )
 NR       OPR (  I      -  USI 6/ 4/3  NORM    -     15  2R            )
 RNZ      OPR (  I      -  USI 6/ 4/3  NORM    -     15  2R            )
 UP       OPR (  I      -   -  3/ 3/2  PACK    -     15  2R            )
 PK       OPR (  I      -   -  3/ 3/2  PACK    -     15                )
 FA       OPR (  I    COMM USI 7/ 4/4  FADD    -     15                )
 FS       OPR (  I      -  USI 7/ 4/4  FADD    -     15                )
 DFA      OPR (  I    COMM USI 7/ 4/4  FADD    -     15                )
 DFS      OPR (  I      -  USI 7/ 4/4  FADD    -     15                )
 RFA      OPR (  I    COMM USI 7/ 4/4  FADD    -     15                )
 RFS      OPR (  I      -  USI 7/ 4/4  FADD    -     15                )
 IA       OPR (  I    COMM USI 3/ 3/2  IADD    -     15                )
 IS       OPR (  I      -   -  3/ 3/2  IADD    -     15                )
 FM       OPR (  I    COMM USI 7/10/5  MULT   FU1    15                )
 RFM      OPR (  I    COMM USI 7/10/5  MULT   FU1    15                )
 DFM      OPR (  I    COMM USI 7/10/5  MULT   FU1    15                )
 FMA      OPR (  II     -   -  4/ 3/2  SHIFT   -     15  K=J  ZEROP    )
 FD       OPR (  I      -  USI31/29/20 DIVIDE  -     15                )
 RFD      OPR (  I      -  USI31/29/20 DIVIDE  -     15                )
 NOP      OPR (  III    -   -      -     -     -      -       REGST    )
 CX       OPR (  I      -   -  6/ 8/2  POPC    -     15  K=J           )
*         MEMORY REFERENCE AND SET (LOAD IMMEDIATE ) INSTRUCTIONS 
 LD       OPR (  III    -   -  8/ 8/8  INC    FU1    30       LOAD     )
 ST       OPR (  III    -   -  3/10/2  INC    FU1    30       STORE    )
 STT      OPR (  III    -   -  3/ 3/2  INC    FU1    30                )
 PLD      OPR (  I      -   -  8/ 8/8  INC    FU1    30       LOAD     )
 PST      OPR (  I      -   -  3/10/2  INC    FU1    30       STORE    )
 S        OPR (  II     -   -  3/ 3/2  INC    FU1    30       ZEROP    )
 SLD      OPR (  I    COMM  -  8/ 8/8  INC    FU1    15       LOAD     )
 SST      OPR (  I    COMM  -  3/10/2  INC    FU1    15       STORE    )
 SA       OPR (  I    COMM  -  3/ 3/2  INC    FU1    15                )
 SDL      OPR (  I      -   -  8/ 8/8  INC    FU1    15       LOAD     )
 SDS      OPR (  I      -   -  3/10/2  INC    FU1    15       STORE    )
 SS       OPR (  I      -   -  3/ 3/2  INC    FU1    15                )
 DRL      OPR (  I      -   -  8/ 0/17 LCM     -     15       LOAD2    )
 DWL      OPR (  I      -   -  3/ 0/3  LCM     -     15       STORE2   )
*         CONDITIONAL JUMPS 
 RJXJ     OPR (  III    -   -  5/ 9/3  XJUMP   -     30       ECJUMP   )
 JPX      OPR (  III    -   -  5/11/2  XJUMP   -     30       JUMP   C )
 JPBB     OPR (  III    -   -  5/ 8/3  BJUMP   -     30       JUMP   C )
*         UNCONDITIONAL JUMPS 
 JIN      OPR (  III    -   - 29/14/13 INC    FU1    30       UJUMP  A )
 RJ3      OPR (  IV     -   - 31/31/31 BRANCH  -     30       UJUMP  A )
 RJ6      OPR (  IV     -   - 31/31/31 BRANCH  -     30       UJUMP  A )
 UJP      OPR (  IV     -   -  5/14/13 BJUMP  FU1    30       UJUMP  A )
*         SPECIAL INSTRUCTIONS FOR THE OPTIMIZER
 ILD      OPR (  III    -   -  8/ 8/8  INC    FU1    30       LOAD     )
 TLD      OPR (  III    -   -  8/ 8/8  INC    FU1    30       LOAD     )
 TST      OPR (  III    -   -  3/10/2  INC    FU1    30       STORE    )
 IAZ      OPR (  I    COMM  -  3/ 3/2  IADD    -     15                )
 ISZ      OPR (  I      -   -  3/ 3/2  IADD    -     15                )
 IM       OPR (  I    COMM  -  7/10/5  MULT   FU1    15                )
 LDC      OPR (  III    -   -  8/ 8/8  INC    FU1    30       LOAD     )
 LDV      OPR (  III    -   -  8/ 8/8  INC    FU1    30       LOAD     )
 CLR      OPR (  II     -   -  4/ 3/2  SHIFT  BOOL   15  K=J  ZEROP    )
 SXT      OPR (  I      -   -  3/ 3/2  BOOL   SHIFT  15  K=J           )
  
*         DEFINE MICROS FOR THE CONDITIONAL X AND B JUMPS 
  
 BJUMPS   MICRO  1,,/EQ,NE,GE,LT/ 
 RELOPS   MICRO  1,,/EQ,NE,GT,LT,GE,LE/ 
 XJUMPS   MICRO  1,,/ZR,NZ,PL,MI,IR,OR,DF,ID/ 
 ^XJUMPS  MICRO  1,,/NZ,ZR,MI,PL,OR,IR,ID,DF/ 
  
          PURGMAC GETARG,FUNIT,V=,OPR 
          ENDX
